【发布时间】:2019-07-09 18:08:04
【问题描述】:
我有一个包含 7 个复选框和一些描述它们的标签的用户表单。对于每个相应的复选框,都有一个数组,如果复选框被选中,则将从该数组中创建一个报告。但是,它没有正确循环。
我希望它以A, B, C, D, E, F, G 的形式循环遍历每个具有TabIndex 编号的复选框,分别为0, 1, 2, 3, 4, 5, 6。但是它按0,6,5,4,3,2,1 的顺序循环。
我有一个定义和声明变量的主子。我的用户表单打印代码如下:
Sub Get_PDF_Click()
' Creating PDF
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
PDFUserForm.Hide
i = 0
j = 0
For Each ctl In Me.Controls
If TypeName(ctl) = "CheckBox" Then
If ctl.Value = True Then
j = j + 1
Name_of_File = Array(i + 1, 1) & " report" & YYMM & ".xlsx"
Workbooks.Open Filename:=OutputPath & Name_of_File
Set Wkb = Workbooks(Name_of_File)
For Each ws In Wkb.Worksheets
PDF_Name = Array(i + 1, 1) & " " & ws.Name & " " & YYMM
ws.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
OutputPath & PDF_Name, Quality _
:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas _
:=False, OpenAfterPublish:=False
Next ws
Wkb.Close SaveChanges:=False
End If ' See if checked
i = i + 1
Debug.Print ctl.Name
End If ' See if checkbox
Next ctl
If j > 0 Then
' Notification on process time
SecondsElapsed = Round(Timer - StartTime, 0)
MsgBox "PDF succesfully published after " & SecondsElapsed & " seconds." & Chr(10) & "Location: " & OutputPath, vbInformation
Else
MsgBox "No file was selected.", vbInformation
End If
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
End Sub
顺便说一句,我在另一段代码中遇到了类似的问题,我在工作表上的图表中循环,该图表也以错误的顺序循环,所以也许可以应用相同的解决方案概念。
【问题讨论】:
-
PDF_Name = Array(i + 1, 1) & ...让我觉得是 type mismatch 错误的原因:为什么要创建一个包含两个元素(i + 1和1)的数组,然后尝试连接那个带有字符串的数组(??)? -
我的数组其实叫别的东西,但为了不混淆,我把它翻译了。我意识到我没有做到这一点。该数组包含名称客户。