【发布时间】:2018-04-22 19:18:48
【问题描述】:
我的循环有问题。我想做一个工作表,打印它(还没有内置,我知道它是如何工作的),然后删除它。之后继续下一个 j 做同样的事情。但它正在将 j = 1 重新循环为 1,因此它试图创建第二个名为“print”的工作表,这是不可能的。
我有名称为:CheckBox1、CheckBox2、CheckBox'j' 的复选框。我想从 CheckBox1 开始,以 CheckBox25 结束。如果是真的,那么打印这张纸。
我想我需要摆脱第一个 For:
对于 Me.Controls 中的每个 ctrl
但我不知道如何。因为我需要它来指定变量'j'。
Private Sub PrintKnop_Click()
Dim ctrl As MSForms.Control
For Each ctrl In Me.Controls
If TypeName(ctrl) = "CheckBox" And Left(ctrl.Name, 8) = "CheckBox" Then
Dim j As Integer
j = Mid(ctrl.Name, 9, 2)
For j = 1 To 1
'it should be possible to adjust the range.
If ctrl.Value = True Then
Dim ws As Worksheet
With ThisWorkbook
Worksheets("Veiligheid").Copy _
before:=ActiveWorkbook.Sheets("Data")
Set ws = ActiveSheet
ws.Name = "print"
End With
'Application.DisplayAlerts = False
'Sheets("print").Delete
'Application.DisplayAlerts = True
'These shouldn't be comments, but if I uncomment it, it won't show the failures.
End If
Next
For j = 2 To 4
If ctrl.Value = True Then
With ThisWorkbook
Worksheets("Veiligheid").Copy _
before:=ActiveWorkbook.Sheets("Data")
Set ws = ActiveSheet
ws.Name = "printen"
End With
'Application.DisplayAlerts = False
'Sheets("printen").Delete
'Application.DisplayAlerts = True
End If
Next
End If
Next
End Sub
【问题讨论】:
-
如果下一行使用
j作为for 循环的索引,那么j = Mid(ctrl.Name, 9, 2)的意义何在?无论如何For j = 1 To 1只会运行一次,但它嵌入在一个更大的循环中,可能会运行多次。我觉得这个问题很不清楚。如果您希望代码只运行一次,请不要将其置于循环中。 -
如果您正在寻找这些值docs.microsoft.com/en-us/dotnet/visual-basic/language-reference/…,您想使用 case select 而不是 for next