![](/img/trans.png)
[英]How to compare Sheet Names with Array elements and execute tasks on Google Sheets using script?
[英]sheet names in an array but not always the same sheets
我正在嘗試根據 VBA 中的某些標准創建工作簿中各種工作表的 pdf 我當前的代碼是
Sub ExportAsPDF()
Dim FolderPath As String
FolderPath = "C:\Users\USER1\Desktop\PDF\pdftest"
'sheet names in ""
Sheets(Array("SHEET1","SHEET2","SHEET3")).Select
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, filename:=FolderPath, _
openafterpublish:=False, ignoreprintareas:=False
MsgBox "All PDFs have been successfully exported."
End Sub
以上工作,但有超過 9 張紙,有時需要第 2 張紙,有時不需要。 如何根據條件將數組選擇寫入變量?
如果 a=1 則將工作表 2 添加到數組中
謝謝您的幫助!
這是一個基於所描述要求的示例。
此示例假設:
Sheet2
上的單元格B1
中的值我已經將一些If...Then
調整為For Each...Next
循環到您現有的代碼。
Sub ExportAsPDF()
Dim FolderPath As String
Dim SheetsArray As Variant
Dim TargetSheet As Worksheet
Dim ArrayCounter As Long: ArrayCounter = 0
FolderPath = "C:\Users\USER1\Desktop\PDF\pdftest"
'sheet names in ""
If Sheets("Sheet2").Range("B1").Value = "Yes" Then
ReDim SheetsArray(ThisWorkbook.Worksheets.Count - 1)
For Each TargetSheet In ThisWorkbook.Worksheets
SheetsArray(ArrayCounter) = TargetSheet.Name
ArrayCounter = ArrayCounter + 1
Next TargetSheet
Else
ReDim SheetsArray(ThisWorkbook.Worksheets.Count - 2)
For Each TargetSheet In ThisWorkbook.Worksheets
If Not TargetSheet.Name = "Sheet2" Then
SheetsArray(ArrayCounter) = TargetSheet.Name
ArrayCounter = ArrayCounter + 1
End If
Next TargetSheet
End If
ThisWorkbook.Sheets(SheetsArray).Select
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=FolderPath, _
openafterpublish:=False, ignoreprintareas:=False
MsgBox "All PDFs have been successfully exported."
End Sub
如果Sheet2.Range("B1")
的值為 "Yes",則 Sheet2 包含在 pdf 中,否則如果它是任何其他值,則不包含在內。
相關文件:
首先,我評估Sheet2.Range("B1") = "Yes"
是否決定我們將如何填充SheetsArray
。
這些陳述非常相似,具體取決於它是否為"Yes"
。
ReDim SheetsArray
是設置我們數組的維度。 因為 VBA 中的 arrays 默認為Base 0
(表示數組的第一個元素為 0,第二個元素為 1 等等...)我將數組的大小設置如下:
"Yes"
,則數組的大小為比工作表數小 1。 這是為了說明從 0 而不是 1 開始的數組。"Yes"
,則數組的大小比工作表的數量小 2。 這說明了從 0 而不是 1 開始的數組並且我們不包括Sheet2
。 然后For Each...Next
循環遍歷Worksheets
集合,將每個工作表名稱添加到數組中。 我們在代碼塊中有一個額外的If...Then
語句,如果值不是"Yes"
,以確定TargetSheet
是否不是Sheet2
,如果滿足此條件,則添加工作表名稱。 這將排除Sheet2
添加到我們的數組中。
ArrayCounter
變量只是隨着添加到數組中的每個工作表名稱而遞增,如“要設置單個元素的值,請指定元素的索引”。
Function AvoidWB2() As String()
Dim v() As String, i As Long, wbCount As Long
wbCount = ActiveWorkbook.Sheets.Count
ReDim v(1 To wbCount)
For i = 1 To wbCount
If i = 2 Then
'do something here regarding adding sheet 2.
Else
v(i) = ActiveWorkbook.Sheets(i).Name
End If
Next i
AvoidWB2 = v
End Function
Sub ExportAsPDF()
Dim FolderPath As String, vSheetSelection() as Variant
FolderPath = "C:\Users\USER1\Desktop\PDF\pdftest"
'sheet names in ""
'----| Implement Here|
Sheets(AvoidWB2).Select
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, filename:=FolderPath, _
openafterpublish:=False, ignoreprintareas:=False
MsgBox "All PDFs have been successfully exported."
End Sub
您可以使用工作表名稱設置一個數組,然后根據需要添加 Sheet2:
Dim arr, test
test = True 'variable which controls adding sheet2....
arr = Array("Sheet1", "Sheet5") 'array without sheet2
'need to add sheet2?
If test Then
ReDim Preserve arr(LBound(arr) To UBound(arr) + 1)
arr(UBound(arr)) = "Sheet2"
End If
ThisWorkbook.Sheets(arr).Select
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
"C:\Tester\tempo.pdf", Quality:=xlQualityStandard, IncludeDocProperties:=True, _
IgnorePrintAreas:=False, OpenAfterPublish:=True
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.