VBA:PDF转置

这篇博客介绍了使用VBA处理PDF文件时遇到的两个主要问题:一是创建Word应用程序后,如果不关闭会导致资源占用;二是PDF转Word过程中可能出现乱码。博主提供了一段代码来解决这些问题,包括读取PDF中的表格数据,并进行转置,但遇到了转换后的数据质量问题。
摘要由CSDN通过智能技术生成

VBA记录一下遇到的转置后占用问题:(1)

Sub Xuanwj()
    Dim path$, filename$, fn$
    Dim arr(1 To 999, 1 To 9)
    Dim arr1(1 To 999, 1 To 6)
    Dim a1%, a2%, a3%, s1%, s2%, s3%, Tableno%, Rows%
    Dim t As Date
    Application.ScreenUpdating = False    '屏幕闪烁关闭
    Application.DisplayAlerts = False
   With Application.FileDialog(msoFileDialogFolderPicker)
    If .Show = -1 Then
    'filedialog对象的show方法显示对话框,并且返回 -1(如果你按OK) 和 0 (如果你按CANCEL)
        path = .SelectedItems(1)
        'MsgBox "你选择的文件夹是: " & .SelectedItems(1), vbOKOnly + vbInformation, "标题"
    Else
        'MsgBox "未选择"
        Exit Sub
    End If
    End With
    t = Timer
 filename = Dir(path & "\*.pdf")    '对文件夹内的工作簿进行循环,循环查找的格式  *.pdf
    ' MsgBox filename
    a1 = 1
    Do While filename <> ""
        '对文件夹内的工作簿进行循环,截止到最后一个工作簿
            fn = path & "\" & filename    '取得循环符合条件工作簿的  文件夹地址,赋值给fn 这个变量
            ' MsgBox "现在汇总的工作簿是fn= " & fn
            Set wordapp = CreateObject("Word.Application")
            Set WordDoc = wordapp.Documents.Open(filename:=fn, ReadOnly:=True)
             wordapp.Visible = False
             '调用Wordapp打开PDF格式
            Set WDDOC = GetObject(fn)
        With WDDOC
                Tableno = .Tables.Count    '文件的页数
            On Error Resume Next
                '复制文档中表格部分文本
            For s1 = 1 To Tableno
                For s2 = 1 To .Tables(s1).Range.Rows.Count
                    For s3 = 1 To .Tables(s1).Range.Columns.Count
                            arr(a1 + s2, 1 + s3) = Replace(Replace(Replace(.Tables(s1).Cell(s2, s3).Range.Text, "", ""), Chr(13), ""), "End Of PO", "")
                            arr(a1 + s2, 1) = Replace(Right(filename, 13), ".pdf", "")
                    Next
                Next
                    a1 = a1 + s2
            Next
            'Debug.Print arr(44, 1) & "/" & arr(44, 2) & "/" & arr(44, 3) & "/" & arr(44, 4) & "/" & arr(44, 6) & "/" & arr(44, 7) & "/" & arr(44, 8)
        End With
        Set WDDOC = Nothing
        WDDOC.Close False
        WDDOC.Application.Quit '关闭
        wordapp.Quit
        
        filename = Dir      '进行下一步的循环
        Loop
            Rows = 1
            For a2 = 1 To a1
                    If (arr(a2, 2) > 0) And (arr(a2, 2) < 999) Then
                    arr1(Rows, 1) = arr(a2, 1)
                    arr1(Rows, 2) = arr(a2, 3)
                    arr1(Rows, 3) = arr(a2, 4)
                    arr1(Rows, 4) = arr(a2, 5)
                    arr1(Rows, 5) = arr(a2, 6)
                    arr1(Rows, 6) = arr(a2, 7)
                    Rows = Rows + 1
                    End If
            Next
        ThisWorkbook.Worksheets(1).Cells.Clean
        ThisWorkbook.Worksheets(1).Range("a1:f1") = Array("订单号", "SKU", "品名", "店名", "订货量", "单价")
        ThisWorkbook.Worksheets(1).Range("a2").Resize(UBound(arr1, 1), UBound(arr1, 2)) = arr1
        ThisWorkbook.Worksheets(1).Cells.EntireColumn.AutoFit
        Application.ScreenUpdating = True    '屏幕闪烁打开
        Application.DisplayAlerts = True
        MsgBox "转换完成,用时:" & Format(Timer - t, "###")

END SUB

1.Set wordapp = CreateObject("Word.Application")之后调用WORK(桌面)打面指定文件夹内PDF后会生成一个桌面WORK,后续不加wordapp.Quit会一直占用着(导至转置后的PDF改不了名子等操作)
2.初次把PDF调用桌面WORK格式打开时会显示对话框。如不确认并勾选不再显示程序会进入假死。
3.Replace(Replace(Replace(.Tables(s1).Cell(s2, s3).Range.Text, "", ""), Chr(13), ""), "End Of PO", "")部分PDF转WORK会生成不知名的各种乱码如""

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值