Excel 使用不同的参数多次调用VBA宏

Excel 使用不同的参数多次调用VBA宏,excel,vba,Excel,Vba,因此,我编写了一个函数,它将打开word草稿文档,填充它,并将其保存为PDF。问题是,我需要能够使用这个功能打开不同的word文档,我不想复制和编辑这个功能20次。相反,我希望能够调用该函数,并将需要打开的文档的名称或类似的内容传递给它 目前我的宏是这样的。它工作正常,如果我复制它并更改文件的详细信息,它就工作了。但是我不想一次又一次地复制和粘贴这个函数。对于多个其他文件,有没有更快或更简单的方法 Sub macro() Set wordapp = CreateObject("

因此,我编写了一个函数,它将打开word草稿文档,填充它,并将其保存为PDF。问题是,我需要能够使用这个功能打开不同的word文档,我不想复制和编辑这个功能20次。相反,我希望能够调用该函数,并将需要打开的文档的名称或类似的内容传递给它

目前我的宏是这样的。它工作正常,如果我复制它并更改文件的详细信息,它就工作了。但是我不想一次又一次地复制和粘贴这个函数。对于多个其他文件,有没有更快或更简单的方法

Sub macro()
    Set wordapp = CreateObject("word.Application")
    wordapp.Documents.Open "C:\Users\Matt\Desktop\blah\blah\blah.docx"
    wordapp.Visible = True
    If wordapp.ActiveDocument.Tables.Count > 0 Then
        wordapp.ActiveDocument.Tables(1).Cell(1, 2).Select
        wordapp.ActiveDocument.Tables(1).Cell(1, 2).Range.Text = "No Movements"
        wordapp.ActiveDocument.Tables(1).Cell(1, 2).VerticalAlignment = 1
        
        wordapp.ActiveDocument.Tables(1).Cell(2, 2).Select
        Dim LDate As String
        LDate = Date
        wordapp.ActiveDocument.Tables(1).Cell(2, 2).Range.Text = LDate
        wordapp.ActiveDocument.Tables(1).Cell(2, 2).VerticalAlignment = 1
        
        
        wordapp.ActiveDocument.Tables(1).Cell(3, 2).Select
        Dim YDate As String
        If Weekday(Date, vbMonday) = 1 Then
        YDate = Date - 3
        Else
        YDate = Date - 1
        End If
        wordapp.ActiveDocument.Tables(1).Cell(3, 2).Range.Text = YDate
        wordapp.ActiveDocument.Tables(1).Cell(3, 2).VerticalAlignment = 1
        
        wordapp.ActiveDocument.Tables(1).Cell(4, 2).Select
        wordapp.ActiveDocument.Tables(1).Cell(4, 2).Range.Text = "N/A"
        wordapp.ActiveDocument.Tables(1).Cell(4, 2).VerticalAlignment = 1
        wordapp.ActiveDocument.Tables(1).Cell(5, 2).Select
        wordapp.ActiveDocument.Tables(1).Cell(5, 2).Range.Text = "N/A"
        wordapp.ActiveDocument.Tables(1).Cell(5, 2).VerticalAlignment = 1
        wordapp.ActiveDocument.Tables(1).Cell(6, 2).Select
        wordapp.ActiveDocument.Tables(1).Cell(6, 2).Range.Text = "N/A"
        wordapp.ActiveDocument.Tables(1).Cell(6, 2).VerticalAlignment = 1
        wordapp.ActiveDocument.Tables(1).Cell(7, 2).Select
        wordapp.ActiveDocument.Tables(1).Cell(7, 2).Range.Text = "N/A"
        wordapp.ActiveDocument.Tables(1).Cell(7, 2).VerticalAlignment = 1
        wordapp.ActiveDocument.Tables(1).Cell(8, 2).Select
        wordapp.ActiveDocument.Tables(1).Cell(8, 2).Range.Text = "N/A"
        wordapp.ActiveDocument.Tables(1).Cell(8, 2).VerticalAlignment = 1
    End If
    wordapp.ActiveDocument.SaveAs Filename:="C:\Users\Matt\Desktop\blah\blah\blah\blah_" & Format(Now(), "yymmdd")
    Call ConvertWordToPDF
End Sub

如果这段代码有点垃圾,请原谅我,但我仍在学习。

取出变量部分并在子签名中作为参数传递ByVal。称你为更有意义的人。您可能需要其他参数,例如“无移动”


谢谢然后要调用函数,我需要调用宏(File1,File2)并传入输入和输出位置??根据答案顶部的测试子项。不知道为什么前面有ccc!¯_(ツ)_/''我成功了。非常感谢,伙计,这太棒了!你真是太好了。嗨,QHarr,我想知道你是否能帮我做点别的事?我正在尝试让它运行,这样只有在“outFile”时才能运行相同的脚本不存在。如果程序已经运行并创建了该文件,则会弹出一个消息框,说明该文件存在。我正在传递一个单独的工作表中的参数。\u vba中的更改,但我不知道在哪里添加一些代码来检查该文件是否已存在。有什么想法吗?
Public Sub test()

    macro "C:\Users\Matt\Desktop\blah\blah\blah.docx", "C:\Users\Matt\Desktop\blah\blah\blah\blah_"


End Sub

Public Sub macro(ByVal openFile As String, ByVal outFile As String)
    Set wordapp = CreateObject("word.Application")
    wordapp.Documents.Open openFile
    wordapp.Visible = True
    If wordapp.ActiveDocument.Tables.Count > 0 Then
        wordapp.ActiveDocument.Tables(1).Cell(1, 2).Select
        wordapp.ActiveDocument.Tables(1).Cell(1, 2).Range.Text = "No Movements"
        wordapp.ActiveDocument.Tables(1).Cell(1, 2).VerticalAlignment = 1
        
        wordapp.ActiveDocument.Tables(1).Cell(2, 2).Select
        Dim LDate As String
        LDate = Date
        wordapp.ActiveDocument.Tables(1).Cell(2, 2).Range.Text = LDate
        wordapp.ActiveDocument.Tables(1).Cell(2, 2).VerticalAlignment = 1
        wordapp.ActiveDocument.Tables(1).Cell(3, 2).Select
        
        Dim YDate As String

        If Weekday(Date, vbMonday) = 1 Then
            YDate = Date - 3
        Else
            YDate = Date - 1
        End If

        wordapp.ActiveDocument.Tables(1).Cell(3, 2).Range.Text = YDate
        wordapp.ActiveDocument.Tables(1).Cell(3, 2).VerticalAlignment = 1
        
        wordapp.ActiveDocument.Tables(1).Cell(4, 2).Select
        wordapp.ActiveDocument.Tables(1).Cell(4, 2).Range.Text = "N/A"
        wordapp.ActiveDocument.Tables(1).Cell(4, 2).VerticalAlignment = 1
        wordapp.ActiveDocument.Tables(1).Cell(5, 2).Select
        wordapp.ActiveDocument.Tables(1).Cell(5, 2).Range.Text = "N/A"
        wordapp.ActiveDocument.Tables(1).Cell(5, 2).VerticalAlignment = 1
        wordapp.ActiveDocument.Tables(1).Cell(6, 2).Select
        wordapp.ActiveDocument.Tables(1).Cell(6, 2).Range.Text = "N/A"
        wordapp.ActiveDocument.Tables(1).Cell(6, 2).VerticalAlignment = 1
        wordapp.ActiveDocument.Tables(1).Cell(7, 2).Select
        wordapp.ActiveDocument.Tables(1).Cell(7, 2).Range.Text = "N/A"
        wordapp.ActiveDocument.Tables(1).Cell(7, 2).VerticalAlignment = 1
        wordapp.ActiveDocument.Tables(1).Cell(8, 2).Select
        wordapp.ActiveDocument.Tables(1).Cell(8, 2).Range.Text = "N/A"
        wordapp.ActiveDocument.Tables(1).Cell(8, 2).VerticalAlignment = 1
    End If
    
    wordapp.ActiveDocument.SaveAs Filename:=outFile & Format(Now(), "yymmdd")
    
    ConvertWordToPDF
End Sub