Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/The Object is MSScriptcontrol.ScriptControl - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по Excel » The Object is MSScriptcontrol.ScriptControl (Описание и использование объекта ScriptControl)
The Object is MSScriptcontrol.ScriptControl
nerv Дата: Суббота, 25.08.2012, 15:42 | Сообщение № 1
Группа: Редакторы
Ранг: Обитатель
Сообщений: 431
Репутация: 193 ±
Замечаний: 0% ±

Предисловие

Объект 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)
    • HelpFile - Свойство. Имя файла справки, содержащего вспомогательную информацию. (Type:=String, Mode:=Read, Default:="")
    • 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)

    • Add(Name[, Object]) - Метод. Добавляет модуль с заданным именем. (Name:=String, Object:=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)


тема в процессе наполнения....


Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


YM 41001156540584 / WM WMR R21924176233

https://github.com/nervgh/vba


Сообщение отредактировал nerv - Воскресенье, 26.08.2012, 14:13
 
Ответить
СообщениеПредисловие

Объект 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)
    • HelpFile - Свойство. Имя файла справки, содержащего вспомогательную информацию. (Type:=String, Mode:=Read, Default:="")
    • 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)

    • Add(Name[, Object]) - Метод. Добавляет модуль с заданным именем. (Name:=String, Object:=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)


тема в процессе наполнения....

Автор - nerv
Дата добавления - 25.08.2012 в 15:42
RAN Дата: Суббота, 25.08.2012, 16:23 | Сообщение № 2
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Привет, Сань!
Глянул твой пост в интересных решениях - интересно, но не понятно.
Так что к наполнению пожелание - побольше комментариев (особенно за пределами VBA).


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеПривет, Сань!
Глянул твой пост в интересных решениях - интересно, но не понятно.
Так что к наполнению пожелание - побольше комментариев (особенно за пределами VBA).

Автор - RAN
Дата добавления - 25.08.2012 в 16:23
Gustav Дата: Суббота, 25.08.2012, 17:25 | Сообщение № 3
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2706
Репутация: 1123 ±
Замечаний: 0% ±

начинал с Excel 4.0, видел 2.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С-ники.


МОИ: Ник, Tip box: 41001663842605

Сообщение отредактировал Gustav - Суббота, 25.08.2012, 17:47
 
Ответить
СообщениеХорошая тема, с удовольствием поучаствую. Открыл ее для себя год назад, очень оценил, не преминул поделиться с тогдашними коллегами по цеху: 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
Дата добавления - 25.08.2012 в 17:25
nerv Дата: Суббота, 25.08.2012, 18:46 | Сообщение № 4
Группа: Редакторы
Ранг: Обитатель
Сообщений: 431
Репутация: 193 ±
Замечаний: 0% ±

RAN, хорошо, попробую.

Gustav, посмотрел код по первой ссылке. Неужели Eval в цикле это быстро? Я еще пока не успел написать про методы этого объекта, но забегая вперед, скажу, что есть у него такой замечательный метод как Run, который позволяет запускать процедуры/функции и передавать параметры. Также он возвращает значения.

Quote (Gustav)
Пока использую только в части VBScript. Не знаю, насколько тема актуальна для задач в самом Excel, где и так Basic, но для учетных систем, экспортирующих / импортирующих данные в / из Excel весьма удобно, особенно когда нежелательно использование макросов в книге Excel

Планирую его использовать не только в части VBScript, но и JScript (aka JavaScript). Пример можно посмотреть здесь.

p.s.: установите глобальный объект - Application (см. мой пример по ссылке) и рулите приложением прямо из VBScript.


Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


YM 41001156540584 / WM WMR R21924176233

https://github.com/nervgh/vba


Сообщение отредактировал nerv - Суббота, 25.08.2012, 18:58
 
Ответить
СообщениеRAN, хорошо, попробую.

