2016-07-25 6 views
2

Не мог бы кто-нибудь рассказать мне, почему следующий скрипт VB отлично работает, если он выполняется из excel, но не будет работать, если он выполняется с помощью cmd: cscript c: \ vb \ test.vbs ?. Ниже мой код Я пытаюсь заставить его работать с помощью cmd. Я использую excel .xls (excel 97-2003).Запуск скрипта vbs с использованием cmd

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 будет работать –

ответ

2

Если вам нужно запустить скрипт из 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 столбца или более im получить ошибку: 800A03EC (скопировано из комментария на мой ответ ...) – Schwarzie2478

2

Mnimonic уже дал вполне годный к употреблению обходного пути для этого, но объяснение может быть полезно тоже.

Вы написали фрагмент кода в VBA (Visual Basic for Applications).

Вы пытались запустить его как VBS (VB Script)

VB скрипт не знает о бюро и других библиотеках уже загружен при запуске коды внутри первенствует.

Вам необходимо научиться взаимодействовать с интерфейсами COM из офиса в VBscript.

Лучше решение теперь будет программировать на VB.NET и взаимодействовать с Excel в .NET:

Ссылка: VB.NET and excell

код будет по-прежнему выглядят очень знакомо, но это то, что Microsoft хотела бы вас Делай сейчас.

Внимание: Вам всегда понадобится установить Excel на ПК, на котором запущен скрипт! Если вы хотите этого избежать, возможно, посмотрите на что-то вроде Aspose, чтобы сделать что-то без установленного Office ...

+0

@Mnimonic, код выше работает отлично, но мне нужно скопировать больше столбцов (A, B, C, D , E, F, I) в лист адресата. Если я попытаюсь скопировать 3 столбца или более im получить ошибку: 800A03EC – AzMar

Смежные вопросы