无法使用 VBA 打开文本文件

unable to open the text file using VBA

这是我的 excel vba 宏。我想将文本文件列表转换为特定文件夹的 pdf。为此,我编写了从 word 文档打开单个文本文件并以 pdf 格式保存的逻辑。但它没有保存为pdf文件。谁能指导我逻辑

Dim file As Variant
inp_dir = "C:\Users\HP\OneDrive\Desktop\vbatest\pdfconv\"
inp_file_name = Dir(inp_dir & "*.txt") 'txt path
inp_file = inp_dir & inp_file_name

Dim wdApp As New Word.Application, wdDoc As Word.Document


MsgBox (inp_file)

    ' Set wdDoc = Documents.Open(inp_file)
     Set wdDoc = Documents.Open(Filename:=inp_file, ReadOnly:=True, _
    AddToRecentFiles:=False, Format:=wdOpenFormatAuto, Visible:=False)
  
  wdDoc.SaveAs2 Filename:="inp_file" & Replace(inp_file, ".txt", ".pdf"), _
    FileFormat:=wdFormatPDF, AddToRecentFiles:=False
  wdDoc.Close False
  

我猜你很接近 - 你只是在你的目标文件名中有一个小错误:你写了 Filename:="inp_file" & Replace(inp_file, ".txt", ".pdf"),但是固定的字符串 "inp_file" 没有意义并且使文件名无效。

我总是建议使用中间变量,这样调试和发现错误会容易得多。

还有一些小东西:

  • 您应该使用 Option Explicit 并声明所有变量。
  • 您声明了一个从未使用过的变量 file
  • 将您的路径声明为 Constant

您的代码可能如下所示:

Const inp_dir = "C:\Users\HP\OneDrive\Desktop\vbatest\pdfconv\"

Dim inp_file_name As String, inp_full_name As String

inp_file_name = Dir(inp_dir & "*.txt") 'txt path
inp_full_name = inp_dir & inp_file_name

Dim wdApp As New Word.Application, wdDoc As Word.Document
Set wdDoc = wdApp.Documents.Open(Filename:=inp_full_name, ReadOnly:=True, _
    AddToRecentFiles:=False, Format:=wdOpenFormatAuto, Visible:=False)
  
Dim pdf_Filename As String
pdf_Filename = Replace(inp_full_name, ".txt", ".pdf")
Debug.Print pdf_Filename 
wdDoc.SaveAs2 Filename:=pdf_Filename, FileFormat:=wdFormatPDF, AddToRecentFiles:=False
wdDoc.Close False

wdApp.Quit

您的代码非常接近 运行。基本上,您需要使用 wdApp 对象打开 Word。这个例子展示了如何...

Option Explicit

Sub TxtToPDF()
    Dim inp_dir As String
    Dim inp_file_name As String
    Dim inp_file As String
    inp_dir = "C:\Temp\"
    inp_file_name = Dir(inp_dir & "*.txt")       'txt path
    
    Dim wordWasRunning As Boolean
    wordWasRunning = IsMSWordRunning
    
    Dim wdApp As Word.Application
    Set wdApp = AttachToMSWordApplication
    
    Do While Len(inp_file_name) > 0
        inp_file = inp_dir & inp_file_name
        Debug.Print "currently opening " & inp_file

        Dim wdDoc As Word.Document
        Set wdDoc = wdApp.Documents.Open(Filename:=inp_file, _
                                         ReadOnly:=True, _
                                         AddToRecentFiles:=False, _
                                         Format:=wdOpenFormatAuto, _
                                         Visible:=False)
        Dim out_file As String
        out_file = Replace(inp_file, ".txt", ".pdf")
        Debug.Print "saving as " & out_file
        wdDoc.SaveAs2 Filename:=out_file, _
                      FileFormat:=wdFormatPDF, AddToRecentFiles:=False
        wdDoc.Close False
        
        '--- get the next txt file
        inp_file_name = Dir
    Loop
    
    If Not wordWasRunning Then
        wdApp.Quit
    End If
End Sub

将此代码放在另一个模块中使用(来自我的个人图书馆)。

Option Explicit

Public Function IsMSWordRunning() As Boolean
    '--- quick check to see if an instance of MS Word is running
    Dim msApp As Object
    On Error Resume Next
    Set msApp = GetObject(, "Word.Application")
    If Err > 0 Then
        '--- not running
        IsMSWordRunning = False
    Else
        '--- running
        IsMSWordRunning = True
    End If
End Function

Public Function AttachToMSWordApplication() As Word.Application
    '--- finds an existing and running instance of MS Word, or starts
    '    the application if one is not already running
    Dim msApp As Word.Application
    On Error Resume Next
    Set msApp = GetObject(, "Word.Application")
    If Err > 0 Then
        '--- we have to start one
        '    an exception will be raised if the application is not installed
        Set msApp = CreateObject("Word.Application")
    End If
    Set AttachToMSWordApplication = msApp
End Function