Lỗi biên dịch: phát hiện tên không rõ ràng vba excel Jan-06-17
Khi tôi thêm một đoạn mã VBA khác vào cùng một trang tính, nó báo lỗi biên dịch: phát hiện tên VBA không trùng lặp.
Xin hãy giúp tôi cách thực hiện điều này!Trả lời:
CHÀO
Bạn không thể có hai macro sự kiện cùng loại.
Worksheet_SelectionChange(ByVal Target As Range)
Vì vậy, hãy kết hợp cả hai lại với nhau.
Trả lời:
Xóa dòng được tô sáng màu xanh lam, dòng ngay phía trên dòng đó:
End Sub
và dòng bên dưới nó:
Khai báo i là số nguyên
Vậy thì mọi chuyện sẽ ổn thôi.
Trả lời:
Bạn không thấy hoặc không thích những câu trả lời bạn nhận được hôm qua cho cùng một câu hỏi sao?
Gord
Trả lời:
Chào Bernie, mình đã thử rồi nhưng không được, đây là những gì mình có.
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Nếu Target.Column = 4 thì
Bíp
Cells(Target.Row + 1, 2).Activate
Kết thúc nếu
Nếu Target.Column = 17 thì
Bíp
Cells(Target.Row + 1, 15).Activate
Kết thúc nếu
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
Khai báo i là số nguyên
Với i = 2 đến 100
Nếu Cells(i, "B").Value <> "" Và Cells(i, "C").Value <> "" Và Cells(i, "D").Value <> "" Và Cells(i, "F").Value = "" Thì
Ô (i, "F").Giá trị = Ngày & " " & Thời gian
Cells(i, "F").NumberFormat = "m/d/yyyy h:mm AM/PM"
Kết thúc nếu
Kế tiếp
Range("F:F").EntireColumn.AutoFit
End Sub
Kết thúc nếu
Khai báo i là số nguyên
Với i = 2 đến 100
Nếu Cells(i, "N").Value <> "" Và Cells(i, "O").Value <> "" Và Cells(i, "P").Value <> "" Và Cells(i, "R").Value = "" Thì
Ô (i, "R").Giá trị = Ngày & " " & Thời gian
Cells(i, "R").NumberFormat = "m/d/yyyy h:mm AM/PM"
Kết thúc nếu
Kế tiếp
Range("R:R").EntireColumn.AutoFit
End Sub
Bạn có thể thử ở phía bạn xem tôi đang làm sai ở điểm nào không?
Cảm ơn.
Trả lời:
Cách này sẽ hiệu quả:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Nếu Target.Column = 4 thì
Bíp
Cells(Target.Row + 1, 2).Activate
Kết thúc nếu
Nếu Target.Column = 17 thì
Bíp
Cells(Target.Row + 1, 15).Activate
Kết thúc nếu
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
Khai báo i là số nguyên
Với i = 2 đến 100
Nếu Cells(i, "B").Value <> "" Và Cells(i, "C").Value <> "" Và Cells(i, "D").Value <> "" Và Cells(i, "F").Value = "" Thì
Ô (i, "F").Giá trị = Ngày & " " & Thời gian
Cells(i, "F").NumberFormat = "m/d/yyyy h:mm AM/PM"
Kết thúc nếu
Kế tiếp
Range("F:F").EntireColumn.AutoFit
Với i = 2 đến 100
Nếu Cells(i, "N").Value <> "" Và Cells(i, "O").Value <> "" Và Cells(i, "P").Value <> "" Và Cells(i, "R").Value = "" Thì
Ô (i, "R").Giá trị = Ngày & " " & Thời gian
Cells(i, "R").NumberFormat = "m/d/yyyy h:mm AM/PM"
Kết thúc nếu
Kế tiếp
Range("R:R").EntireColumn.AutoFit
End Sub
Nhưng mã của bạn kiểm tra 1600 ô mỗi khi có bất kỳ thay đổi nào (100 hàng và 8 cột - hai lần - vì mã tự khởi động lại khi một ô bị thay đổi), vì vậy bạn có thể muốn thay đổi hàm con thứ hai thành như sau:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim i As Long
Nếu Intersect(Target, Range("B:D,N:P")) Is Nothing Then Exit Sub
Application.EnableEvents = False
For i = Target.Cells(1).Row To Target.Cells(Target.Cells.Count).Row
Nếu Cells(i, "B").Value <> "" Và Cells(i, "C").Value <> "" Và Cells(i, "D").Value <> "" Và Cells(i, "F").Value = "" Thì
Cells(i, "F").NumberFormat = "m/d/yyyy h:mm AM/PM"
Ô (i, "F").Giá trị = Bây giờ
Kết thúc nếu
Nếu Cells(i, "N").Value <> "" Và Cells(i, "O").Value <> "" Và Cells(i, "P").Value <> "" Và Cells(i, "R").Value = "" Thì
Cells(i, "R").NumberFormat = "m/d/yyyy h:mm AM/PM"
Cells(i, "R").Value = Now
Kết thúc nếu
Tiếp theo tôi
Ứng dụng.ChoPhóngSựKiện = Đúng
Range("F:F,R:R").EntireColumn.AutoFit
End Sub
Trả lời:
Chào Bernie, cảm ơn bạn một lần nữa, giờ thì nó đã hoạt động như bạn nói rồi, tôi sẽ sử dụng nó.
như sau!
Private Sub Worksheet_Change(ByVal Target As Range)
Dim i As Long
Nếu Intersect(Target, Range("B:D,N:P")) Is Nothing Then Exit Sub
Application.EnableEvents = False
For i = Target.Cells(1).Row To Target.Cells(Target.Cells.Count).Row
Nếu Cells(i, "B").Value <> "" Và Cells(i, "C").Value <> "" Và Cells(i, "D").Value <> "" Và Cells(i, "F").Value = "" Thì
Cells(i, "F").NumberFormat = "m/d/yyyy h:mm AM/PM"
Ô (i, "F").Giá trị = Bây giờ
Kết thúc nếu
Nếu Cells(i, "N").Value <> "" Và Cells(i, "O").Value <> "" Và Cells(i, "P").Value <> "" Và Cells(i, "R").Value = "" Thì
Cells(i, "R").NumberFormat = "m/d/yyyy h:mm AM/PM"
Cells(i, "R").Value = Now
Kết thúc nếu
Tiếp theo tôi
Ứng dụng.ChoPhóngSựKiện = Đúng
Range("F:F,R:R").EntireColumn.AutoFit
Điều còn lại là như sau!
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Nếu Target.Column = 4 thì tôi không thể nhập bất kỳ số nào vào ô này hoặc thậm chí nhấp chuột.
Bíp
Cells(Target.Row + 1, 2).Activate
Kết thúc nếu
Nếu Target.Column = 17 thì tôi không thể nhập bất kỳ số nào vào ô này hoặc thậm chí nhấp chuột.
Bíp
Cells(Target.Row + 1, 15).Activate
Kết thúc nếu
End Sub
Nếu tôi đổi mục tiêu 4 và 17 thì nó hoạt động, nhưng sau đó dụng cụ đo laser của tôi sẽ không hoạt động!
Trả lời:
Chào John, bạn nói đúng! Cảm ơn bạn.
Trả lời:
Cảm ơn Gord, tôi đã xem qua nhưng hơi bối rối với các tệp Excel mà bạn có trên OneDrive, giờ thì có lẽ tôi sẽ hiểu hơn. Bernie cũng đang làm rất tốt khi cố gắng giúp đỡ, cảm ơn tất cả mọi người, đây là một diễn đàn tuyệt vời. Tôi đã sử dụng máy tính cá nhân được 20 năm rồi và đây là lần đầu tiên tôi cần sự giúp đỡ, không thể tốt hơn được nữa.
Trả lời:
Tốt hơn hết là mô tả những gì bạn cần để mã hoạt động thay vì nói rằng nó không hoạt động - nó không hoạt động vì bất cứ khi nào bạn chọn các ô đó, mã của bạn lại chọn các ô cách đó 2 hoặc 15 cột về bên phải. Bạn có thể muốn kiểm tra trạng thái của các ô đó và cho phép chúng được chọn nếu chúng trống:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Nếu Target.Column = 4 thì
Bíp
Nếu Target.Value <> "" thì Cells(Target.Row + 1, 2).Activate
Kết thúc nếu
Nếu Target.Column = 17 thì
Bíp
Nếu Target.Value <> "" thì Cells(Target.Row + 1, 15).Activate
Kết thúc nếu
End Sub
Trả lời:
Cảm ơn bạn, tôi rất trân trọng. Cho phép tôi chọn các ô trống nếu chúng đang trống, vậy làm thế nào để được chọn?
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Nếu Target.Column = 4 thì
Bíp
Nếu Target.Value <> "" thì Cells(Target.Row + 1, 2).Activate
Kết thúc nếu
Nếu Target.Column = 17 thì
Bíp
Nếu Target.Value <> "" thì Cells(Target.Row + 1, 15).Activate
Kết thúc nếu
End Sub
Comments
Post a Comment