Gustav, посмотрел код по первой ссылке. Неужели Eval в цикле это быстро? Я еще пока не успел написать про методы этого объекта, но забегая вперед, скажу, что есть у него такой замечательный метод как Run, который позволяет запускать процедуры/функции и передавать параметры. Также он возвращает значения.

Quote (Gustav)
Пока использую только в части VBScript. Не знаю, насколько тема актуальна для задач в самом Excel, где и так Basic, но для учетных систем, экспортирующих / импортирующих данные в / из Excel весьма удобно, особенно когда нежелательно использование макросов в книге Excel

Планирую его использовать не только в части VBScript, но и JScript (aka JavaScript). Пример можно посмотреть здесь.

p.s.: установите глобальный объект - Application (см. мой пример по ссылке) и рулите приложением прямо из VBScript.

Автор - nerv
Дата добавления - 25.08.2012 в 18:46
Gustav Дата: Суббота, 25.08.2012, 21:33 | Сообщение № 5
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2706
Репутация: 1123 ±
Замечаний: 0% ±

начинал с Excel 4.0, видел 2.1
Quote (nerv)
Неужели Eval в цикле это быстро?
В Аксапте это было вполне прилично по скорости. Мне же нужно было прочитать значения вариантного массива (которые Аксапта не поддерживает). А оборачивать чтение одного элемента в функцию и звать ее через Run, вроде как, посчитал перебором в той ситуации. С другой стороны, этот подход совершенно не покатил в SAPе, где приходится минимизировать количество OLE-вызовов (иначе - невероятно медленно). Поэтому для SAPа я формирую гигантскую строку на стороне ScriptControl и потом одной операцией перебрасываю ее в SAP.

Quote (nerv)
Я еще пока не успел написать про методы этого объекта, но забегая вперед, скажу, что есть у него такой замечательный метод как Run, который позволяет запускать процедуры/функции и передавать параметры.
Есть такой метод, он у меня упомянут во второй ссылке smile А еще мне очень нравится AddObject, позволяющий использовать одну переменную объекта и в вызывающей программе, и в коде ScriptControl. Такой мостик между пространствами. P.S. Да-да, он у Вас в примере как раз и используется. С удовольствием понаблюдаю за другими примерами на JS, хочется чего-нить этакого, недоступного для VB, ну или более эффектного.


МОИ: Ник, Tip box: 41001663842605

Сообщение отредактировал Gustav - Суббота, 25.08.2012, 21:52
 
Ответить
Сообщение
Quote (nerv)
Неужели Eval в цикле это быстро?
В Аксапте это было вполне прилично по скорости. Мне же нужно было прочитать значения вариантного массива (которые Аксапта не поддерживает). А оборачивать чтение одного элемента в функцию и звать ее через Run, вроде как, посчитал перебором в той ситуации. С другой стороны, этот подход совершенно не покатил в SAPе, где приходится минимизировать количество OLE-вызовов (иначе - невероятно медленно). Поэтому для SAPа я формирую гигантскую строку на стороне ScriptControl и потом одной операцией перебрасываю ее в SAP.

Quote (nerv)
Я еще пока не успел написать про методы этого объекта, но забегая вперед, скажу, что есть у него такой замечательный метод как Run, который позволяет запускать процедуры/функции и передавать параметры.
Есть такой метод, он у меня упомянут во второй ссылке smile А еще мне очень нравится AddObject, позволяющий использовать одну переменную объекта и в вызывающей программе, и в коде ScriptControl. Такой мостик между пространствами. P.S. Да-да, он у Вас в примере как раз и используется. С удовольствием понаблюдаю за другими примерами на JS, хочется чего-нить этакого, недоступного для VB, ну или более эффектного.

