Xin giúp đỡ về câu lệnh Worksheet_Change (1 người xem)

  • Thread starter Thread starter kbw1
  • Ngày gửi Ngày gửi
Liên hệ QC

Người dùng đang xem chủ đề này

kbw1

Thành viên tích cực
Tham gia
8/11/13
Bài viết
880
Được thích
231
Xin chào các bạn!
Mình đang mắc ở sự kiện Worksheet_Change trong sheet.
Nếu muốn 1 ô trong 1 sheet thay đổi thì sự kiện diễn ra.
Cái này mình dùng câu lệnh
Mã:
if target.Address=$địa chỉ ô trong sheet$ then...

Nhưng giờ mình muốn 1 ô ở sheet 1 thay đổi thì sự kiện diễn ra ở sheet 2.

Có cách nào làm được điều này không ạ?
Mong các bạn giúp đỡ!
 
Xin chào các bạn!
Mình đang mắc ở sự kiện Worksheet_Change trong sheet.
Nếu muốn 1 ô trong 1 sheet thay đổi thì sự kiện diễn ra.
Cái này mình dùng câu lệnh
Mã:
if target.Address=$địa chỉ ô trong sheet$ then...

Nhưng giờ mình muốn 1 ô ở sheet 1 thay đổi thì sự kiện diễn ra ở sheet 2.

Có cách nào làm được điều này không ạ?
Mong các bạn giúp đỡ!
Đại loại như thế này. Thay đổi tại ô A1 tại Sheet1 sẽ có kết quả ở Sheet2:
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$A$1" Then Sheet2.[A1] = "kbw1"
End Sub
 
Upvote 0
Xin chào các bạn!
Mình đang mắc ở sự kiện Worksheet_Change trong sheet.
Nếu muốn 1 ô trong 1 sheet thay đổi thì sự kiện diễn ra.
Cái này mình dùng câu lệnh
Mã:
if target.Address=$địa chỉ ô trong sheet$ then...

Nhưng giờ mình muốn 1 ô ở sheet 1 thay đổi thì sự kiện diễn ra ở sheet 2.

Có cách nào làm được điều này không ạ?
Mong các bạn giúp đỡ!
Sự kiện diễn ra ở sheet2 như thế nào? cái này hoàn toàn làm dc bạn nhé.
 
Upvote 0
Đại loại như thế này. Thay đổi tại ô A1 tại Sheet1 sẽ có kết quả ở Sheet2:
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$A$1" Then Sheet2.[A1] = "kbw1"
End Sub
Cảm ơn bạn.
Vì ở sheet 1 của mình có câu lệnh If Target.Address = "$A$1" Then marco (1 marco) rồi bạn ạ.
GIờ mình cần A1 tại sheet 1 thay đổi thì thực thi marco 2 bên sheet 2.
Không biết làm như vậy phải thêm câu lệnh như thế nào ạ?
 
Upvote 0
Cảm ơn bạn.
Vì ở sheet 1 của mình có câu lệnh If Target.Address = "$A$1" Then marco (1 marco) rồi bạn ạ.
GIờ mình cần A1 tại sheet 1 thay đổi thì thực thi marco 2 bên sheet 2.
Không biết làm như vậy phải thêm câu lệnh như thế nào ạ?
Bạn cho nó chạy đồng thời 2 macro luôn, 1 cái chạy sheet1, 1 cái chạy sheet 2, cụ thể thì bạn đưa file lên chứ hiểu ý bạn nhưng diễn đạt có thể bạn sẽ không hiểu.
 
Upvote 0
Bạn cho nó chạy đồng thời 2 macro luôn, 1 cái chạy sheet1, 1 cái chạy sheet 2, cụ thể thì bạn đưa file lên chứ hiểu ý bạn nhưng diễn đạt có thể bạn sẽ không hiểu.
Đúng rồi bạn.
Ý mình là vậy.
Khi 1 ô thay đổi thì 2 marco thực hiện cùng lúc luôn.
 
Upvote 0
Mình có ghi 2 marco.
Marco1 dùng sự kiện này ở sheet 1 rồi.
Giờ muốn vẫn ô đấy ở sheet 1 thay đổi thì dùng marco 2 ở sheet 2.
Không biết có được không bạn?
Chắc nó là thế này:
[GPECODE=vb]Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$A$1" Then
Macro1
Macro2
End If
End Sub[/GPECODE]
Hoặc bạn gộp 2 macro này lại với nhau luôn.
 
