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