Автор - Gustav
Дата добавления - 25.08.2012 в 21:33
RAN Дата: Суббота, 25.08.2012, 21:34 | Сообщение № 6
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Робяты, БРЕК!
Тема задумана интересная, но не надо ее портить! Давайте иходить из того, что эта тема - учебник, автор "nerv "! Соавторы приветствуются! biggrin
А дальше видно будет..
Gustav, "девки, где вы - тута, тута", cool
а твоя "Марфута упала с парашюта"! smile


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеРобяты, БРЕК!
Тема задумана интересная, но не надо ее портить! Давайте иходить из того, что эта тема - учебник, автор "nerv "! Соавторы приветствуются! biggrin
А дальше видно будет..
Gustav, "девки, где вы - тута, тута", cool
а твоя "Марфута упала с парашюта"! smile

Автор - RAN
Дата добавления - 25.08.2012 в 21:34
nerv Дата: Суббота, 25.08.2012, 21:45 | Сообщение № 7
Группа: Редакторы
Ранг: Обитатель
Сообщений: 431
Репутация: 193 ±
Замечаний: 0% ±

Quote (RAN)
Робяты, БРЕК!

мы ничего такого не делали, чтобы ты брейк кричал laugh

Quote (RAN)
Давайте иходить из того, что эта тема - учебник, автор "nerv "

Не, я просто перевожу инфу в меру своей испорченности с оф. сайта + еще кое-что добавляю. Если кто-то располагает большей информацией, пожалуйста, добавлю. Найдете ошибки - исправим. smile

Чтобы немножко интереса добавить к теме: этот код позволяет определить количество измерений массива
[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]


Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


YM 41001156540584 / WM WMR R21924176233

https://github.com/nervgh/vba


Сообщение отредактировал nerv - Суббота, 25.08.2012, 21:53
 
Ответить
Сообщение
Quote (RAN)
Робяты, БРЕК!

мы ничего такого не делали, чтобы ты брейк кричал laugh

Quote (RAN)
Давайте иходить из того, что эта тема - учебник, автор "nerv "

Не, я просто перевожу инфу в меру своей испорченности с оф. сайта + еще кое-что добавляю. Если кто-то располагает большей информацией, пожалуйста, добавлю. Найдете ошибки - исправим. smile

Чтобы немножко интереса добавить к теме: этот код позволяет определить количество измерений массива
[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]

Автор - nerv
Дата добавления - 25.08.2012 в 21:45
nerv Дата: Понедельник, 27.08.2012, 21:30 | Сообщение № 8
Группа: Редакторы
Ранг: Обитатель
Сообщений: 431
Репутация: 193 ±
Замечаний: 0% ±

Ей, какого лешего я не могу редактировать свой первый пост? dry


Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


YM 41001156540584 / WM WMR R21924176233

https://github.com/nervgh/vba
 
Ответить
СообщениеЕй, какого лешего я не могу редактировать свой первый пост? dry

Автор - nerv
Дата добавления - 27.08.2012 в 21:30
nerv Дата: Среда, 29.08.2012, 17:32 | Сообщение № 9
Группа: Редакторы
Ранг: Обитатель
Сообщений: 431
Репутация: 193 ±
Замечаний: 0% ±

Помню, меня Сергей (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]


Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


YM 41001156540584 / WM WMR R21924176233

https://github.com/nervgh/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
[/vba]

Автор - nerv
Дата добавления - 29.08.2012 в 17:32
Hugo Дата: Среда, 29.08.2012, 18:05 | Сообщение № 10
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3250
Репутация: 707 ±
Замечаний: 0% ±

2019
Вообще-то круто...
Нужно привыкнуть и усвоить.
И изучить javascript smile


excel@nxt.ru
webmoney: E265281470651 Z422237915069
 
Ответить
СообщениеВообще-то круто...
Нужно привыкнуть и усвоить.
И изучить javascript smile

Автор - Hugo
Дата добавления - 29.08.2012 в 18:05
nerv Дата: Четверг, 30.08.2012, 01:39 | Сообщение № 11
Группа: Редакторы
Ранг: Обитатель
Сообщений: 431
Репутация: 193 ±
Замечаний: 0% ±

еще пример