Upvote 0
Chắc nó là thế này:
[GPECODE=vb]Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$A$1" Then
Macro1
Macro2
End If
End Sub[/GPECODE]
Hoặc bạn gộp 2 macro này lại với nhau luôn.
Tuyệt vời luôn. Cảm ơn bạn rất nhiều.
Bạn cho mình hỏi câu End If nghĩa là gì được không bạn?
 
Upvote 0
Tuyệt vời luôn. Cảm ơn bạn rất nhiều.
Bạn cho mình hỏi câu End If nghĩa là gì được không bạn?
Nếu trong câu lệnh If chỉ thực hiện 1 lệnh thì chỉ cần cấu trúc If <Điều kiện> Then <Câu lệnh>
Còn nếu trong câu lệnh If có thực hiện nhiều câu lệnh (dãy lệnh) thì sau dãy lệnh đó phải có từ khóa End If để biết rằng đã kết thúc câu lệnh If. Cú pháp lúc này là If <Điều kiện> Then <Dãy lệnh> End If
 
Upvote 0
Nếu trong câu lệnh If chỉ thực hiện 1 lệnh thì chỉ cần cấu trúc If <Điều kiện> Then <Câu lệnh>
Còn nếu trong câu lệnh If có thực hiện nhiều câu lệnh (dãy lệnh) thì sau dãy lệnh đó phải có từ khóa End If để biết rằng đã kết thúc câu lệnh If. Cú pháp lúc này là If <Điều kiện> Then <Dãy lệnh> End If
Cảm ơn bạn rất nhiều.
Bạn cho mình hỏi thêm câu ngoài lề về hàm textjoin.
Phiên bản excel nào của 2016 có hàm này vậy bạn?
Của mình không có hàm này, mà mình lại đang có nhu cầu dùng.
Cảm ơn bạn!
 
Upvote 0
Cảm ơn bạn rất nhiều.
Bạn cho mình hỏi thêm câu ngoài lề về hàm textjoin.
Phiên bản excel nào của 2016 có hàm này vậy bạn?
Của mình không có hàm này, mà mình lại đang có nhu cầu dùng.
Cảm ơn bạn!
Cái này là lạc đề rồi, bạn hỏi tiếp bên topic kia nhé. Tôi chưa xài Office 2016 bao giờ nên cũng không biết đâu.
 
Upvote 0
Nếu trong câu lệnh If chỉ thực hiện 1 lệnh thì chỉ cần cấu trúc If <Điều kiện> Then <Câu lệnh>
Còn nếu trong câu lệnh If có thực hiện nhiều câu lệnh (dãy lệnh) thì sau dãy lệnh đó phải có từ khóa End If để biết rằng đã kết thúc câu lệnh If. Cú pháp lúc này là If <Điều kiện> Then <Dãy lệnh> End If

Vì đọc thấy cách bạn hỏi mà nói rõ thêm như sau

Không dùng End If
+ Nếu sau then có 1 lệnh thì bạn viết liền sau then và không dùng end if
+ Nếu sau then có nhiều lệnh như mẫu sau thì cũng không cần dùng end if

if đk then cl1 : cl2 : cl3 : c4 : _
cl5

(dấu _ để báo câu lệnh If còn dài đến dòng sau)

Phải dùng End If
+ Nếu sau then bạn xuống dòng thì dù viết 1 hay nhiều lệnh thì phải dùng end if.
 
Upvote 0
Các bạn cho mình hỏi thêm vấn đề này nữa ạ.
Nếu giờ mình có rất nhiều marco cần hoạt động 1 lúc.
TH1: Ví dụ khi thay đổi ô A1
thì MC1, MC2, MC3, MC4 cho đến MC8. (MC này có thể ở sheet 1, hoặc sheet 2 tức là sẽ ko cùng sheet ạ)
Thì mình phải dùng câu lệnh như thế nào ạ.
TH2: Không dùng sự kiện change ô nữa, mà mình muốn 1 marco tổng, rồi vẽ 1 cái nút bấm cho nó chạy ạ.
Mong các bạn giúp đỡ!
Xin cảm ơn!
 
