Объект ScriptControl (или MSScriptcontrol.ScriptControl) позволяет использовать скриптовые языки, такие как VBScript и JScript (расширение языка ECMAScript, во многом схож с JavaScript).
Данный объект имеет следующие свойства / ScriptControl Properties:
AllowUI - Если установлено в True, программа может получать доступ к элементам пользовательского интерфейса таким, как MsgBox. (Type:=Bollean, Mode:=Read/Write, Default:=True)
CodeObject - Возвращает набор объектов, которые были добавленные в пространство имен с помощью метода AddObject. (Type:=Object, Mode:=Read, Default:=Nothing)
Error - Возвращает объект ошибки, содержащий информацию об ошибке в скрипте. По умолчанию свойства объекта ошибки не содержат информации. (Type:=Object, Mode:=Read, Default:=Standard_Error_Object)
Clear() - Метод. Очищает объект ошибки.
Column - Свойство. Содержит номер столбца кода числа, где произошла ошибка. (Type:=Long, Mode:=Read, Default:=0)
Description - Свойство. Описание ошибки. (Type:=String, Mode:=Read, Default:="")
HelpContext - Свойство. Ссылка на файл справки с описанием ошибки. (Type:=Long, Mode:=Read, Default:=0)
Line - Свойство. Номер строки исходного кода, где произошла ошибка. (Type:=Long, Mode:=Read, Default:=0)
Number - Свойство. Номер ошибки. (Type:=Long, Mode:=Read, Default:=0)
Source - Свойство. Описывает общий тип ошибки. (Type:=String, Mode:=Read, Default:="")
Text - Свойство. Cодержит строку исходного кода, где произошла ошибка. (Type:=String, Mode:=Read, Default:="")
Language - Возвращает/задает язык, интерпретатор которого будет реализовывать компонент. В стандартной поставке доступны VBScript и JScript, однако, если в системе установлены расширения Windows Script Host, возможно использование других языков, таких как Perl или Rexx. (Type:=String, Mode:=Read/Write, Default:="")
Modules - Содержит коллекцию объектов модулей. (Type:=Object, Mode:=Read, Default:=Standard_Modules_Object)
Item(Index) - Свойство по умолчанию. Возвращает модуль по индексу. (Index:=Number/String)
AddCode(Code) - Метод. См. описание.
CodeObject - Свойство. См. описание.
Eval(Code) - Метод. См. описание.
ExecuteStatement(Code) - Метод. См. описание.
Name - Свойство. Имя модуля. (Type:=String, Mode:=Read)
Procedures - Свойство. См. описание.
Run(Function_Name[, Arguments]) - Метод. См. описание.
Count - Свойство. Возвращает количество добавленных модулей. По умолчанию 1 ("Global"). (Type:=Long, Mode:=Read, Default:=1)
Procedures - Содержит коллекцию объектов процедур. Описание объекта процедур см. ниже. (Type:=Object, Mode:=Read, Default:=Standard_Procedures_Object)
Item(Index) - Свойство по умолчанию. Возвращает модуль по индексу. (Index:=Number/String)
HasReturnValue - Свойство. Возвращает True, если функция возвращает значение. (Type:=Bollean, Mode:=Read)
Name - Свойство. Имя процедуры. (Type:=String, Mode:=Read)
NumArgs - Свойство. Возвращает количество обязательных аргументов функции/процедуры. (Type:=Long, Mode:=Read)
Count - Свойство. Возвращает количество добавленных модулей. (Type:=Long, Mode:=Read, Default:=0)
SitehWnd - Содержит "ссылку" на дескриптор окна программы, которое будет использовано для отображения графического интерфейса пользователя (GUI). (Type:=Long, Mode:=Read, Default:=0)
State - Определяет, как будут обрабатываться события объектов, добавленные с помощью метода AddObject. (Type:=Long, Mode:=Read/Write, Default:=0)
Timeout - Максимальное количество миллисекунд, после которого будет сгенерирована ошибка. Значение –1 позволяет отключить ошибки, связанные с истечением отведенного времени (timeout), что позволит скрипту исполняться неограниченное время. (Type:=Long, Mode:=Read/Write, Default:=10000)
UseSafeSubset - При установке этого свойства в True компонент может выполнять ограниченный набор действий, заданный текущими установками безопасности в системе. Это свойство полезно, если планируется запуск скриптов, полученных, например, через Интернет. (Type:=Bollean, Mode:=Read/Write, Default:=False)
Методы / ScriptControl Methods:
AddCode(Code) - Добавляет код к списку процедур компонента. В дальнейшем эти процедуры могут быть вызваны при помощи метода Run либо из других процедур скрипта. Не обязательно добавлять только функции или процедуры, это может быть любой валидный код. (Code:=String)
AddObject(Name, Object[, Basic]) - Добавляет объект к пространству имен, который будет доступен в коде скрипта. Имя объекта задает параметр Name. Объект может быть объявлен как основной, путем установки третьего необязательного параметра Basic в True. В JScript, например, он будет доступен как this, если добавлено несколько объектов. Можно оперировать любыми объектами, будь то UserForm, Application или что-то еще. (Name:=String, Object:=Object, Basic:=Boolean)
Eval(Code) - Выполняет код, заданный параметром Code, и возвращает результат исполнения. Позволяет выполнить код без добавления его к списку процедур компонента. (Code:=String)
ExecuteStatement(Code) - Выполняет одну инструкцию. В отличие от метода Run не позволяет передавать аргументы. (Code:=String)
Reset() - Сбрасывает компонент в начальное состояние, удаляя все добавленные ранее объекты и код.
Run(Function_Name[, Arguments]) - Выполняет именованную функцию/процедуру из числа ранее добавленных при помощи метода AddCode и возвращает результат. (Function_Name:=String, Arguments:=Variant)
тема в процессе наполнения....
Предисловие
Объект ScriptControl (или MSScriptcontrol.ScriptControl) позволяет использовать скриптовые языки, такие как VBScript и JScript (расширение языка ECMAScript, во многом схож с JavaScript).
Данный объект имеет следующие свойства / ScriptControl Properties:
AllowUI - Если установлено в True, программа может получать доступ к элементам пользовательского интерфейса таким, как MsgBox. (Type:=Bollean, Mode:=Read/Write, Default:=True)
CodeObject - Возвращает набор объектов, которые были добавленные в пространство имен с помощью метода AddObject. (Type:=Object, Mode:=Read, Default:=Nothing)
Error - Возвращает объект ошибки, содержащий информацию об ошибке в скрипте. По умолчанию свойства объекта ошибки не содержат информации. (Type:=Object, Mode:=Read, Default:=Standard_Error_Object)
Clear() - Метод. Очищает объект ошибки.
Column - Свойство. Содержит номер столбца кода числа, где произошла ошибка. (Type:=Long, Mode:=Read, Default:=0)
Description - Свойство. Описание ошибки. (Type:=String, Mode:=Read, Default:="")
HelpContext - Свойство. Ссылка на файл справки с описанием ошибки. (Type:=Long, Mode:=Read, Default:=0)
Line - Свойство. Номер строки исходного кода, где произошла ошибка. (Type:=Long, Mode:=Read, Default:=0)
Number - Свойство. Номер ошибки. (Type:=Long, Mode:=Read, Default:=0)
Source - Свойство. Описывает общий тип ошибки. (Type:=String, Mode:=Read, Default:="")
Text - Свойство. Cодержит строку исходного кода, где произошла ошибка. (Type:=String, Mode:=Read, Default:="")
Language - Возвращает/задает язык, интерпретатор которого будет реализовывать компонент. В стандартной поставке доступны VBScript и JScript, однако, если в системе установлены расширения Windows Script Host, возможно использование других языков, таких как Perl или Rexx. (Type:=String, Mode:=Read/Write, Default:="")
Modules - Содержит коллекцию объектов модулей. (Type:=Object, Mode:=Read, Default:=Standard_Modules_Object)
Item(Index) - Свойство по умолчанию. Возвращает модуль по индексу. (Index:=Number/String)
AddCode(Code) - Метод. См. описание.
CodeObject - Свойство. См. описание.
Eval(Code) - Метод. См. описание.
ExecuteStatement(Code) - Метод. См. описание.
Name - Свойство. Имя модуля. (Type:=String, Mode:=Read)
Procedures - Свойство. См. описание.
Run(Function_Name[, Arguments]) - Метод. См. описание.
Count - Свойство. Возвращает количество добавленных модулей. По умолчанию 1 ("Global"). (Type:=Long, Mode:=Read, Default:=1)
Procedures - Содержит коллекцию объектов процедур. Описание объекта процедур см. ниже. (Type:=Object, Mode:=Read, Default:=Standard_Procedures_Object)
Item(Index) - Свойство по умолчанию. Возвращает модуль по индексу. (Index:=Number/String)
HasReturnValue - Свойство. Возвращает True, если функция возвращает значение. (Type:=Bollean, Mode:=Read)
Name - Свойство. Имя процедуры. (Type:=String, Mode:=Read)
NumArgs - Свойство. Возвращает количество обязательных аргументов функции/процедуры. (Type:=Long, Mode:=Read)
Count - Свойство. Возвращает количество добавленных модулей. (Type:=Long, Mode:=Read, Default:=0)
SitehWnd - Содержит "ссылку" на дескриптор окна программы, которое будет использовано для отображения графического интерфейса пользователя (GUI). (Type:=Long, Mode:=Read, Default:=0)
State - Определяет, как будут обрабатываться события объектов, добавленные с помощью метода AddObject. (Type:=Long, Mode:=Read/Write, Default:=0)
Timeout - Максимальное количество миллисекунд, после которого будет сгенерирована ошибка. Значение –1 позволяет отключить ошибки, связанные с истечением отведенного времени (timeout), что позволит скрипту исполняться неограниченное время. (Type:=Long, Mode:=Read/Write, Default:=10000)
UseSafeSubset - При установке этого свойства в True компонент может выполнять ограниченный набор действий, заданный текущими установками безопасности в системе. Это свойство полезно, если планируется запуск скриптов, полученных, например, через Интернет. (Type:=Bollean, Mode:=Read/Write, Default:=False)
Методы / ScriptControl Methods:
AddCode(Code) - Добавляет код к списку процедур компонента. В дальнейшем эти процедуры могут быть вызваны при помощи метода Run либо из других процедур скрипта. Не обязательно добавлять только функции или процедуры, это может быть любой валидный код. (Code:=String)
AddObject(Name, Object[, Basic]) - Добавляет объект к пространству имен, который будет доступен в коде скрипта. Имя объекта задает параметр Name. Объект может быть объявлен как основной, путем установки третьего необязательного параметра Basic в True. В JScript, например, он будет доступен как this, если добавлено несколько объектов. Можно оперировать любыми объектами, будь то UserForm, Application или что-то еще. (Name:=String, Object:=Object, Basic:=Boolean)
Eval(Code) - Выполняет код, заданный параметром Code, и возвращает результат исполнения. Позволяет выполнить код без добавления его к списку процедур компонента. (Code:=String)
ExecuteStatement(Code) - Выполняет одну инструкцию. В отличие от метода Run не позволяет передавать аргументы. (Code:=String)
Reset() - Сбрасывает компонент в начальное состояние, удаляя все добавленные ранее объекты и код.
Run(Function_Name[, Arguments]) - Выполняет именованную функцию/процедуру из числа ранее добавленных при помощи метода AddCode и возвращает результат. (Function_Name:=String, Arguments:=Variant)
Привет, Сань! Глянул твой пост в интересных решениях - интересно, но не понятно. Так что к наполнению пожелание - побольше комментариев (особенно за пределами VBA).
Привет, Сань! Глянул твой пост в интересных решениях - интересно, но не понятно. Так что к наполнению пожелание - побольше комментариев (особенно за пределами VBA).RAN
Хорошая тема, с удовольствием поучаствую. Открыл ее для себя год назад, очень оценил, не преминул поделиться с тогдашними коллегами по цеху: http://axforum.info/forums/showthread.php?t=39599 (там же несколько полезных ссылок).
Пока использую только в части VBScript. Не знаю, насколько тема актуальна для задач в самом Excel, где и так Basic, но для учетных систем, экспортирующих / импортирующих данные в / из Excel весьма удобно, особенно когда нежелательно использование макросов в книге Excel. Сейчас успешно применяю фрагменты на VBScript при программировании на ABAP для SAP ( http://www.sapboard.ru/forum....p440047 )
Исторически этот ActiveX очень любят 1С-ники.
Хорошая тема, с удовольствием поучаствую. Открыл ее для себя год назад, очень оценил, не преминул поделиться с тогдашними коллегами по цеху: http://axforum.info/forums/showthread.php?t=39599 (там же несколько полезных ссылок).
Пока использую только в части VBScript. Не знаю, насколько тема актуальна для задач в самом Excel, где и так Basic, но для учетных систем, экспортирующих / импортирующих данные в / из Excel весьма удобно, особенно когда нежелательно использование макросов в книге Excel. Сейчас успешно применяю фрагменты на VBScript при программировании на ABAP для SAP ( http://www.sapboard.ru/forum....p440047 )
Исторически этот ActiveX очень любят 1С-ники.Gustav
Gustav, посмотрел код по первой ссылке. Неужели Eval в цикле это быстро? Я еще пока не успел написать про методы этого объекта, но забегая вперед, скажу, что есть у него такой замечательный метод как Run, который позволяет запускать процедуры/функции и передавать параметры. Также он возвращает значения.
Quote (Gustav)
Пока использую только в части VBScript. Не знаю, насколько тема актуальна для задач в самом Excel, где и так Basic, но для учетных систем, экспортирующих / импортирующих данные в / из Excel весьма удобно, особенно когда нежелательно использование макросов в книге Excel
Планирую его использовать не только в части VBScript, но и JScript (aka JavaScript). Пример можно посмотреть здесь.
p.s.: установите глобальный объект - Application (см. мой пример по ссылке) и рулите приложением прямо из VBScript.
RAN, хорошо, попробую.
Gustav, посмотрел код по первой ссылке. Неужели Eval в цикле это быстро? Я еще пока не успел написать про методы этого объекта, но забегая вперед, скажу, что есть у него такой замечательный метод как Run, который позволяет запускать процедуры/функции и передавать параметры. Также он возвращает значения.
Quote (Gustav)
Пока использую только в части VBScript. Не знаю, насколько тема актуальна для задач в самом Excel, где и так Basic, но для учетных систем, экспортирующих / импортирующих данные в / из Excel весьма удобно, особенно когда нежелательно использование макросов в книге Excel
Планирую его использовать не только в части VBScript, но и JScript (aka JavaScript). Пример можно посмотреть здесь.
p.s.: установите глобальный объект - Application (см. мой пример по ссылке) и рулите приложением прямо из VBScript.nerv
Чебурашка стал символом олимпийских игр. А чего достиг ты? Тишина - самый громкий звук
В Аксапте это было вполне прилично по скорости. Мне же нужно было прочитать значения вариантного массива (которые Аксапта не поддерживает). А оборачивать чтение одного элемента в функцию и звать ее через Run, вроде как, посчитал перебором в той ситуации. С другой стороны, этот подход совершенно не покатил в SAPе, где приходится минимизировать количество OLE-вызовов (иначе - невероятно медленно). Поэтому для SAPа я формирую гигантскую строку на стороне ScriptControl и потом одной операцией перебрасываю ее в SAP.
Quote (nerv)
Я еще пока не успел написать про методы этого объекта, но забегая вперед, скажу, что есть у него такой замечательный метод как Run, который позволяет запускать процедуры/функции и передавать параметры.
Есть такой метод, он у меня упомянут во второй ссылке А еще мне очень нравится AddObject, позволяющий использовать одну переменную объекта и в вызывающей программе, и в коде ScriptControl. Такой мостик между пространствами. P.S. Да-да, он у Вас в примере как раз и используется. С удовольствием понаблюдаю за другими примерами на JS, хочется чего-нить этакого, недоступного для VB, ну или более эффектного.
Quote (nerv)
Неужели Eval в цикле это быстро?
В Аксапте это было вполне прилично по скорости. Мне же нужно было прочитать значения вариантного массива (которые Аксапта не поддерживает). А оборачивать чтение одного элемента в функцию и звать ее через Run, вроде как, посчитал перебором в той ситуации. С другой стороны, этот подход совершенно не покатил в SAPе, где приходится минимизировать количество OLE-вызовов (иначе - невероятно медленно). Поэтому для SAPа я формирую гигантскую строку на стороне ScriptControl и потом одной операцией перебрасываю ее в SAP.
Quote (nerv)
Я еще пока не успел написать про методы этого объекта, но забегая вперед, скажу, что есть у него такой замечательный метод как Run, который позволяет запускать процедуры/функции и передавать параметры.
Есть такой метод, он у меня упомянут во второй ссылке А еще мне очень нравится AddObject, позволяющий использовать одну переменную объекта и в вызывающей программе, и в коде ScriptControl. Такой мостик между пространствами. P.S. Да-да, он у Вас в примере как раз и используется. С удовольствием понаблюдаю за другими примерами на JS, хочется чего-нить этакого, недоступного для VB, ну или более эффектного.Gustav
Робяты, БРЕК! Тема задумана интересная, но не надо ее портить! Давайте иходить из того, что эта тема - учебник, автор "nerv "! Соавторы приветствуются! А дальше видно будет.. Gustav, "девки, где вы - тута, тута", а твоя "Марфута упала с парашюта"!
Робяты, БРЕК! Тема задумана интересная, но не надо ее портить! Давайте иходить из того, что эта тема - учебник, автор "nerv "! Соавторы приветствуются! А дальше видно будет.. Gustav, "девки, где вы - тута, тута", а твоя "Марфута упала с парашюта"! RAN
Давайте иходить из того, что эта тема - учебник, автор "nerv "
Не, я просто перевожу инфу в меру своей испорченности с оф. сайта + еще кое-что добавляю. Если кто-то располагает большей информацией, пожалуйста, добавлю. Найдете ошибки - исправим.
Чтобы немножко интереса добавить к теме: этот код позволяет определить количество измерений массива [vba]
Code
Sub test() Dim x(1 To 1, 1 To 2, 1 To 3) Dim y(1 To 1, 1 To 2) Dim z(10)
MsgBox getDimentionsOfArray(x) MsgBox getDimentionsOfArray(y) MsgBox getDimentionsOfArray(z) End Sub
Function getDimentionsOfArray(ByRef arr As Variant) As Byte With CreateObject("ScriptControl") .Language = "JScript" .AddCode "function foo(arr) {return new VBArray(arr).dimensions();}" getDimentionsOfArray = .Run("foo", arr) End With End Function
[/vba]
Quote (RAN)
Робяты, БРЕК!
мы ничего такого не делали, чтобы ты брейк кричал
Quote (RAN)
Давайте иходить из того, что эта тема - учебник, автор "nerv "
Не, я просто перевожу инфу в меру своей испорченности с оф. сайта + еще кое-что добавляю. Если кто-то располагает большей информацией, пожалуйста, добавлю. Найдете ошибки - исправим.
Чтобы немножко интереса добавить к теме: этот код позволяет определить количество измерений массива [vba]
Code
Sub test() Dim x(1 To 1, 1 To 2, 1 To 3) Dim y(1 To 1, 1 To 2) Dim z(10)
MsgBox getDimentionsOfArray(x) MsgBox getDimentionsOfArray(y) MsgBox getDimentionsOfArray(z) End Sub
Function getDimentionsOfArray(ByRef arr As Variant) As Byte With CreateObject("ScriptControl") .Language = "JScript" .AddCode "function foo(arr) {return new VBArray(arr).dimensions();}" getDimentionsOfArray = .Run("foo", arr) End With End Function
Помню, меня Сергей (KukLP) спрашивал: "Чего такого можно на javascript делать, чтобы он был полезен?" (ну или как-то так)
Например, можно создавать объекты любой вложенности прямо в коде:
[vba]
Code
Sub io() ' создали объект Set x = NewObject("forum: { KukLP: 'Sergei', AlexST: 'Alexei', RAN: 'Andrey' }")
' изменили его свойство x.forum.KukLP = "Сергей" End Sub
Function NewObject(ByRef description As String) As Object With CreateObject("ScriptControl") .Language = "jscript" .Addcode "function x(){return {" & description & "};}" Set NewObject = .Run("x") End With End Function
[/vba]
Помню, меня Сергей (KukLP) спрашивал: "Чего такого можно на javascript делать, чтобы он был полезен?" (ну или как-то так)
Например, можно создавать объекты любой вложенности прямо в коде:
[vba]
Code
Sub io() ' создали объект Set x = NewObject("forum: { KukLP: 'Sergei', AlexST: 'Alexei', RAN: 'Andrey' }")
' изменили его свойство x.forum.KukLP = "Сергей" End Sub
Function NewObject(ByRef description As String) As Object With CreateObject("ScriptControl") .Language = "jscript" .Addcode "function x(){return {" & description & "};}" Set NewObject = .Run("x") End With End Function
Sub io() Dim x As Object ' создать объект - {} ' созздать объект со свойством prop - { prop: 1 }
' создать пустой объект со свойством forum, которое тоже явзяется объектом Set x = NewObject("forum: {}")
' добавить к объеку forum свойство-объект moderators Set x = NewObject("forum.moderators = { Hugo: '', Саня: '' }", x)
' добавить к объеку forum свойство-объект users Set x = NewObject("forum.users = { 1: '', 2: '' }", x)
' удалить модераторов : ) Set x = NewObject("delete forum.moderators", x) End Sub
Function NewObject(ByRef code As String, _ Optional ByRef this As Object) As Object With CreateObject("ScriptControl") .Language = "jscript" If this Is Nothing Then .AddCode "function x(){return {" & code & "};}" Else .AddObject "_", this, True .AddCode "function x(){" & code & ";return this;}" End If Set NewObject = .Run("x") End With End Function
[/vba]
еще пример
[vba]
Code
Sub io() Dim x As Object ' создать объект - {} ' созздать объект со свойством prop - { prop: 1 }
' создать пустой объект со свойством forum, которое тоже явзяется объектом Set x = NewObject("forum: {}")
' добавить к объеку forum свойство-объект moderators Set x = NewObject("forum.moderators = { Hugo: '', Саня: '' }", x)
' добавить к объеку forum свойство-объект users Set x = NewObject("forum.users = { 1: '', 2: '' }", x)
' удалить модераторов : ) Set x = NewObject("delete forum.moderators", x) End Sub
Function NewObject(ByRef code As String, _ Optional ByRef this As Object) As Object With CreateObject("ScriptControl") .Language = "jscript" If this Is Nothing Then .AddCode "function x(){return {" & code & "};}" Else .AddObject "_", this, True .AddCode "function x(){" & code & ";return this;}" End If Set NewObject = .Run("x") End With End Function
Сань, так как я ни того, ни другого не знаю, а научиться хочется :), то давай уже определись - что именно? насколько я понял из вики, это не совсем одно и то же. в чём разница - х.з. (хотелось бы знать)
Quote (nerv)
JScript (aka JavaScript)
Сань, так как я ни того, ни другого не знаю, а научиться хочется :), то давай уже определись - что именно? насколько я понял из вики, это не совсем одно и то же. в чём разница - х.з. (хотелось бы знать)ikki
помощь по Excel и VBA ikki@fxmail.ru, icq 592842413, skype alex.ikki
На сколько я понял, разница в синтаксисе и интерпретации кода, но она больше касается работы в браузерах (особенно IE, который рассматривает код, как JScript), а не использованию в роле ActiveX-компонента, как в этом примере. Оба разрабатывались из одного стандарта ECMAScript и JScript поддерживает весь тот функционал, который имеет и JavaScript. Интересно, влияют ли различия в названиях некоторых методов этих языков, при практическом использовании в VBA.
На сколько я понял, разница в синтаксисе и интерпретации кода, но она больше касается работы в браузерах (особенно IE, который рассматривает код, как JScript), а не использованию в роле ActiveX-компонента, как в этом примере. Оба разрабатывались из одного стандарта ECMAScript и JScript поддерживает весь тот функционал, который имеет и JavaScript. Интересно, влияют ли различия в названиях некоторых методов этих языков, при практическом использовании в VBA.Dragokas
JavaScript как и JScript являются диалектами ECMAScript. Последний разработан компанией Microsoft и используется ей в своих приложениях. Грубо говоря, если JavaScript - это обычная собака, то JScript - собака с пятью лапами (ну, или двумя хвостами, как хотите). Снятые некоторые ограничения безопасности, добавлено несколько "новых" объектов (тот же ActiveXObject).
Quote (Dragokas)
Интересно, влияют ли различия в названиях некоторых методов этих языков, при практическом использовании в VBA.
не понял, что имелось ввиду
JavaScript как и JScript являются диалектами ECMAScript. Последний разработан компанией Microsoft и используется ей в своих приложениях. Грубо говоря, если JavaScript - это обычная собака, то JScript - собака с пятью лапами (ну, или двумя хвостами, как хотите). Снятые некоторые ограничения безопасности, добавлено несколько "новых" объектов (тот же ActiveXObject).
Quote (Dragokas)
Интересно, влияют ли различия в названиях некоторых методов этих языков, при практическом использовании в VBA.