VBA excel 用户表单复选框问题
VBA excel Userform checkbox issue
我遇到了一个小问题,希望您能帮忙解决。我创建了一个带有一组复选框的用户表单。这个想法是你可以选中 filter/copy/paste 的类型,然后点击确定,它将 运行。问题是一旦您选中该框,它就会 运行ning,而不是等待。我确定我的订单搞砸了,或者我需要一个 if 语句,但对于我来说,我无法弄清楚如何让它发挥作用。我已经包含了按钮以及 "Okay" 和 "Cancel" 按钮的代码。
如有任何帮助,我们将不胜感激!
Private Sub CheckBox1_Click()
End Sub
Private Sub CheckBox2_Click()
End Sub
Private Sub CheckBox3_Click()
End Sub
Private Sub CheckBox4_Click()
End Sub
Private Sub CheckBox5_Click()
End Sub
Private Sub CheckBox6_Click()
End Sub
Public Property Get IsCancelled() As Boolean
IsCancelled = cancelled
End Property
Private Sub OkButton_Click()
Dim sh As Worksheet
Dim rang As Range
Select Case True
Case CheckBox1.Enabled
ActiveSheet.Range("$A:$AE000").AutoFilter Field:=1, Criteria1:="NN"
ActiveSheet.Range("$A:$AE000").AutoFilter Field:=21, Criteria1:="FALSE"
Set sh = Worksheets("Country")
Set rang = sh.UsedRange.Offset(1, 0)
On Error Resume Next
Set rang = rang.SpecialCells(xlCellTypeVisible).Copy
Worksheets("PPage").Activate
Worksheets("PPage").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).PasteSpecial xlPasteValues
Selection.Range("G1:R" & lrow).ClearContents
Selection.Range("V1:AB" & lrow).Delete
sh.Activate
Application.CutCopyMode = False
Range("A1").Select
Case CheckBox2.Enabled
ActiveSheet.Range("$A:$AE000").AutoFilter Field:=1, Criteria1:="NC"
ActiveSheet.Range("$A:$AE000").AutoFilter Field:=21, Criteria1:="FALSE"
Set sh = Worksheets("Country")
Set rang = sh.UsedRange.Offset(1, 0)
On Error Resume Next
Set rang = rang.SpecialCells(xlCellTypeVisible).Copy
Worksheets("PPage").Activate
Worksheets("PPage").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).PasteSpecial xlPasteValues
Selection.Range("G1:R" & lrow).ClearContents
Selection.Range("V1:AB" & lrow).Delete
sh.Activate
Application.CutCopyMode = False
Range("A1").Select
Case CheckBox3.Enabled
ActiveSheet.Range("$A:$AE000").AutoFilter Field:=1, Criteria1:="NF"
ActiveSheet.Range("$A:$AE000").AutoFilter Field:=21, Criteria1:="FALSE"
Set sh = Worksheets("Country")
Set rang = sh.UsedRange.Offset(1, 0)
On Error Resume Next
Set rang = rang.SpecialCells(xlCellTypeVisible).Copy
Worksheets("PPage").Activate
Worksheets("PPage").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).PasteSpecial xlPasteValues
Selection.Range("G1:R" & lrow).ClearContents
Selection.Range("V1:AB" & lrow).Delete
sh.Activate
Application.CutCopyMode = False
Range("A1").Select
Case CheckBox4.Enabled
ActiveSheet.Range("$A:$AE000").AutoFilter Field:=1, Criteria1:="NT"
ActiveSheet.Range("$A:$AE000").AutoFilter Field:=21, Criteria1:="FALSE"
Set sh = Worksheets("Country")
Set rang = sh.UsedRange.Offset(1, 0)
On Error Resume Next
Set rang = rang.SpecialCells(xlCellTypeVisible).Copy
Worksheets("PPage").Activate
Worksheets("PPage").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).PasteSpecial xlPasteValues
Selection.Range("G1:R" & lrow).ClearContents
Selection.Range("V1:AB" & lrow).Delete
sh.Activate
Application.CutCopyMode = False
Range("A1").Select
Case CheckBox5.Enabled
ActiveSheet.Range("$A:$AE000").AutoFilter Field:=1, Criteria1:="NB"
ActiveSheet.Range("$A:$AE000").AutoFilter Field:=21, Criteria1:="FALSE"
Set sh = Worksheets("Country")
Set rang = sh.UsedRange.Offset(1, 0)
On Error Resume Next
Set rang = rang.SpecialCells(xlCellTypeVisible).Copy
Worksheets("PPage").Activate
Worksheets("PPage").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).PasteSpecial xlPasteValues
Selection.Range("G1:R" & lrow).ClearContents
Selection.Range("V1:AB" & lrow).Delete
sh.Activate
Application.CutCopyMode = False
Range("A1").Select
Case CheckBox6.Enabled
ActiveSheet.Range("$A:$AE000").AutoFilter Field:=1, Criteria1:="NR"
ActiveSheet.Range("$A:$AE000").AutoFilter Field:=21, Criteria1:="FALSE"
Set sh = Worksheets("Country")
Set rang = sh.UsedRange.Offset(1, 0)
On Error Resume Next
Set rang = rang.SpecialCells(xlCellTypeVisible).Copy
Worksheets("PPage").Activate
Worksheets("PPage").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).PasteSpecial xlPasteValues
Selection.Range("G1:R" & lrow).ClearContents
Selection.Range("V1:AB" & lrow).Delete
sh.Activate
Application.CutCopyMode = False
Range("A1").Select
End Select
Hide
End Sub
Private Sub CancelButton_Click()
OnCancel
End Sub
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
If CloseMode = VbQueryClose.vbFormControlMenu Then
Cancel = True
OnCancel
End If
End Sub
Private Sub OnCancel()
cancelled = True
Hide
End Sub
您需要将 checkbox_click 事件中的代码放入按钮 OK 事件中,如下所示:
Private Sub CheckBox6_Click()
End Sub
Public Property Get IsCancelled() As Boolean
IsCancelled = cancelled
End Property
Private Sub OkButton_Click()
Dim sh As Worksheet
Dim rang As Range
Select Case True
Case CheckBox1.Value
'Do something
Case CheckBox2.Value
'Do something
Case CheckBox3.Value
'Do something
Case CheckBox4.Value
'Do something
Case CheckBox5.Value
'Do something
Case CheckBox6.Value
ActiveSheet.Range("$A:$AE000").AutoFilter Field:=1, Criteria1:="NR"
ActiveSheet.Range("$A:$AE000").AutoFilter Field:=21, Criteria1:="FALSE"
'Output Paginated Pages (in testing)
Set sh = Worksheets("Country")
Set rang = sh.UsedRange.Offset(1, 0)
On Error Resume Next
Set rang = rang.SpecialCells(xlCellTypeVisible).Copy
Worksheets("PPage").Activate
Worksheets("PPage").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).PasteSpecial xlPasteValues
Selection.Range("G1:R" & lrow).ClearContents
Selection.Range("V1:AB" & lrow).Delete
sh.Activate
Application.CutCopyMode = False
Range("A1").Select
End Select
Hide
End Sub
Private Sub CancelButton_Click()
OnCancel
End Sub
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
If CloseMode = VbQueryClose.vbFormControlMenu Then
Cancel = True
OnCancel
End If
End Sub
Private Sub OnCancel()
cancelled = True
Hide
End Sub
我遇到了一个小问题,希望您能帮忙解决。我创建了一个带有一组复选框的用户表单。这个想法是你可以选中 filter/copy/paste 的类型,然后点击确定,它将 运行。问题是一旦您选中该框,它就会 运行ning,而不是等待。我确定我的订单搞砸了,或者我需要一个 if 语句,但对于我来说,我无法弄清楚如何让它发挥作用。我已经包含了按钮以及 "Okay" 和 "Cancel" 按钮的代码。
如有任何帮助,我们将不胜感激!
Private Sub CheckBox1_Click()
End Sub
Private Sub CheckBox2_Click()
End Sub
Private Sub CheckBox3_Click()
End Sub
Private Sub CheckBox4_Click()
End Sub
Private Sub CheckBox5_Click()
End Sub
Private Sub CheckBox6_Click()
End Sub
Public Property Get IsCancelled() As Boolean
IsCancelled = cancelled
End Property
Private Sub OkButton_Click()
Dim sh As Worksheet
Dim rang As Range
Select Case True
Case CheckBox1.Enabled
ActiveSheet.Range("$A:$AE000").AutoFilter Field:=1, Criteria1:="NN"
ActiveSheet.Range("$A:$AE000").AutoFilter Field:=21, Criteria1:="FALSE"
Set sh = Worksheets("Country")
Set rang = sh.UsedRange.Offset(1, 0)
On Error Resume Next
Set rang = rang.SpecialCells(xlCellTypeVisible).Copy
Worksheets("PPage").Activate
Worksheets("PPage").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).PasteSpecial xlPasteValues
Selection.Range("G1:R" & lrow).ClearContents
Selection.Range("V1:AB" & lrow).Delete
sh.Activate
Application.CutCopyMode = False
Range("A1").Select
Case CheckBox2.Enabled
ActiveSheet.Range("$A:$AE000").AutoFilter Field:=1, Criteria1:="NC"
ActiveSheet.Range("$A:$AE000").AutoFilter Field:=21, Criteria1:="FALSE"
Set sh = Worksheets("Country")
Set rang = sh.UsedRange.Offset(1, 0)
On Error Resume Next
Set rang = rang.SpecialCells(xlCellTypeVisible).Copy
Worksheets("PPage").Activate
Worksheets("PPage").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).PasteSpecial xlPasteValues
Selection.Range("G1:R" & lrow).ClearContents
Selection.Range("V1:AB" & lrow).Delete
sh.Activate
Application.CutCopyMode = False
Range("A1").Select
Case CheckBox3.Enabled
ActiveSheet.Range("$A:$AE000").AutoFilter Field:=1, Criteria1:="NF"
ActiveSheet.Range("$A:$AE000").AutoFilter Field:=21, Criteria1:="FALSE"
Set sh = Worksheets("Country")
Set rang = sh.UsedRange.Offset(1, 0)
On Error Resume Next
Set rang = rang.SpecialCells(xlCellTypeVisible).Copy
Worksheets("PPage").Activate
Worksheets("PPage").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).PasteSpecial xlPasteValues
Selection.Range("G1:R" & lrow).ClearContents
Selection.Range("V1:AB" & lrow).Delete
sh.Activate
Application.CutCopyMode = False
Range("A1").Select
Case CheckBox4.Enabled
ActiveSheet.Range("$A:$AE000").AutoFilter Field:=1, Criteria1:="NT"
ActiveSheet.Range("$A:$AE000").AutoFilter Field:=21, Criteria1:="FALSE"
Set sh = Worksheets("Country")
Set rang = sh.UsedRange.Offset(1, 0)
On Error Resume Next
Set rang = rang.SpecialCells(xlCellTypeVisible).Copy
Worksheets("PPage").Activate
Worksheets("PPage").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).PasteSpecial xlPasteValues
Selection.Range("G1:R" & lrow).ClearContents
Selection.Range("V1:AB" & lrow).Delete
sh.Activate
Application.CutCopyMode = False
Range("A1").Select
Case CheckBox5.Enabled
ActiveSheet.Range("$A:$AE000").AutoFilter Field:=1, Criteria1:="NB"
ActiveSheet.Range("$A:$AE000").AutoFilter Field:=21, Criteria1:="FALSE"
Set sh = Worksheets("Country")
Set rang = sh.UsedRange.Offset(1, 0)
On Error Resume Next
Set rang = rang.SpecialCells(xlCellTypeVisible).Copy
Worksheets("PPage").Activate
Worksheets("PPage").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).PasteSpecial xlPasteValues
Selection.Range("G1:R" & lrow).ClearContents
Selection.Range("V1:AB" & lrow).Delete
sh.Activate
Application.CutCopyMode = False
Range("A1").Select
Case CheckBox6.Enabled
ActiveSheet.Range("$A:$AE000").AutoFilter Field:=1, Criteria1:="NR"
ActiveSheet.Range("$A:$AE000").AutoFilter Field:=21, Criteria1:="FALSE"
Set sh = Worksheets("Country")
Set rang = sh.UsedRange.Offset(1, 0)
On Error Resume Next
Set rang = rang.SpecialCells(xlCellTypeVisible).Copy
Worksheets("PPage").Activate
Worksheets("PPage").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).PasteSpecial xlPasteValues
Selection.Range("G1:R" & lrow).ClearContents
Selection.Range("V1:AB" & lrow).Delete
sh.Activate
Application.CutCopyMode = False
Range("A1").Select
End Select
Hide
End Sub
Private Sub CancelButton_Click()
OnCancel
End Sub
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
If CloseMode = VbQueryClose.vbFormControlMenu Then
Cancel = True
OnCancel
End If
End Sub
Private Sub OnCancel()
cancelled = True
Hide
End Sub
您需要将 checkbox_click 事件中的代码放入按钮 OK 事件中,如下所示:
Private Sub CheckBox6_Click()
End Sub
Public Property Get IsCancelled() As Boolean
IsCancelled = cancelled
End Property
Private Sub OkButton_Click()
Dim sh As Worksheet
Dim rang As Range
Select Case True
Case CheckBox1.Value
'Do something
Case CheckBox2.Value
'Do something
Case CheckBox3.Value
'Do something
Case CheckBox4.Value
'Do something
Case CheckBox5.Value
'Do something
Case CheckBox6.Value
ActiveSheet.Range("$A:$AE000").AutoFilter Field:=1, Criteria1:="NR"
ActiveSheet.Range("$A:$AE000").AutoFilter Field:=21, Criteria1:="FALSE"
'Output Paginated Pages (in testing)
Set sh = Worksheets("Country")
Set rang = sh.UsedRange.Offset(1, 0)
On Error Resume Next
Set rang = rang.SpecialCells(xlCellTypeVisible).Copy
Worksheets("PPage").Activate
Worksheets("PPage").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).PasteSpecial xlPasteValues
Selection.Range("G1:R" & lrow).ClearContents
Selection.Range("V1:AB" & lrow).Delete
sh.Activate
Application.CutCopyMode = False
Range("A1").Select
End Select
Hide
End Sub
Private Sub CancelButton_Click()
OnCancel
End Sub
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
If CloseMode = VbQueryClose.vbFormControlMenu Then
Cancel = True
OnCancel
End If
End Sub
Private Sub OnCancel()
cancelled = True
Hide
End Sub