Excel VBA để kiểm tra bất kỳ hộp kiểm nào không được chọn

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

Popular posts from this blog

Excel 2016 - mở tất cả các tệp trong MỘT phiên bản

Điều tôi muốn làm trong Excel 2010 là tạo một nút tùy chỉnh và gắn nó vào thanh công cụ Truy nhập nhanh và chạy một macro cụ thể.

Khẩn cấp - File Excel chứa các ký tự đặc biệt ở họ và tên liên hệ