powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Помогите, плиз, переколбасить VBA макрос в VBS скрипт
15 сообщений из 15, страница 1 из 1
Помогите, плиз, переколбасить VBA макрос в VBS скрипт
    #37798588
rus_sun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Времени вникать в тонкости синтаксиса vbs нет, а задание горит, поэтому решил кинуть клич добрым людям. Помогите, пожалуйста, преобразовать вот этот простенький макрос в vbs скрипт. Буду очень признателен.

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
Sub MacroInWeek()
'
' MacroInWeek Macro
' 

'
    Sheets.Add
    ActiveSheet.Name = "SummaryInWeek"
    ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
        "InWeek!R1C1:R830C21", Version:=xlPivotTableVersion12).CreatePivotTable _
        TableDestination:=ActiveSheet.Cells(3, 1), TableName:="PivotTable1", DefaultVersion _
        :=xlPivotTableVersion12
    
    Cells(3, 1).Select
    
    ActiveSheet.PivotTables("PivotTable1").AddDataField ActiveSheet.PivotTables( _
        "PivotTable1").PivotFields("calls2"), "Count of calls2", xlCount
    With ActiveSheet.PivotTables("PivotTable1").PivotFields("год")
        .Orientation = xlPageField
        .Position = 1
    End With
    With ActiveSheet.PivotTables("PivotTable1").PivotFields("месяц")
        .Orientation = xlPageField
        .Position = 1
    End With    
    With ActiveSheet.PivotTables("PivotTable1").PivotFields("пол")
        .Orientation = xlPageField
        .Position = 1
    End With
    With ActiveSheet.PivotTables("PivotTable1").PivotFields("возраст")
        .Orientation = xlPageField
        .Position = 1
    End With   
    
    ActiveSheet.PivotTables("PivotTable1").AddDataField ActiveSheet.PivotTables( _
        "PivotTable1").PivotFields("количество заказов"), _
        "Count of количество заказов", xlCount
    
    
    Range("B22").Select
    ActiveSheet.PivotTables("PivotTable1").PivotFields("город"). _
        AutoSort xlDescending, "Count of calls2", ActiveSheet.PivotTables("PivotTable1" _
        ).PivotColumnAxis.PivotLines(1), 1
        

    
End Sub
...
Рейтинг: 0 / 0
Помогите, плиз, переколбасить VBA макрос в VBS скрипт
    #37798608
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну начнем с того, что данный макрос работает с активной книгой, а VBS откуда должен узнать, с какой книгой ему работать? Или он должен подключиться к экселю и работать там с активной книгой?
...
Рейтинг: 0 / 0
Помогите, плиз, переколбасить VBA макрос в VBS скрипт
    #37798641
rus_sun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,

Если я напишу так, будет правильно?

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
Dim objExcel
Set objExcel = WScript.CreateObject("Excel.Application")
With objExcel
    With .Workbooks.Open("C:\Temp\report.xlsx")
        
        Sheets.Add
    ActiveSheet.Name = "SummaryInWeek"
    ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
        "InWeek!R1C1:R830C21", Version:=xlPivotTableVersion12).CreatePivotTable _
        TableDestination:=ActiveSheet.Cells(3, 1), TableName:="PivotTable1", DefaultVersion _
        :=xlPivotTableVersion12
    
    Cells(3, 1).Select
    
    ActiveSheet.PivotTables("PivotTable1").AddDataField ActiveSheet.PivotTables( _
        "PivotTable1").PivotFields("calls2"), "Count of calls2", xlCount
    With ActiveSheet.PivotTables("PivotTable1").PivotFields("год")
        .Orientation = xlPageField
        .Position = 1
    End With
    With ActiveSheet.PivotTables("PivotTable1").PivotFields("месяц")
        .Orientation = xlPageField
        .Position = 1
    End With    
    With ActiveSheet.PivotTables("PivotTable1").PivotFields("пол")
        .Orientation = xlPageField
        .Position = 1
    End With
    With ActiveSheet.PivotTables("PivotTable1").PivotFields("возраст")
        .Orientation = xlPageField
        .Position = 1
    End With   
    
    ActiveSheet.PivotTables("PivotTable1").AddDataField ActiveSheet.PivotTables( _
        "PivotTable1").PivotFields("количество заказов"), _
        "Count of количество заказов", xlCount
    
    
    Range("B22").Select
    ActiveSheet.PivotTables("PivotTable1").PivotFields("город"). _
        AutoSort xlDescending, "Count of calls2", ActiveSheet.PivotTables("PivotTable1" _
        ).PivotColumnAxis.PivotLines(1), 1
        
        .Save
        .Close
    End With
    
    .Quit
End With

Set objExcel = Nothing

WScript.Quit 0
...
Рейтинг: 0 / 0
Помогите, плиз, переколбасить VBA макрос в VBS скрипт
    #37798682
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1) VBS не понимает With насколько я помню
2) VBS не понимает именованные параметры, надо переписать все вызовы под простое перечисление
3) Надо избавиться от Active 12381775

после этого можно переносить в VBS
...
Рейтинг: 0 / 0
Помогите, плиз, переколбасить VBA макрос в VBS скрипт
    #37798716
rus_sun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,

1) насколько я успел заметить, with компилятор пропускает и в примерах по vbs я его тоже видел http://forum.script-coding.com/viewtopic.php?id=5675.

2) не очень понимаю где там эти именованные параметры. Вот так будет верно?

Код: vbnet
1.
ActiveWorkbook.PivotCaches.Create(xlDatabase, "InWeek!R1C1:R830C21", xlPivotTableVersion12).CreatePivotTable ActiveSheet.Cells(3, 1), "PivotTable1", xlPivotTableVersion12



