我在excel vba中有一个宏,它运行一个shell来通过命令行执行一个简单的pdf编辑器,导出页面名称和数字的列表,搜索关键字以找到我们想要的页面,获取页面num,然后从pdf文件中提取该页面。
我已经意识到这个宏作为一个独立的实体会更好,并且想知道从excel中取出代码需要什么,并从.vbs文件运行它。
我尝试直接复制和粘贴,但它不喜欢第一行中“As”字母中的字母“A”。
Sub PDF_GetUFPlan()
Dim wsh As Object
Set wsh = VBA.CreateObject("WScript.Shell")
Dim waitOnReturn As Boolean: waitOnReturn = True
Dim windowStyle As Integer: windowStyle = 1
Dim errorCode As Integer
wsh.Run "C:\Users\johnmcs\Desktop\pdftk.exe C:\Users\johnmcs\Desktop\FULL.PDF burst output C:\Users\johnmcs\Desktop\output.txt", windowStyle, waitOnReturn
Dim hf As Integer: hf = FreeFile
Dim lines() As String, i As Long
Open "C:\Users\johnmcs\Desktop\doc_data.txt" For Input As #hf
lines = Split(Input$(LOF(hf), #hf), vbNewLine)
Close #hf
For i = 0 To UBound(lines)
If InStrRev(lines(i), "UPPER FLOOR PLAN") > 0 Then
For x = i To UBound(lines)
If InStrRev(lines(x), "BookmarkPageNumber: ") > 0 Then
Dim UFpagenum As Integer, PagenumPosi As Integer
PagenumPosi = InStrRev(lines(x), " ")
PagenumPosi = Len(lines(x)) - PagenumPosi
UFpagenum = Right(lines(x), PagenumPosi)
GoTo extractpage
End If
Next
End If
Debug.Print "Line"; i; "="; lines(i)
Next
extractpage:
wsh.Run "C:\Users\johnmcs\Desktop\pdftk.exe C:\Users\johnmcs\Desktop\FULL.PDF cat " & UFpagenum & " output C:\Users\johnmcs\Desktop\page" & UFpagenum & ".pdf", windowStyle, waitOnReturn
End Sub
答案 0 :(得分:2)
Sub PDF_GetUFPlan()
Dim wsh
Set wsh = CreateObject("WScript.Shell") ' NB we also have wscript.createobject
Dim waitOnReturn
waitOnReturn = True
Dim windowStyle
windowStyle = 1
Dim errorCode
所以在这里,开始是固定的。你不能像任何东西一样昏暗。一切都是变种。一切都必须是晚期绑定所以所有集必须使用CreateObject完成 - 没有set x = new thing
但是set x = CreateObject("thing.application")
。
记住VB6 / VBA支持vbs功能集。 vbs与vb6 / vba兼容(设计目标)。
答案 1 :(得分:1)
VBscript不支持
Dim variable_name As variable_type
变量声明....所有变量都是变体类型。
只需输入:
Dim variable_name
答案 2 :(得分:0)
技术上不是必需品,但是(叹息 ......我不敢相信我这么说)你应该考虑使用VBScript的匈牙利符号。正如其他回答者指出的那样,VBScript不是强类型语言。您应该重命名变量,以便明确它们对未来任何维护者的类型。
Dim wsh As Object
Set wsh = VBA.CreateObject("WScript.Shell")
Dim boolWaitOnReturn : waitOnReturn = True
Dim intWindowStyle : windowStyle = 1
Dim intErrorCode