Excel VBA để kiểm tra bất kỳ hộp kiểm nào không được chọn
Chào buổi chiều,
Tôi đang viết mã để xác định xem có hộp kiểm nào bị bỏ chọn hay không. Nếu bất kỳ hộp kiểm nào không được chọn, thì thông báo lỗi...
Phần công khai2 dưới dạng hình dạng
Phần công khai3 dưới dạng hình dạng
Phần công khai4 dưới dạng hình dạng
Phần công khai5 dưới dạng hình dạng
Phần công khai6 dưới dạng hình dạng
Phần công khai7 dưới dạng hình dạng
Phần công khai8 dưới dạng hình dạng
Phần công khai9 dưới dạng hình dạng
Phần công khai10 dưới dạng hình dạng
Phần công khai11 dưới dạng hình dạng
Ngày đăng ký riêngOneEmptyCells()
Đặt Phần2 = ActiveSheet.Shapes("Hộp kiểm 53")
Đặt Phần3 = ActiveSheet.Shapes("Hộp kiểm 73")
Đặt Phần4 = ActiveSheet.Shapes("Hộp kiểm 74")
Đặt Phần5 = ActiveSheet.Shapes("Hộp kiểm 75")
Đặt Phần6 = ActiveSheet.Shapes("Hộp kiểm 76")
Đặt Phần7 = ActiveSheet.Shapes("Hộp kiểm 77")
Đặt Phần8 = ActiveSheet.Shapes("Hộp kiểm 82")
Đặt Phần9 = ActiveSheet.Shapes("Hộp kiểm 79")
Đặt Phần10 = ActiveSheet.Shapes("Hộp kiểm 80")
Đặt Mục11 = ActiveSheet.Shapes("Hộp kiểm 273")
Nếu Mục2.ControlFormat.Value = xlOff Hoặc Mục3.ControlFormat.Value = xlOff Hoặc Mục4.ControlFormat.Value = xlOff _
Hoặc Mục5.ControlFormat.Value = xlOff Hoặc Mục6.ControlFormat.Value = xlOff Hoặc Mục7.ControlFormat.Value = xlOff _
Hoặc Mục8.ControlFormat.Value = xlOff Hoặc Mục9.ControlFormat.Value = xlOff Hoặc Mục10.ControlFormat.Value = xlOff _
Hoặc Mục11.ControlFormat.Value = xlOff Sau đó
MsgBox "Hãy đảm bảo rằng tất cả các nhiệm vụ được yêu cầu đã được hoàn thành." _
& vbCrLf & vbCrLf & "Cảm ơn.", , "Ngày 01"
Application.EnableEvents = Đúng
Kết thúc
Kết thúc nếu
Kết thúc phụ
Lưu ý: Nếu hộp kiểm 53 không được chọn thì thông báo lỗi sẽ hoạt động. Nếu 53 được chọn và tất cả những thứ khác không được chọn - thông báo lỗi sẽ xuất hiện.
Gợi ý giữ mã đơn giản...
K.
Trả lời:
Tôi có đúng khi giải thích rằng nếu người dùng chưa chọn một hoặc nhiều hộp thì thông báo lỗi sẽ xuất hiện?
Nếu giả định trên của tôi là đúng thì tôi đã cung cấp 2 giải pháp.
Giải pháp đầu tiên trả về danh sách tên hộp kiểm (được VBA sử dụng) chưa được chọn.
Giải pháp thứ hai trả về danh sách Văn bản hiển thị trên hộp kiểm. Nếu bạn đã thêm văn bản nhận dạng vào hộp kiểm thì điều này có thể hữu ích hơn cho người dùng vì khi đó họ có thể xác định hộp kiểm nào chưa được chọn.
Giải pháp đầu tiên:
Ngày phụ riêngOneEmptyCells()
Dim arrChkBoxName(1 Đến 10)
Mờ mảngErrors()
Dim i As Long
Dim x As Long
Dim strErrList dưới dạng chuỗi
'Gán tên tham chiếu VBA của CheckBox cho một mảng
arrChkBoxName(1) = "Hộp kiểm 53"
arrChkBoxName(2) = "Hộp kiểm 73"
arrChkBoxName(3) = "Hộp kiểm 74"
arrChkBoxName(4) = "Hộp kiểm 75"
arrChkBoxName(5) = "Hộp kiểm 76"
arrChkBoxName(6) = "Hộp kiểm 77"
arrChkBoxName(7) = "Hộp kiểm 82"
arrChkBoxName(8) = "Hộp kiểm 79"
arrChkBoxName(9) = "Hộp kiểm 80"
arrChkBoxName(10) = "Hộp kiểm 273"
x = 1
ReDim arrErrors(1 To x) 'Phải khởi tạo với một phần tử nếu không Redim Preserve không hoạt động
'Lặp qua mảng để xác định CheckBox nào không phải là xlOff
'và lưu tên VBA của họ vào một mảng.
Với i = LBound(arrChkBoxName) Đến UBound(arrChkBoxName)
Nếu ActiveSheet.Shapes(arrChkBoxName(i)).ControlFormat.Value = xlOff thì
ReDim Bảo tồn arrErrors(1 To x) 'Không tăng ở vòng lặp đầu tiên vì x vẫn là một
ArrayErrors(x) = arrChkBoxName(i)
x = x + 1
Kết thúc nếu
Tiếp theo tôi
Nếu arrErrors(1) <> "" Thì 'Nếu một hoặc nhiều lỗi thì phần tử đầu tiên sẽ không rỗng
strErrList = Tham gia(arrErrors, Chr(13))
MsgBox "Hãy đảm bảo rằng tất cả các nhiệm vụ được yêu cầu đã được hoàn thành." _
& vbCrLf & "Các hộp kiểm tiếp theo chưa được chọn." & vbCrLf & vbCrLf _
& strErrList _
& vbCrLf & vbCrLf & "Cảm ơn bạn." ', , "Ngày 01"
'Dòng trên: Có vẻ như cú pháp không chính xác khi OssieMac nhận xét, , "Ngày 01"
Khác
MsgBox "Tất cả các nhiệm vụ cần thiết đã được hoàn thành." 'Dòng mã tùy chọn. Tốt để có trong quá trình thử nghiệm
Kết thúc nếu
Kết thúc phụ
Giải pháp thứ hai:
Ngày phụ riêngOneEmptyCells()
Dim arrChkBoxName(1 Đến 10)
Mờ mảngErrors()
Dim i As Long
Dim x As Long
Dim strErrList dưới dạng chuỗi
'Gán tên tham chiếu VBA của CheckBox cho một mảng
arrChkBoxName(1) = "Hộp kiểm 53"
arrChkBoxName(2) = "Hộp kiểm 73"
arrChkBoxName(3) = "Hộp kiểm 74"
arrChkBoxName(4) = "Hộp kiểm 75"
arrChkBoxName(5) = "Hộp kiểm 76"
arrChkBoxName(6) = "Hộp kiểm 77"
arrChkBoxName(7) = "Hộp kiểm 82"
arrChkBoxName(8) = "Hộp kiểm 79"
arrChkBoxName(9) = "Hộp kiểm 80"
arrChkBoxName(10) = "Hộp kiểm 273"
x = 1
ReDim arrErrors(1 To x) 'Phải khởi tạo với một phần tử nếu không Redim Preserve không hoạt động
'Lặp qua mảng để xác định CheckBox nào không phải là xlOff
'và lưu tên văn bản được hiển thị của chúng vào một mảng.
Với i = LBound(arrChkBoxName) Đến UBound(arrChkBoxName)
Nếu ActiveSheet.Shapes(arrChkBoxName(i)).ControlFormat.Value = xlOff thì
ReDim Bảo tồn arrErrors(1 To x) 'Không tăng ở vòng lặp đầu tiên vì x vẫn là một
arrErrors(x) = ActiveSheet.Shapes(arrChkBoxName(i)).TextFrame.Characters.Text
x = x + 1
Kết thúc nếu
Tiếp theo tôi
Nếu arrErrors(1) <> "" Thì 'Nếu một hoặc nhiều lỗi thì phần tử đầu tiên sẽ không rỗng
strErrList = Tham gia(arrErrors, Chr(13))
MsgBox "Hãy đảm bảo rằng tất cả các nhiệm vụ được yêu cầu đã được hoàn thành." _
& vbCrLf & "Các hộp kiểm tiếp theo chưa được chọn." & vbCrLf & vbCrLf _
& strErrList _
& vbCrLf & vbCrLf & "Cảm ơn bạn." ', , "Ngày 01"
'Dòng trên: Có vẻ như cú pháp không chính xác khi OssieMac nhận xét, , "Ngày 01"
Khác
MsgBox "Tất cả các nhiệm vụ cần thiết đã được hoàn thành." 'Dòng mã tùy chọn. Tốt để có trong quá trình thử nghiệm
Kết thúc nếu
Kết thúc phụ
Trả lời:
Tôi đã thử nghiệm với đoạn mã sau và nó hoạt động tốt...Mã của bạn cũng sẽ hoạt động...
Đảm bảo rằng số Hộp kiểm được sử dụng tương ứng với các hộp kiểm mà bạn đang cố gắng liên kết với mã của mình.
Sử dụng
Gỡ lỗi.In Phần2.ControlFormat.Value
để đảm bảo bạn đang xem đúng hộp kiểm...
Phần công khai1 dưới dạng hình dạng
Phần công khai2 dưới dạng hình dạng
Phần công khai3 dưới dạng hình dạng
Phần công khai4 dưới dạng hình dạng
Ngày phụ riêngOneEmptyCells()
Đặt Phần1 = ActiveSheet.Shapes("Hộp kiểm 1")
Đặt Phần2 = ActiveSheet.Shapes("Hộp kiểm 2")
Đặt Phần3 = ActiveSheet.Shapes("Hộp kiểm 3")
Đặt Phần4 = ActiveSheet.Shapes("Hộp kiểm 4")
Nếu Mục1.ControlFormat.Value = xlOff Hoặc _
Mục2.ControlFormat.Value = xlOff Hoặc _
Mục3.ControlFormat.Value = xlOff Hoặc _
Mục4.ControlFormat.Value = xlOff Sau đó
MsgBox "Hãy đảm bảo rằng tất cả các nhiệm vụ được yêu cầu đã được hoàn thành." _
& vbCrLf & vbCrLf & "Cảm ơn.", , "Ngày 01"
Application.EnableEvents = Đúng
Kết thúc
Kết thúc nếu
Kết thúc phụ
Comments
Post a Comment