3) из Вашей статьи я понял, что избавляться от Active хорошо бы, но не обязательно
...
Рейтинг: 0 / 0
Помогите, плиз, переколбасить VBA макрос в VBS скрипт
    #37798775
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rus_sun2) не очень понимаю где там эти именованные параметры. Вот так будет верно?надо смотреть перечень параметров в методе, у меня нету метода Create у PivotCaches, видимо более старая версия экселя, не могу посмотреть

rus_sun3) из Вашей статьи я понял, что избавляться от Active хорошо бы, но не обязательноизбавиться проблемы в вашем коде нет, а вот с VBS использование Active добавить проблем на порядок. В чем проблема добавить одну-две объектных переменных?
...
Рейтинг: 0 / 0
Помогите, плиз, переколбасить VBA макрос в VBS скрипт
    #37798785
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Proизбавиться проблемы в вашем коде нет, а вот с VBS использование Active добавить проблем на порядок. В чем проблема добавить одну-две объектных переменных?Sheets.Add, к примеру, не будет работать вне контекста экселя - все равно нужно указывать путь к конкретной книге. ActiveSheet.PivotTables("PivotTable1").PivotFields("месяц") - тоже, нужно указывать вместо ActiveSheet путь нужному листу, так зачем использовать путь к активному листу, когда лучше сразу писать путь к нужному листу, возвращаемому Sheets.Add, ведь все равно придется переделывать
...
Рейтинг: 0 / 0
Помогите, плиз, переколбасить VBA макрос в VBS скрипт
    #37798817
rus_sun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,

дело в том, что в VBA я такой же профан, как и в VB Script. Макрос я записал с помощью Excel-я не очень вникая, что там к чему. Как задавать перемнные я тоже не очень хорошо знаю. Покажите, пожалуйста, на примере моего кода, как избавиться от Active. Буду Вам очень благодарен за этот пример.
...
Рейтинг: 0 / 0
Помогите, плиз, переколбасить VBA макрос в VBS скрипт
    #37798843
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
примеры есть в моей статье

переписать ваш код будет быстрее, чем объяснять вам основы ООП и объектную модель экселя.

на это у меня будет время не раньше завтра
...
Рейтинг: 0 / 0
Помогите, плиз, переколбасить VBA макрос в VBS скрипт
    #37798859
rus_sun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
большое спасибо, что не отказываетесь. Пока попробую самостоятельно с помощью Вашей статьи.
...
Рейтинг: 0 / 0
Помогите, плиз, переколбасить VBA макрос в VBS скрипт
    #37799050
rus_sun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,

Вот, что у меня получилось

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
Dim objExcel
Set objExcel = WScript.CreateObject("Excel.Application")
Dim thisWorkbook
Set thisWorkbook = objExcel.Workbooks.Open("C:\Documents and Settings\gerchikova\Local Settings\Temp\plavixReport.xlsx")
Dim thisSheet
Set thisSheet = thisWorkbook.Sheets.Add

                thisSheet.Name = "Summury"
                thisWorkbook.PivotCaches.Create(xlDatabase, "InWeek!R1C1:R830C21", xlPivotTableVersion12).CreatePivotTable _
                    thisSheet.Cells(3, 1), "PivotTable1", xlPivotTableVersion12

                Cells(3, 1).Select
               
                thisSheet.PivotTables("PivotTable1").AddDataField thisSheet.PivotTables( _
                    "PivotTable1").PivotFields("calls2"), "Count of calls2", xlCount
                With thisSheet.PivotTables("PivotTable1").PivotFields("год")
                    .Orientation = xlPageField
                    .Position = 1
                End With
                With thisSheet.PivotTables("PivotTable1").PivotFields("месяц")
                    .Orientation = xlPageField
                    .Position = 1
                End With                
                With thisSheet.PivotTables("PivotTable1").PivotFields("пол")
                    .Orientation = xlPageField
                    .Position = 1
                End With
                With thisSheet.PivotTables("PivotTable1").PivotFields("возраст")
                    .Orientation = xlPageField
                    .Position = 1
                End With
                
                Range("B22").Select
                thisSheet.PivotTables("PivotTable1").PivotFields("город по таблице 1"). _
                    AutoSort xlDescending, "Count of calls2", thisSheet.PivotTables("PivotTable1" _
                    ).PivotColumnAxis.PivotLines(1), 1
                  

        thisWorkbook.Save
        thisWorkbook.Close
    
    
    objExcel.Quit


Set objExcel = Nothing

WScript.Quit 0



Компилятор теперь ругается на
Dim thisWorkbook
Код: css
1.
Предполагается наличие окончания инструкции
...
Рейтинг: 0 / 0
Помогите, плиз, переколбасить VBA макрос в VBS скрипт
    #37799101
QValD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rus_sun,

Dim thisWorkbook as Object
...
Рейтинг: 0 / 0
Помогите, плиз, переколбасить VBA макрос в VBS скрипт
    #37799105
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
у меня не ругается.
встает на 4-й строке, потому что у меня файла такого нет
...
Рейтинг: 0 / 0
Помогите, плиз, переколбасить VBA макрос в VBS скрипт
    #37799141
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Range("B22").Select
Cells(3, 1).Select

вот это там зачем?
...
Рейтинг: 0 / 0
Помогите, плиз, переколбасить VBA макрос в VBS скрипт
    #37799155
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xlCount - надо заменить на конкретное число. или определить такую переменную
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Помогите, плиз, переколбасить VBA макрос в VBS скрипт
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]