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?

https://answers.microsoft.com/en-us/msoffice/forum/msoffice_excel-msoffice_custom/compile-error-ambiguous-name-detected-vba-excel/99948f47-dbf9-4fb2-9bc7-21908ca106da

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

Popular posts from this blog

Xử lý hàng loạt các tệp Excel được bảo vệ bằng mật khẩu

Thu hẹp và mở rộng cột trong Excel

Excel: Tìm và trả về "số cuối cùng" trong một cột, trong đó cột chứa: cả ô trống và số dương tùy ý (lớn hơn 0).