[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
[/vba]


Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


YM 41001156540584 / WM WMR R21924176233

https://github.com/nervgh/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
[/vba]

Автор - nerv
Дата добавления - 30.08.2012 в 01:39
nerv Дата: Четверг, 20.09.2012, 23:42 | Сообщение № 12
Группа: Редакторы
Ранг: Обитатель
Сообщений: 431
Репутация: 193 ±
Замечаний: 0% ±

Решил сюда тоже запостить, т.к. пример имеет непосредственное отношение к теме.

Анимация в Excel (да, такое возможно). Любуемся, ставим "лайки" laugh

p.s.: желательно excel на full screen
К сообщению приложен файл: form_moving.xlsm (23.6 Kb)


Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


YM 41001156540584 / WM WMR R21924176233

https://github.com/nervgh/vba


Сообщение отредактировал nerv - Четверг, 20.09.2012, 23:44
 
Ответить
СообщениеРешил сюда тоже запостить, т.к. пример имеет непосредственное отношение к теме.

Анимация в Excel (да, такое возможно). Любуемся, ставим "лайки" laugh

p.s.: желательно excel на full screen

Автор - nerv
Дата добавления - 20.09.2012 в 23:42
ikki Дата: Суббота, 22.09.2012, 18:41 | Сообщение № 13
Группа: Друзья
Ранг: Старожил
Сообщений: 1906
Репутация: 504 ±
Замечаний: 0% ±

Excel 2003, 2010
Quote (nerv)
JScript (aka JavaScript)

Сань, так как я ни того, ни другого не знаю, а научиться хочется :), то давай уже определись - что именно?
насколько я понял из вики, это не совсем одно и то же.
в чём разница - х.з. (хотелось бы знать)


помощь по Excel и VBA
ikki@fxmail.ru, icq 592842413, skype alex.ikki
 
Ответить
Сообщение
Quote (nerv)
JScript (aka JavaScript)

Сань, так как я ни того, ни другого не знаю, а научиться хочется :), то давай уже определись - что именно?
насколько я понял из вики, это не совсем одно и то же.
в чём разница - х.з. (хотелось бы знать)

Автор - ikki
Дата добавления - 22.09.2012 в 18:41
Dragokas Дата: Суббота, 22.09.2012, 23:38 | Сообщение № 14
Группа: Проверенные
Ранг: Новичок
Сообщений: 14
Репутация: 25 ±
Замечаний: 0% ±

2003
На сколько я понял, разница в синтаксисе и интерпретации кода,
но она больше касается работы в браузерах (особенно IE, который рассматривает код, как JScript), а не использованию в роле ActiveX-компонента, как в этом примере.
Оба разрабатывались из одного стандарта ECMAScript и JScript поддерживает весь тот функционал, который имеет и JavaScript.
Интересно, влияют ли различия в названиях некоторых методов этих языков, при практическом использовании в VBA.
 
Ответить
СообщениеНа сколько я понял, разница в синтаксисе и интерпретации кода,
но она больше касается работы в браузерах (особенно IE, который рассматривает код, как JScript), а не использованию в роле ActiveX-компонента, как в этом примере.
Оба разрабатывались из одного стандарта ECMAScript и JScript поддерживает весь тот функционал, который имеет и JavaScript.
Интересно, влияют ли различия в названиях некоторых методов этих языков, при практическом использовании в VBA.

Автор - Dragokas
Дата добавления - 22.09.2012 в 23:38
nerv Дата: Воскресенье, 23.09.2012, 01:03 | Сообщение № 15
Группа: Редакторы
Ранг: Обитатель
Сообщений: 431
Репутация: 193 ±
Замечаний: 0% ±

JavaScript как и JScript являются диалектами ECMAScript. Последний разработан компанией Microsoft и используется ей в своих приложениях. Грубо говоря, если JavaScript - это обычная собака, то JScript - собака с пятью лапами (ну, или двумя хвостами, как хотите). Снятые некоторые ограничения безопасности, добавлено несколько "новых" объектов (тот же ActiveXObject).

