【问题标题】:Looping to save a range as a pdf file in a new folder created in the current directory循环以在当前目录中创建的新文件夹中将范围保存为 pdf 文件
【发布时间】:2020-12-03 05:39:26
【问题描述】:

我想在当前目录中自动创建的新文件夹中将一系列 excel 表保存到 pdf 文件中(我需要对文档中的所有 excel 表执行相同操作) 但是每次我运行代码时,我的桌面上都没有保存文件或创建文件夹(我正在使用的 excel 文件位于桌面中)
我会感谢你的帮助 谢谢 这是我写的函数

Sub PDF_saving()
    
    Dim tbAllBoxes() As Variant
        'Put all you textboxes into an array
        tbAllBoxes = Array(SuiviConso.Controls("Textbox2"), SuiviConso.Controls("Textbox3"), SuiviConso.Controls("Textbox4"), SuiviConso.Controls("Textbox5"), SuiviConso.Controls("Textbox6"), SuiviConso.Controls("Textbox7"), SuiviConso.Controls("Textbox8"), SuiviConso.Controls("Textbox9"))
        Dim tballLabels() As Variant
        tballLabels = Array(SuiviConso.Controls("Label2"), SuiviConso.Controls("Label3"), SuiviConso.Controls("Label4"), SuiviConso.Controls("Label5"), SuiviConso.Controls("Label6"), SuiviConso.Controls("Label7"), SuiviConso.Controls("Label8"), SuiviConso.Controls("Label9"))
        Dim shAllSheets As Variant
        'Put all your worksheets into an array
        shAllSheets = Array(ThisWorkbook.Sheets("sheet2"), ThisWorkbook.Sheets("sheet3"), ThisWorkbook.Sheets("sheet4"), ThisWorkbook.Sheets("sheet5"), ThisWorkbook.Sheets("sheet6"), ThisWorkbook.Sheets("sheet7"), ThisWorkbook.Sheets("sheet8"), ThisWorkbook.Sheets("sheet9"))
    
    Dim wbA As Workbook
    Dim lastrow2 As Integer
    Dim strPath, path  As String
    Dim filename As String
    Dim rng As Range
    
    
    For i = 1 To UBound(shAllSheets)
        If tbAllBoxes(i).Value <> "" Then
    filename = shAllSheets(i).Range("A1").Value & Format(Date, "MM-DD-YYYY") & " rapport de consommation " & ".pdf"
    strPath = path & filename
    MkDir strPath
    lastrow2 = shAllSheets(i).Range("A" & Rows.Count).End(xlUp).Row + 1
    Set rng = shAllSheets(i).Range("A1 : J" & lastrow2)
    rng.ExportAsFixedFormat Type:=xlTypePDF, filename:=ActiveWorkbook.path & filename
    End If
    Next i
    End Sub

【问题讨论】:

  • 以上代码有什么问题?还是应该有人试图帮助您在没有您输入的情况下真正发现这一点?
  • 好吧,每次我尝试执行代码时都没有输入没有保存文件excel文件位于桌面谢谢我会在上面指定结果
  • strPath = path &amp; filename你还没有填充path
  • SO 是关于自己创建代码,而不是从某个地方复制它然后问它为什么不起作用......我建议投票结束这个问题!
  • @TimWilliams 如果未填充,则默认值为空字符串,但更好的做法是定义需要在使用前定义的变量。

标签: excel vba loops pdf


【解决方案1】:
  1. 打开您的宏
  2. 停车就行For i = 1 To UBound(shAllSheets)
  3. 按“F9”,此行前会出现一个红色项目符号(=断点)
  4. 运行你的宏,它会在断点所在的行中断
  5. 使用“F8”和“调试”菜单中的其他选项来查看代码的作用。

每走一步(按“F8”后)想想发生了什么,以及为什么会发生。哪些变量发生了变化,如果它们被更新,它们是否具有您期望它们具有的值?

多次完成此操作后,您应该对宏的工作有了更好的了解,这样就可以就这个宏提出更好的问题。

