簡體   English   中英

數組中的工作表名稱但並不總是相同的工作表

[英]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 添加到數組中

謝謝您的幫助!

這是一個基於所描述要求的示例。

此示例假設:

  • 您只想考慮從 pdf 中排除Sheet2
  • 您確定Sheet2是否包含在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM