Страницы: 1
RSS
VBS на выполнение макроса
 
Добрый день.
Возникла потребность создать VBS файл.
Данныйц фал должен открывать одну книгу, затирить в ней данные в диапазоне [A2:Hn], затем открывать другой файл копировать данные в таком же диапазоне и заливать в первую книгу.
Затем выполнить 2 макроса.
Из VBS знаю только как открыть файл игнорируя ошибок и сохранить его. Подскажите каким способом это можно реализовать.

Код
Set ExcelApp = CreateObject("Excel.Application")
ExcelApp.Visible = false
ExcelApp.displayalerts = false
ExcelApp.Workbooks.Open "Путь к файлу"
ExcelApp.ActiveWorkbook.refreshall
ExcelApp.ActiveWorkbook.Save
ExcelApp.Workbooks.Close
Set ExcelAp = Nothing
 
eremeev23rus, здравия. Можно в ВБА написать этот макрос, отладить и после перенести в ВБС.

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
JayBhagavan, Спасибо, а данный макрос необходимо преобразовывать?
 
eremeev23rus, а Вы попробуйте его так в ВБА запустить и узнаете. :)

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
JayBhagavan,
Код
Set ExcelApp = CreateObject("Excel.Application")
ExcelApp.Visible = false
ExcelApp.displayalerts = false
ExcelApp.Workbooks.Open "K:\Исходник.xls"

iLastRow = Sheets("Консолидации общий").Cells(Rows.Count, 8).End(xlUp).Row
For i = 2 To iLastRow - 1
    a = LCase(Sheets("Консолидации общий").Cells(i, 1).Value)
    b = LCase(Sheets("Консолидации общий").Cells(i, 2).Value)
    c = LCase(Sheets("Консолидации общий").Cells(i, 3).Value)
    d = LCase(Sheets("Консолидации общий").Cells(i, 4).Value)
    e = LCase(Sheets("Консолидации общий").Cells(i, 5).Value)
    f = LCase(Sheets("Консолидации общий").Cells(i, 6).Value)
    g = LCase(Sheets("Консолидации общий").Cells(i, 7).Value)
    h = LCase(Sheets("Консолидации общий").Cells(i, 8).Value)
    For j = i + 1 To iLastRow
        a1 = LCase(Sheets("Консолидации общий").Cells(j, 1).Value)
        b1 = LCase(Sheets("Консолидации общий").Cells(j, 2).Value)
        c1 = LCase(Sheets("Консолидации общий").Cells(j, 3).Value)
        d1 = LCase(Sheets("Консолидации общий").Cells(j, 4).Value)
        e1 = LCase(Sheets("Консолидации общий").Cells(j, 5).Value)
        f1 = LCase(Sheets("Консолидации общий").Cells(j, 6).Value)
        g1 = LCase(Sheets("Консолидации общий").Cells(j, 7).Value)
        h1 = LCase(Sheets("Консолидации общий").Cells(j, 8).Value)
    If a = e1 And b = f1 And c = g1 And d = h1 And e = a1 And f = b1 And g = c1 And h = d1 Then
    Cells(j, 1) = a
    Cells(j, 2) = b
    Cells(j, 3) = c
    Cells(j, 4) = d
    Cells(j, 5) = e
    Cells(j, 6) = f
    Cells(j, 7) = g
    Cells(j, 8) = h
    End If
    Next j
Next i

ExcelApp.ActiveWorkbook.Save
ExcelApp.Workbooks.Close
Set ExcelAp = Nothing


Подскажите, пожалуйста, что не так я сформировал?
 
eremeev23rus, что не так я сходу не скажу. (у меня нет Вашего файла, с которым работает макрос) А что Вас не устраивает или на чём ошибка возникает, если она есть?
ПС Чтобы сократить текст кода используйте конструкцию With ... End With для Sheets("Консолидации общий"). И сравнение можно упростить, например:
1) через массивы, чтобы не создавать для каждой яч. переменную (это же брррррррр)
2) или формировать две строки с разделителем через Join и их сравнивать
Всё вышесказанное - имхо, которое может быть ошибочным, но это я бы попытался реализовать будь у меня такая потребность.

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
JayBhagavan, при выполнении отображается ошибка: Предполагается наличие окончания инструкции, Код: 800A0401, ошибка компиляции.
Я предполагаю, что VBA код я неверно перенес.
 
Нет в ВБС такие понятий как "Sheets" и "Cells" - это объекты книги/листа, поэтому должна быть указана полная ссылка на них.
 
Влад, а можно пример? Для лучшего понимания.
 
Пример:
Код
....
Set wb = ExcelApp.Workbooks.Open("K:\Исходник.xls")
....
iLastRow = wb.Sheets("Консолидации общий").Cells(Rows.Count, 8).End(xlUp).Row
 
Не удается сделать описаным методом. Может можно сделать, чтобы нажималась кнопка на листе в Excel?
 
Rows.Count возможно тоже непонятно для vbs.
Я всегда указывал чьи это rows.
Изменено: Hugo - 15.09.2015 13:38:29
 
Скрытый текст
Изменено: JayBhagavan - 15.09.2015 14:09:42

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
Ну и для vbs первой строкой нужно написать
jjj_vbs
 
Нашёл ещё нестыковку - в vbs нельзя писать
next переменная
 
Цитата
Hugo написал: в vbs нельзя писать next переменная
Исправил.
Цитата
Hugo написал: Ну и для vbs первой строкой нужно написать
jjj_vbs
То есть нужно убрать Sub, () и End Sub?

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
Ещё - xlUp нужно заменить на -4162
 
Цитата
JayBhagavan написал:
То есть нужно убрать Sub, () и End Sub?
Да, или первой строкой вызывать этот sub
 
Hugo, благодарю за Ваши замечая. Вроде все учёл.

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
Страницы: 1
Читают тему
Наверх