Я хочу реализовать свой код VBA в своем SAS-коде, чтобы я мог выполнить весь процесс за один проход. Мой код SAS считывает большую таблицу SAS, выполняет некоторые преобразования и, наконец, экспортирует в файл Excel (код ниже). Я также написал некоторый код VBA в файле Excel (например, AutoFiltering для некоторых переменных, вы можете увидеть код ниже).Написание кода vba в sas
таблица выглядит следующим образом:
A B C Var1 Var2 Var3
--------------------
1 1 1 10 15 20
1 1 2 15 20 30
1 2 1 20 30 40
1 2 2 30 40 50
2 1 1 40 50 60
2 1 2 50 60 70
2 2 1 60 70 80
..............
..............
Однако я хочу реализовать свой VBA код в моем SAS-кода, так что я могу сделать весь процесс один проход. Я знаю, как открыть и запустить файл Excel в SAS (код ниже), но я не знаю, как реализовать код VBA в моей SAS.
Если вы задаетесь вопросом, почему я хочу реализовать свой макрокод в своей SAS, я буду работать с подобными SAS-таблицами много раз в будущем, поэтому было бы более целесообразным хранить весь код в одном месте.
Я только что понял, что я не могу экспортировать таблицу в SAS в формате Excel с поддержкой макросов, XLSM. Думаю, это тоже вызов. Кроме того, не так просто сохранить макрокод из файла Excel, потому что он должен быть сохранен в меню «Добавить». Поэтому было бы намного лучше обрабатывать весь процесс в одном месте, например, внутри редактора SAS.
Код в SAS, который экспортирует финальный стол в файл Excel:
PROC EXPORT DATA=File1
OUTFILE= "&server\&env\test1.xlsx"
DBMS=EXCEL REPLACE;
SHEET="sheet1";
RUN;
Пример кода VBA в файле Excel для создания автофильтра для переменных в файле Excel:
Sub Macro1()
Dim N As Long, r As Range
With Sheets("sheet1")
N = .Cells(Rows.Count, "B").End(xlUp).Row
ReDim ary(1 To N)
For i = 1 To N
ary(i) = .Cells(i, 1)
Next i
End With
Range("A1:F20").AutoFilter
ActiveSheet.Range("$A$1:$F$20").AutoFilter Field:=1, Criteria1:=ary, Operator:=xlFilterValues
End Sub
Код в SAS для запуска и запуска файла Excel в SAS:
OPTIONS NOXWAIT NOXSYNC;
DATA _NULL_;
RC=SYSTEM('START EXCEL');
RC=SLEEP(0.5);
RUN;
FILENAME CMDS DDE 'EXCEL|SYSTEM';
DATA _NULL_;
FILE CMDS;
PUT "[OPEN(""&server\&env\test1.XLS"")]";
PUT '[RUN("Macro1")]';
PUT '[SAVE.AS("&server\&env\FORMATTED_FILE.XLSM")';
PUT "[QUIT()]";
RUN;
QUIT;
Вы говорите, что вы хотите, чтобы иметь возможность создать новый файл Excel с помощью DDE, а затем создать новый макрос VBA в нем программно с помощью SAS ? – Joe
В принципе, да. Я хочу, чтобы мой код SAS прочитал SAS-таблицу, экспортировал результат в файл Excel (если возможно), и мой SAS-код также будет запускать некоторый код VBA, чтобы сделать файл Excel более красивым. , и я хочу, чтобы все эти процессы выполнялись только с одним прогоном только в одном коде ... – user3714330
Является ли макросом excel, который вы используете, всегда одинаково? Будет ли использоваться метод с использованием шаблона excel? Я думаю, что это стандартный способ сделать это; вы сохраняете макрос excel в рабочей книге «шаблон», которая является статичной, и выполняйте ее там (при записи в другую книгу или вы можете записать в рабочую книгу шаблонов, а затем СОХРАНИТЬ как другое название книги). – Joe