将VBA代码移动到独立的VBS文件

时间:2014-06-11 03:13:15

标签: vba excel-vba vbscript migrate excel

我在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

3 个答案:

答案 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