Upvote 0
Các bạn cho mình hỏi thêm vấn đề này nữa ạ.
Nếu giờ mình có rất nhiều marco cần hoạt động 1 lúc.
TH1: Ví dụ khi thay đổi ô A1
thì MC1, MC2, MC3, MC4 cho đến MC8. (MC này có thể ở sheet 1, hoặc sheet 2 tức là sẽ ko cùng sheet ạ)
Thì mình phải dùng câu lệnh như thế nào ạ.
TH2: Không dùng sự kiện change ô nữa, mà mình muốn 1 marco tổng, rồi vẽ 1 cái nút bấm cho nó chạy ạ.
Mong các bạn giúp đỡ!
Xin cảm ơn!
TH1: Bạn viết các macro vào 1 module, với kiểu sub là (Sub hoặc Public Sub). Khi cần chạy ở đâu thì chỉ cần gọi nó.
Ví dụ:
Với module:
Mã:
Sub MC1() '// Hoac viet la: Public sub MC1()
MsgBox "Chay macro 1"
End Sub

Sub MC2()
MsgBox "Chay macro 2"
End Sub

Sub MC3()
MsgBox "Chay macro 3"
End Sub
Với Sheet1:
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$A$1" Then
    MC1
    MC2
    MC3
End If
End Sub
TH2: Bạn viết 1 sub trong Module gọi các macro đã viết, rồi gán vào nút bấm của bạn.
Mã:
Sub RunAll()
    MC1
    MC2
    MC3
End Sub
 
Upvote 0
TH1: Bạn viết các macro vào 1 module, với kiểu sub là (Sub hoặc Public Sub). Khi cần chạy ở đâu thì chỉ cần gọi nó.
Ví dụ:
Với module:
Mã:
Sub MC1() '// Hoac viet la: Public sub MC1()
MsgBox "Chay macro 1"
End Sub

Sub MC2()
MsgBox "Chay macro 2"
End Sub

Sub MC3()
MsgBox "Chay macro 3"
End Sub
Với Sheet1:
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$A$1" Then
    MC1
    MC2
    MC3
End If
End Sub
TH2: Bạn viết 1 sub trong Module gọi các macro đã viết, rồi gán vào nút bấm của bạn.
Mã:
Sub RunAll()
    MC1
    MC2
    MC3
End Sub
Cảm ơn bạn đã trả lời!
Mình thấy file của mình có 3 module. Có khi nào lỗi là do đây không bạn?
Mình chỉ cần copy các đoạn code của từng module về gộp lại 1 module rồi làm theo bạn là được đúng ko ạ?
 
Upvote 0
Cảm ơn bạn đã trả lời!
Mình thấy file của mình có 3 module. Có khi nào lỗi là do đây không bạn?
Mình chỉ cần copy các đoạn code của từng module về gộp lại 1 module rồi làm theo bạn là được đúng ko ạ?
Bao nhiêu module cũng không phải là vấn đề. Nếu các macro là Sub hay Public Sub thì tại bất kỳ đâu cũng gọi nó được.
Nếu macro là Private Sub thì bạn chỉ gọi được nó trong module đó (hoặc trong worksheet đó nếu để trong worksheet, hoặc trong ThisWorkbook nếu macro đó để trong ThisWorkbook)
Bạn đọc tạm bài này:
http://www.giaiphapexcel.com/forum/...ải-thích-Code-có-Private-đứng-trước-Sub/page2
 
Upvote 0
Bao nhiêu module cũng không phải là vấn đề. Nếu các macro là Sub hay Public Sub thì tại bất kỳ đâu cũng gọi nó được.
Nếu macro là Private Sub thì bạn chỉ gọi được nó trong module đó (hoặc trong worksheet đó nếu để trong worksheet, hoặc trong ThisWorkbook nếu macro đó để trong ThisWorkbook)
Bạn đọc tạm bài này:
http://www.giaiphapexcel.com/forum/...ải-thích-Code-có-Private-đứng-trước-Sub/page2
Bạn ơi, mình bị lỗi này ạ.
Code của mình là Sub.
Mình gửi bạn đoạn Sub RunAll của mình.
 

File đính kèm

  • Ex1.JPG
    Ex1.JPG
    17.6 KB · Đọc: 4
  • Ex2.jpg
    Ex2.jpg
    17.8 KB · Đọc: 3
Upvote 0
Web KT

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

Back
Top Bottom