Excel 另存为PDF宏,带下拉菜单

Excel 另存为PDF宏,带下拉菜单,excel,vba,Excel,Vba,所以我一直在使用宏将工作表保存为PDF,但现在我不再使用多个工作表,而是使用一个工作表,使用单元格A1中的下拉列表提取所有需要的信息,然后根据下拉列表的单元格值,更新工作表上的其他字段 以下宏用于逐页执行: Sub SaveWorksheetsAsPDFs() Dim sFile As String Dim sPath As String Dim wks As Worksheet With ActiveWorkbook sPath = .Path

所以我一直在使用宏将工作表保存为PDF,但现在我不再使用多个工作表,而是使用一个工作表,使用单元格A1中的下拉列表提取所有需要的信息,然后根据下拉列表的单元格值,更新工作表上的其他字段

以下宏用于逐页执行:

Sub SaveWorksheetsAsPDFs()
Dim sFile       As String
Dim sPath       As String
Dim wks         As Worksheet

With ActiveWorkbook
    sPath = .Path & "\"
    For Each wks In .Worksheets
        Select Case wks.Name
            Case Else
                'Code here to run on the other sheets
                sFile = wks.Name & ".pdf"
                wks.ExportAsFixedFormat Type:=xlTypePDF, _
                                        Filename:=sPath & sFile, _
                                        Quality:=xlQualityStandard, _
                                        IncludeDocProperties:=False, _
                                        IgnorePrintAreas:=False, _
                                        OpenAfterPublish:=False
        End Select
    Next wks
End With
End Sub

既然我把所有的东西都放在一张纸上,那么有没有办法从下拉列表中找到每一项,让它填充并自动保存为PDF?谢谢

我认为这应该行得通-您只需将选项保存到一个数组中,然后将需要的任何单元格设置为选项。在我的示例中,我在
Sheet1
工作表上使用了
A1
。根据需要进行调整:

Option Explicit

Sub loop_through_dropdown()
     Dim inputRange
     inputRange = Range("A1").Validation.Formula1

     Dim inputs, temp_option As String
     inputs = Split(inputRange, ",")

     Dim i As Long

     For i = LBound(inputs) To UBound(inputs)
        temp_option = (Trim(inputs(i)))
        'do something with temp_option
        Debug.Print (temp_option)
        Worksheets("Sheet1").Range("A1").Value = temp_option
        ' Now, the page should update with the data for that option. Now simply run the macro
        Call SaveWorksheetsAsPDFs
    Next i
End Sub

因此,您发布的代码是有效的——您在问如何为下拉列表中的每个项目运行该代码?假设下拉列表位于
A1
-如果更改了其中的值,工作簿中的其他值将更新,对吗?您想将每个选项的所有信息和结果数据保存为PDF格式吗?@BruceWayne,是的!正好^I收到一个运行时错误“5”:过程调用或参数无效。当我尝试调试它时,错误似乎出现在SaveAsPDF脚本中。但是,在此之前,A1中的值变为#值!
saveAsPDF
脚本与我的循环在同一个模块中吗?应该是。您可能需要执行
调用saveworksheetsapsdfs()
。即时窗口(在VBEditor打开的情况下按CTRL+G)作为第一个选项打印什么?是的,我将其放置在同一个模块中。我在下面尝试过,选项Explicit在结束后会落在SaveWorksheetsAsPDFs()下,因此不起作用。然后我尝试将它放在SaveWorksheetsAsPDFs()脚本之上,Option Explicit在它自己的部分上运行,然后在运行它时遇到了相同的错误。当我尝试拉动即时窗口时,我得到了A1下拉列表的范围,即class='Sheet1'$E$5:$E$400仅调用
saveworksheetsapsdfs
宏将不起作用。SaveAs需要重写,因此它不会查找每个工作表。另外,
文件名:
也需要更改。我正在考虑对列表框使用一个
工作表\u Change
事件,并将
另存为
。这样,OP就可以使用列表框来选择他想要保存到pdf的数据。我将使用listbox值作为
sFile
变量