Quote (Dragokas)
Интересно, влияют ли различия в названиях некоторых методов этих языков, при практическом использовании в VBA.

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


Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


YM 41001156540584 / WM WMR R21924176233

https://github.com/nervgh/vba
 
Ответить
СообщениеJavaScript как и JScript являются диалектами ECMAScript. Последний разработан компанией Microsoft и используется ей в своих приложениях. Грубо говоря, если JavaScript - это обычная собака, то JScript - собака с пятью лапами (ну, или двумя хвостами, как хотите). Снятые некоторые ограничения безопасности, добавлено несколько "новых" объектов (тот же ActiveXObject).

Quote (Dragokas)
Интересно, влияют ли различия в названиях некоторых методов этих языков, при практическом использовании в VBA.

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

Автор - nerv
Дата добавления - 23.09.2012 в 01:03
Hugo Дата: Воскресенье, 30.09.2012, 22:35 | Сообщение № 16
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3250
Репутация: 707 ±
Замечаний: 0% ±

2019
ИМХО родственная вещь:
Excel-DNA
http://exceldna.codeplex.com/wikipag....le=Home


excel@nxt.ru
webmoney: E265281470651 Z422237915069
 
Ответить
СообщениеИМХО родственная вещь:
Excel-DNA
http://exceldna.codeplex.com/wikipag....le=Home

Автор - Hugo
Дата добавления - 30.09.2012 в 22:35
ikki Дата: Суббота, 06.10.2012, 04:05 | Сообщение № 17
Группа: Друзья
Ранг: Старожил
Сообщений: 1906
Репутация: 504 ±
Замечаний: 0% ±

Excel 2003, 2010
если VBA изучен вдоль и поперек, но его не хватает для полного счастья smile

ещё: http://stackoverflow.com/questio....cel-vba
зачем оно надо: http://news.ycombinator.com/item?id=4090337
о чем речь: http://ru.wikipedia.org/wiki/Python
книги: тынц, тынц-2, тынц-3
курс лекций: от интуита

ну и далее по списку гугла


помощь по Excel и VBA
ikki@fxmail.ru, icq 592842413, skype alex.ikki


Сообщение отредактировал ikki - Суббота, 06.10.2012, 04:21
 
Ответить
Сообщениеесли VBA изучен вдоль и поперек, но его не хватает для полного счастья smile

ещё: http://stackoverflow.com/questio....cel-vba
зачем оно надо: http://news.ycombinator.com/item?id=4090337
о чем речь: http://ru.wikipedia.org/wiki/Python
книги: тынц, тынц-2, тынц-3
курс лекций: от интуита

ну и далее по списку гугла

Автор - ikki
Дата добавления - 06.10.2012 в 04:05
nerv Дата: Суббота, 06.10.2012, 19:02 | Сообщение № 18
Группа: Редакторы
Ранг: Обитатель
Сообщений: 431
Репутация: 193 ±
Замечаний: 0% ±

уже видел это

Quote (ikki)
но его не хватает для полного счастья

эт да. Например, скучно, когда нет свойств у функций

function.property (функций высшего порядка)

но больше всего не хватает прототипного программирования


Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


YM 41001156540584 / WM WMR R21924176233

https://github.com/nervgh/vba


Сообщение отредактировал nerv - Суббота, 06.10.2012, 19:09
 
Ответить
Сообщениеуже видел это

Quote (ikki)
но его не хватает для полного счастья

эт да. Например, скучно, когда нет свойств у функций

function.property (функций высшего порядка)

но больше всего не хватает прототипного программирования

Автор - nerv
Дата добавления - 06.10.2012 в 19:02
Мир MS Excel » Вопросы и решения » Вопросы по Excel » The Object is MSScriptcontrol.ScriptControl (Описание и использование объекта ScriptControl)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!