Khi nhập số liệu ở sheet này thì làm sao chạy sự kiện Private Sub Worksheet_Change(ByVal Target As Range) ở sheet kia

Liên hệ QC

AnhThu-1976

Thành viên tích cực
Tham gia
17/10/14
Bài viết
1,058
Được thích
170
Các Thầy, cô và anh chị giúp em như sau:
Hiện tại em có 3 sheet: sheet1, Sheet2, Sheet3
Ô A1 của sheet2 và Sheet3 sẽ = ô A1 của sheet1
Tại sheet1 có
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = "$A$1" Then
       Call Test1   
    End If
End Sub

Tại sheet2 có
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = "$A$1" Then
       Call Test2   
    End If
End Sub

Tại sheet3 có
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = "$A$1" Then
       Call Test3   
    End If
End Sub
Và trong module có các code Test1,Test2 và Test3

Bây giờ em muốn khi ô A1 của sheet1 thay đổi thì Sheet2 và 3 lần lượt cũng chạy code Test2 và 3
Nhờ các Thầy, cô và anh chị giúp em, em xin cảm ơn!
 

File đính kèm

  • Test.xlsm
    16.3 KB · Đọc: 7
ô A1 của sheet1 thay đổi thì Sheet2 và 3 lần lượt cũng chạy code Test2 và 3
Thì gọi luôn ở sự kiện thuộc Sheet1 là được rồi.

1616211601205.png

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$A$1" Then
Call Test1
Call Test2
Call Test3
End If
End Sub
 
Upvote 0
Các Thầy, cô và anh chị giúp em như sau:
Hiện tại em có 3 sheet: sheet1, Sheet2, Sheet3
Ô A1 của sheet2 và Sheet3 sẽ = ô A1 của sheet1
Tại sheet1 có
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = "$A$1" Then
       Call Test1  
    End If
End Sub

Tại sheet2 có
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = "$A$1" Then
       Call Test2  
    End If
End Sub

Tại sheet3 có
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = "$A$1" Then
       Call Test3  
    End If
End Sub
Và trong module có các code Test1,Test2 và Test3

Bây giờ em muốn khi ô A1 của sheet1 thay đổi thì Sheet2 và 3 lần lượt cũng chạy code Test2 và 3
Nhờ các Thầy, cô và anh chị giúp em, em xin cảm ơn!
Nhớ thêm lệnh
Application.EnableEvents = False
...
Application.EnableEvents =true
 
Upvote 0
Thì gọi luôn ở sự kiện thuộc Sheet1 là được rồi.

View attachment 255767

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$A$1" Then
Call Test1
Call Test2
Call Test3
End If
End Sub
À em đưa ví dụ chưa cụ thể
Nếu trong Test2 mà Sheet2.Range("A3").Interior.ColorIndex = 3 mà chỉ là Range("A3").Interior.ColorIndex = 3, tương tự cho các Test còn lại
thì phải làm sao ạ?
 
Upvote 0
PHP:
Sub TestXYZ(byval ws as worksheet)
with ws
.Range("A3").Interior.ColorIndex = 3
'....
end with
End sub

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$A$1" Then
Call TestXYZ(Sheet1)
Call TestXYZ(Sheet2)
Call TestXYZ(Sheet3)
End If
End Sub
 
Upvote 0
À em đưa ví dụ chưa cụ thể
Nếu trong Test2 mà Sheet2.Range("A3").Interior.ColorIndex = 3 mà chỉ là Range("A3").Interior.ColorIndex = 3, tương tự cho các Test còn lại
thì phải làm sao ạ?
Đây là bài toán "tạm chuyển tầm vực":

Để yên Test1, Test2, Test3
Lập một sub phụ GoiTests
Sub GoiTests(ws As WorkSheet)
Dim CurAct As WorkSheet
Set CurAct = ActiveSheet
ws.Activate ' tạm chuyển tầm vực mặc định sang sheet cần làm việc
Test1
Test2
Test3
CurAct.Activate ' trả tầm vực mặc định về chỗ cũ
End Sub

Bên Sub WorkSheet_Change, gọi GọiTests như sau:
...
GoiTests Sheet2
GoiTests Sheet3
...
 
Upvote 0
À em đưa ví dụ chưa cụ thể
Nếu trong Test2 mà Sheet2.Range("A3").Interior.ColorIndex = 3 mà chỉ là Range("A3").Interior.ColorIndex = 3, tương tự cho các Test còn lại
thì phải làm sao ạ?
Em có làm như thế này
code cho sheet1
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = "$A$1" Then
        Call Test1
        Sheet2.Select
        Call Test2
        Sheet3.Select
        Call Test3
        Sheet1.Select
    End If
End Sub
Thấy nó cũng cho kết quả đúng
 
Upvote 0

@AnhThu-1976

Có thể đặt code ở Workbook Events:

PHP:
Option Compare Text
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
   If Target.Address(0, 0) = "A1" Then
     Select case Sh.Name
     Case "Sheet1",  "Sheet2", "Sheet3"
         Call Test1
         Call Test2
         Call Test3
         Sh.Range("A3").Interior.ColorIndex = 3
     End Select
  End If
End Sub
 
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom