Lỗi khi SheetActive

Liên hệ QC

vumian

Mỗi bậc thang là mỗi Cell
Tham gia
12/3/07
Bài viết
267
Được thích
186
Nghề nghiệp
employee only, not a boss
Cho mình hỏi, đọna code sau bị lỗi , hôg hiểu vì sao

PHP:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Set oCurrent = ActiveCell.Value
If Not IsEmpty(oCurrent) Then
Cells.Find(What:="oCurrent", After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _
        xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
        , SearchFormat:=False).Activate
Else
    MsgBox "Hong tim thay"
End If
Set oCurrent = Nothing
End Sub

Mình muốn lấy cái Activecell ở sheet1 , khi qua những sheet khác, thì nó tìm cái giá trị đó ở sheet2, mà nó lỗi cái cái Activecell, Bác xem giúp

Thanks,
 

File đính kèm

  • SheetActivate.xls
    25 KB · Đọc: 5
Lần chỉnh sửa cuối:
Bạn sai mấy chổ:
1> Nếu Dim oCurrent As Range thì phải Set oCurrent = ActiveCell chứ. Và phải sửa lại chổ:
Cells.Find(What:="oCurrent"... thành Cells.Find(What:=oCurrent.Value....
Tóm lại: Hiểu sai về Range và Value
Sửa lại vầy:
PHP:
Dim oCurrent As Range
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
   Set oCurrent = ActiveCell
   If Not IsEmpty(oCurrent) Then
   Cells.Find(What:=oCurrent.Value, After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _
        xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
        , SearchFormat:=False).Activate
   Else
        MsgBox "Hong tim thay"
   End If
Set oCurrent = Nothing
End Sub
NDU
 

File đính kèm

  • SheetActivate_01.xls
    23 KB · Đọc: 14
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
Sao kỳ vậy Ndu, cứ mỗi lần chuyển sheet là nó lại "hong tim thay", trong khi dữ liệu có mà, tìm thấy mà, và nó phải đặt active ngay dữ liệu đó
 
Upvote 0
Sao kỳ vậy Ndu, cứ mỗi lần chuyển sheet là nó lại "hong tim thay", trong khi dữ liệu có mà, tìm thấy mà, và nó phải đặt active ngay dữ liệu đó
Tại code của bạn tìm theo ActiveCell mà!
Trong code rõ ràng bạn "nói" rằng nếu ActiveCell = rổng thì MsgBox "Hong tim thay"
Vậy nếu bạn muốn nó "Tìm thấy" thì chọn vào cell có dử liệu trước
Rất có thể bạn "muốn" 1 đàng nhưng lại "diển đạt" sai ý tưởng!
Có thể nói rõ về ý tưởng của bạn được không?
Tìm là tìm cái gì?
 
Lần chỉnh sửa cuối:
Upvote 0
Giả sử mình đứng ở sheet1, giá trị activecell của sheet1 là 111
- Muốn là chuyển qua các sheet khác, thì tìm giá trị 111 trong các sheet mới , lúc này thì Sheet mới là ActiveSheet, nếu tìm thấy thì đặt selection ngay đó
Mong là bác hiểu

Thanks,
 
Upvote 0
Vậy thì trong Sheet1 vumian phải dùng Selection_Change() để mổi lần Selection nó mới gán lại biến oCurrent

TDN
 
Upvote 0
-Sở dĩ cứ "hong tim thay" vì lý do sau sự kiện Workbook_SheetActivate thì sheet vừa được kích hoạt là activate. Nên giá trị dò tìm của ActiveCell cũng nằm trong sheet này. Viết như thế thì việc dò tìm xảy ra trong cùng 1 sheet. Ví dụ từ sheet 1 --> sheet2 thì cái ActiveCell đó là của sheet2.
 
Upvote 0
Hichic, Tóm lại là sửa code làm sao cho nó chạy được bác
 
Upvote 0
-To tedaynui: Code rất sáng tạo.
-To vumian: Chỉnh thêm 1 chút để "hong tim thay" hợp lý hơn và không bị báo lỗi.
Mã:
 Set cllfind = Cells.Find(What:=oCurrent, After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _
        xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
        , SearchFormat:=False)
            If Not cllfind Is Nothing Then
                cllfind.Select
            Else
                  MsgBox "Hong tim thay"
 
Upvote 0
Bác ơi,

Mình loại trừ lỗi, mà sao nó vẫn cứ báo là Hông tìm thấy, hoặc là không chạy đúng lộ trình của code, nó kỳ kỳ sao á, bác thử click qua click lại các sheet xem, sẽ báo lên liền à

Nhờ bác xem lại giúp,
Thanks,
 

File đính kèm

  • SheetActivate_01-3.xls
    34 KB · Đọc: 8
Upvote 0
Code của bạn thừa phần chữ màu đỏ.
Mã:
Set cllfind = Cells.Find(What:=oCurrent, After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _
        xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
        , SearchFormat:=False)[COLOR="Red"].Activate[/COLOR]
 
Upvote 0
Web KT
Back
Top Bottom