Suc6 带调试功能!

【讨论】:

    【解决方案2】:

    @Luuk 和@TimWilliams,我试过你告诉我的 我真的很感激和感激 现在已创建文件夹并生成 pdf 文件,但文件不包含在文件夹中

    Dim tbAllBoxes() As Variant
        'Put all you textboxes into an array
        tbAllBoxes = Array(SuiviConso.Controls("Textbox2"), SuiviConso.Controls("Textbox3"), SuiviConso.Controls("Textbox4"), SuiviConso.Controls("Textbox5"), SuiviConso.Controls("Textbox6"), SuiviConso.Controls("Textbox7"), SuiviConso.Controls("Textbox8"), SuiviConso.Controls("Textbox9"))
        Dim tballLabels() As Variant
        tballLabels = Array(SuiviConso.Controls("Label2"), SuiviConso.Controls("Label3"), SuiviConso.Controls("Label4"), SuiviConso.Controls("Label5"), SuiviConso.Controls("Label6"), SuiviConso.Controls("Label7"), SuiviConso.Controls("Label8"), SuiviConso.Controls("Label9"))
        Dim shAllSheets As Variant
        'Put all your worksheets into an array
        shAllSheets = Array(ThisWorkbook.Sheets("sheet2"), ThisWorkbook.Sheets("sheet3"), ThisWorkbook.Sheets("sheet4"), ThisWorkbook.Sheets("sheet5"), ThisWorkbook.Sheets("sheet6"), ThisWorkbook.Sheets("sheet7"), ThisWorkbook.Sheets("sheet8"), ThisWorkbook.Sheets("sheet9"))
    
    Dim wbA As Workbook
    Dim lastrow2 As Integer
    Dim strPath, path  As String
    Dim filename As String
    Dim rng As Range
    Dim fsoFSO
    
    path = ActiveWorkbook.path & "/" & "/rapport de consommation"
    
    For i = 1 To UBound(shAllSheets)
        'If tbAllBoxes(i).Value <> "" Then
    filename = shAllSheets(i).Range("A1").Value '& Format(Date) '& " rapport de consommation" '& ".pdf"
    
    strPath = path & filename
    
    Set fsoFSO = CreateObject("Scripting.FileSystemObject")
    If fsoFSO.FolderExists(strPath) Then
        MsgBox "found it"
    Else
        fsoFSO.CreateFolder (strPath)
        MsgBox "Done"
    End If
    lastrow2 = shAllSheets(i).Range("A" & Rows.Count).End(xlUp).Row + 1
    Set rng = shAllSheets(i).Range("A1 : J" & lastrow2)
    rng.ExportAsFixedFormat Type:=xlTypePDF, filename:=strPath
    'End If
    Next i
    End Sub
    

    【讨论】:

    • path = ActiveWorkbook.path &amp; "/" &amp; "/rapport de consommation" 你这里有两个`\`...
    • @TimWilliams 我想要的是每个 PDF 文件都存储到其定义的文件夹中 例如:123.pdf 在我的情况下位于文件夹 123 中,文件夹和 pdf 文件都已创建,但文件夹为空
    【解决方案3】:

    类似这样的:

        Set FSO = CreateObject("scripting.filesystemobject")
    
        basepath = ActiveWorkbook.path & "/rapport de consommation/"
    
        For i = 1 To UBound(shAllSheets)
            
            filename = shAllSheets(i).Range("A1").Value
            folderPath = basepath & filename
            If Not FSO.folderexists(folderPath) Then FSO.createfolder (folderPath)
            
            With shAllSheets(i)
                .Range("A1:J" & .Cells(.Rows.Count, "A").End(xlUp).Row).ExportAsFixedFormat _
                                    Type:=xlTypePDF, _
                                    filename:=folderPath & "\" & filename & ".pdf"
            End With
        Next i
    

    【讨论】:

      猜你喜欢
      • 2012-12-17
      • 2021-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-09
      • 2019-06-22
      • 2017-02-27
      • 2014-12-02
      相关资源
      最近更新 更多