Гость
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Помогите, плиз, переколбасить VBA макрос в VBS скрипт / 15 сообщений из 15, страница 1 из 1
17.05.2012, 12:18
    #37798588
rus_sun
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите, плиз, переколбасить VBA макрос в VBS скрипт
Времени вникать в тонкости синтаксиса 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
17.05.2012, 12:28
    #37798608
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите, плиз, переколбасить VBA макрос в VBS скрипт
Ну начнем с того, что данный макрос работает с активной книгой, а VBS откуда должен узнать, с какой книгой ему работать? Или он должен подключиться к экселю и работать там с активной книгой?
...
Рейтинг: 0 / 0
17.05.2012, 12:39
    #37798641
rus_sun
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите, плиз, переколбасить VBA макрос в VBS скрипт
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
17.05.2012, 12:51
    #37798682
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите, плиз, переколбасить VBA макрос в VBS скрипт
1) VBS не понимает With насколько я помню
2) VBS не понимает именованные параметры, надо переписать все вызовы под простое перечисление
3) Надо избавиться от Active 12381775

после этого можно переносить в VBS
...
Рейтинг: 0 / 0
17.05.2012, 13:00
    #37798716
rus_sun
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите, плиз, переколбасить VBA макрос в VBS скрипт
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
17.05.2012, 13:18
    #37798775
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите, плиз, переколбасить VBA макрос в VBS скрипт
rus_sun2) не очень понимаю где там эти именованные параметры. Вот так будет верно?надо смотреть перечень параметров в методе, у меня нету метода Create у PivotCaches, видимо более старая версия экселя, не могу посмотреть

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

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

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

на это у меня будет время не раньше завтра
...
Рейтинг: 0 / 0
17.05.2012, 13:37
    #37798859
rus_sun
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите, плиз, переколбасить VBA макрос в VBS скрипт
Shocker.Pro,
большое спасибо, что не отказываетесь. Пока попробую самостоятельно с помощью Вашей статьи.
...
Рейтинг: 0 / 0
17.05.2012, 14:34
    #37799050
rus_sun
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите, плиз, переколбасить VBA макрос в VBS скрипт
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
17.05.2012, 14:54
    #37799101
QValD
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите, плиз, переколбасить VBA макрос в VBS скрипт
rus_sun,

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

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


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