使用cmd运行vbs脚本

使用cmd运行vbs脚本

问题描述:

有人能告诉我为什么如果从excel内执行,下面的VB脚本工作正常,但如果使用cmd执行它将不起作用:cscript c:\ vb \ test.vbs ?.下面是我试图让它使用cmd工作的代码。我使用的是excel .xls(excel 97-2003)。使用cmd运行vbs脚本

Private Sub CopyData() 
    Dim x 
    Dim y 

    '## Open both workbooks first: 
    Set x = Workbooks.Open("C:\VB\CopyDataTest.xls") 

    'Now, copy what you want from x: 
    Sheets("Sheet1").Range("A:B").Copy 
    Set y = Workbooks.Open("C:\VB\Destination.xls") 

    'Now, paste to y worksheet: 
    y.Sheets("Sheet2").Range("A:B").PasteSpecial 

    'Close x: 
     y.Close 
End Sub 
+0

Excel如何运行VBS?它只支持VBA –

+0

好吧 - 也许我错了,但文件名是“test.vbs”,我需要使用cmd执行它?通过输入cscript c:\ vb \ test.vbs。 – AzMar

+0

因为这不是VBS,显然cscript不能执行它。该扩展仅用于Windows显示图标并选择要打开文件的应用程序。程序不使用扩展名来知道文件类型。这是VBA,所以从Excel运行将工作 –

如果您需要从cmd运行脚本,您需要创建一个excel对象。试试这个:

Private Sub CopyData() 
    Dim x 
    Dim y 

    Set xlApp = CreateObject("Excel.Application") 
    Set xlBook = xlApp.Workbooks.Open("C:\VB\Destination.xls", 0, True) 

    ## Open both workbooks first: 
    Set x = xlApp.Workbooks.Open("C:\VB\Destination.xls") 

    Now, copy what you want from x: 
    xlApp.Sheets("Sheet1").Range("A:B").Copy 
    Set y = xlApp.Workbooks.Open("C:\VB\Destination.xls") 

    Now, paste to y worksheet: 
    y.Sheets("Sheet2").Range("A:B").PasteSpecial 

    Close x: 
    y.Close 
End Sub 

CopyData() 
+0

感谢代码做我想做的事情,但唯一的事情是,一旦日期成功复制到目标工作簿,源工作簿(即X)由于某种原因被锁定,如果我尝试打开它。任何想法如何避免源工作簿被锁定?谢谢。 – AzMar

+0

@Mnimonic,上面的代码工作正常,但我需要复制更多列(A,B,C,D,E,F,I)到目标工作表。如果我试图复制3栏或更多即时通讯错误:800A03EC(从我的答案评论复制...) – Schwarzie2478

Mnimonic已经为此提供了一个完美的可用解决方法,但一个解释也可能是有用的。

您已经在VBA中编写了一段代码(Visual Basic for Applications)。

您试图运行它VBS(VB Script

VB脚本不知道办公室和其他库运行Excel内部代码时已经加载。

您需要了解如何与VBscript中办公室的COM接口进行交互。

更好的解决方案现在将是VB.NET编程和与Excel交互里面.NET:

链接:VB.NET and excell

的代码将仍然看起来很熟悉,但它就是微软想你现在做。

注意:您将始终需要在运行脚本的PC上安装Excel! 如果你想避免这种情况,也许看看像Aspose一样没有安装Office的东西...

+0

@Mnimonic,上面的代码工作正常,但我需要复制更多列(A,B,C,D ,E,F,I)到目的地表单。如果我尝试复制3列或更多,即时获取错误:800A03EC – AzMar