微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

基于 vba 值的工作表选择或如何将字符串转换为工作表数组

如何解决基于 vba 值的工作表选择或如何将字符串转换为工作表数组

我正在尝试根据变量选择不同的工作表。 所有这些都是为了将​​这些表格打印成 pdf。

我尝试过使用数组,但我知道的不多。 所以我继续使用字符串和拆分。 但我也没有机会了。

除了最后一个代码行,工作表选择外,一切都好。 我收到下标超出范围 有什么建议吗?

Sub Print_Full_Report()

Call Clear_clipboard
Call Stop_Calcul_Screen

LastOverviewRow = WS_Rep_Overview.Cells(Rows.Count,3).End(xlUp).Row
tabtoprint = ""
SelectedDate = Date + 90

For i = 5 To LastOverviewRow
   If WS_Rep_Overview.Range("E" & i) < SelectedDate Then
       Module = WS_Rep_Overview.Range("D" & i).Value
           tabtoprint = tabtoprint & Chr(34) & Module & Chr(34) & "," & Chr(34) & Module & "-Cow" & Chr(34) & "," & Chr(34) & Module & "-SubSys" & Chr(34) & ","
   End If
Next i

tabtoprint = Mid(tabtoprint,1,Len(tabtoprint) - 1)
Sheets(Split(tabtoprint,",")).Select

End Sub

解决方法

试试这个代码:

Sub Print_Full_Report()
    Const template = ",#,#-Cow,#-SubSys"   ' for further use in the loop
    
    ' previous your code ...
    
    ' in the code some redundant variables have been removed
    With WS_Rep_Overview
        SelectedDate = Date + 90
        For i = 5 To .Cells(Rows.Count,3).End(xlUp).Row
           If .Range("E" & i) < SelectedDate Then
               tabtoprint = tabtoprint & Replace(template,"#",.Range("D" & i).Value)
           End If
        Next i
    End With
    tabtoprint = Mid(tabtoprint,2) 'remove the leading comma
    ' for debug; check that it prints something like this: Module5,Module5-Cow,Module5-SubSys,Module6,Module6-Cow,Module6-SubSys,Module7,Module7-Cow,Module7-SubSys
    Debug.Print tabtoprint
    Worksheets(Split(tabtoprint,",")).Select
End Sub

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。