Visual basic html = vbscript использование объектов


Содержание

Использование VBScript с объектами

Использование объектов

Независимо от того, используете вы элементы ActiveX (ранее они назывались OLE) и Java объекты, Microsoft Visual Basic Scripting Edition и Internet Explorer обрабатывают их одинаково. Если вы используете Internet Explorer с установленным элементом управления Label, вы можете проверить работу следующего кода.

Вы включаете объект, используя тег

Вы можете получить свойства, установить свойства и выполнить методы объекта также как и для любого другого элемента управления формы. В следующем примере, включив в код тег

Событие, связанное с кнопкой cmdChangeIt, изменяет текст элемента Label: Связь элементов управления, находящихся внутри формы и значений полей ввода/вывода выполняется также, как это описано в разделе VBScript и формы.

Несколько элементов ActiveX доступны для использования в Internet Explorer. Вы можете найти полную информацию о свойствах, методах и событиях, а также об идентификаторах классов (CLSID) для элементов управления на сайте Microsoft (http://www.microsoft.com). Вы можете найти больше информации о теге на странице Internet Explorer 4.0 Author’s Guide and HTML Reference.

ПРИМЕЧАНИЕ
Простая реализация Internet Explorer требует наличия фигурных скобок (<>) вокруг атрибутов класса, что не соответствует спецификации W3C. Использование фигурных скобок в текущей реализации генерирует сообщение «This page uses an outdated version of the tag»

Боюсь, что всё вышесказанное, для многих из вас не очень понятно, особенно если вы раньше никогда не использовали тег . В таком случае лучше всё проверить на практике. Однако. Скорее всего у вас (как и у меня), элемент управления Label не установлен, поэтому приведённый здесь пример работать не будет. Чтобы исправить это недоразумение, приведу постой пример использования описанного в этом разделе подхода. Отличие будет заключаться в том, что в качестве объекта в моем примере будет использоваться тег .

Здесь одна кнопка увеличивает размер картинки на 10% при каждом щелчке, а другая кнопка — уменьшает. Ну а всё остальное вам должно быть понятно, если вы читали предыдущие разделы. А ниже вы можете проверить работу этого кода (если ваш браузер — Internet Explorer):

Visual basic html = vbscript использование объектов

Copyright© 1998 Моховой Алексей. wanderfly@chat.ru

Все примеры скриптов действуют только в MSIE 3.0 и выше!

Предисловие.

Я не ошибусь, если назову Бейсик (BASIC — Begginners Allpurpose Symbolic Instruction Code, т.е символический командный универсальный код для начинающего :) самым простым языком программирования. Даже при небольшом опыте, программы можно писать практически не задумываясь. Свою историю этот язык программирования высокого уровня начал в далеком 1963 году. Именно тогда небольшой группой студентов последнего курса Дортмутского колледжа под чутким руководством профессора Дж. Кемени и была разработана самая первая версия этого языка. В то время, помимо Бейсика, широко были распространены также Fortran, Cobol, Algol, PL/1, Focal и Pascal. Из них, до настоящего времени дожили, пожалуй лишь Паскаль и Бейсик, сильно изменившись при этом.

Как это не прискорбно для ярых противников Microsoft, но именно эта компания способствовала широкому распространению Бейсика (вспомним Quick Basic). По моему опыту писать на нем было удобнее, чем на Turbo Bacic компании Borland, которая более известна по языку C++. Повсеместная «Виндуализация» PC компьютеров, вынудила к разработке версии Бейсика для Windows приложений. Таким клоном в 1991 году стал Visual Basic, позволяющий визуально создавать прикладные программы, довольно приличного уровня. Но все же, по моему мнению, из за простоты Visual Basic сдает свои позиции тем же Си и Java. С появлением всемирной сети Internet, и языка HTML стало возможным создание активных приложений на веб страницах. Единственным языком для этих целей был Java Script. Да, именно был. Когда свет увидел Microsoft Internet Explorer 3.0, в нем, помимо поддержки Java script появилась и поддержка Visual Basic Scripting Edition, или просто VBscript. Как известно, JavaScript был разработан Netscape и поначалу стал известен как LiveScript. После шумихи вокруг Java, Netscape переименовала его в JavaScript, когда получила лицензию от Sun. Microsoft самостоятельно разработала JScript для своего броузера, за что правда тоже не избежала разбирательств с Sun.

Кроме Java, MSIE3.0 (и выше), может еще и исполнять программы на VBScript. Netscape Navigator не поддерживает пока (надеюсь, что пока) VBScript, поэтому этот язык не очень широко применяется, а многим даже не известен. А жаль, человеку умеющему писать на обычном QB достаточно месяца, а то и меньше, чтобы перейти на VBscript и создавать красивые активные веб страницы, ни чем не уступающие страницам с JavaScript и даже во многим превосходящие их. Поэтому, если с надеждой смотреть в будущее, то изучить VBScript можно уже сейчас. В этой статье я попытаюсь рассказать основы VBScript, не вдаваясь в тонкости. Моя цель, только заинтересовать рядового пользователя и начинающих WebДизайнеров. Вот и все из истории:) Начнем.

Cравнение VBScript и JavaScript.

Прежде чем начинать познавать VBScript, давайте сравним две одинаковые, простые программы на JS и VBS. Это будет полезным для тех, кто знает JavaScript (к коим я не отношусь:(.
Суть программы: вводим текст в верхнее поле, нажимаем кнопку «Скопировать» и текст копируется в нижнее поле.

Да, как видно, различий практически нет. JS поддерживает только функции, VBS и функции и процедуры (подпрограммы). Так же следует отметить, что VBS отличие от JS не чувствителен к регистру символов, т.е. для него что copyfun(), что CoPYfuN() — один пес:). Так что можете сделать выводы, тем, кто знает ява скрипт, будет легко освоить VBS, а тем кто не знает пока ни того не другого будет еще легче, поскольку переучиваться не придется. Учиться лучше на примерах, поэтому постараюсь их здесь приводить побольше. Я надеюсь, что Вы хотя бы умеете писать программы на обыкновенном Бейсике (QB или TB)? Тогда эта статья именно для Вас.

От QuickBasic до VBscript — один шаг.

Начнем изучение не стандартным подходом. Обычно сначала все пишут программу, выводящую на экран строку «ПРИВЕТ ПИПЛЫ :)» Мы же попробуем перевести обычную «Бейсиковскую» программу — на VBscript, чтобы показать — как между ними много общего. Поставим задачу, написать программу, которая бы случайным образом загадывала число от 1 до 100, и предлагала Вам его угадать. При неправильном предположении, программа должна выводить сообщение о том, больше загаданное число или меньше. Ведется подсчет попыток. В случае победы выводится поздравление.

Программа на обычном Бейсике:

Как видите, такая программа пошла бы даже на БК0010:) Я даже оставил ненавистные операторы GOTO (интересно, об них еще помнят?). Для тех кто не понимает, опишу алгоритм:

10 очистка экрана и включение генератора случайных чисел.
20 переменной «a» присваивается целое случайное значение
от 1 до 100, счетчику числа попыток присваивается
значение=1.
30, 40 выводится сообщение.
50 ввод Вашего варианта «v».
60 если загаданное число больше Вашего варианта, то
выводится сообщение, на единицу увеличивается счетчик
попыток и программа отправляется на строку 40.
70 если загаданное число меньше Вашего варианта, то
выводится сообщение, на единицу увеличивается счетчик
попыток и программа отправляется на строку 40.
80 Если числа совпадут то выводится поздравление, кстати,
по идее, проверку этого условия можно и опустить.
90 THE END

Visual basic html = vbscript использование объектов

Основы программирования на VBScript

VBScript — это язык сценариев, который предназначен для разработки интерактивных WEB -страниц. Коды VBScript загружаются в HTML документ, после чего браузер осуществляет выполнение этого сценария.

Кроме того, для обеспечения защиты из VBScript были изъяты возможности доступа к жестким дискам и операционной системе. Т.к. WEB — страницы запускаются на ПК пользователя, то этим исключается возможность испортить что-либо на его ПК при запуске WEB -страницы.

Сценарий- это обычный текстовый файл и для его редактирования можно использовать любой текстовый редактор.

Для вставки сценария в HTML документ предназначен тег Script . Атрибут Language определяет язык сценария. Для языка VBScript следует указать

Для языка JavaScript следует указать

HTML страницы могут содержать стандартные элементы управления: текстовые поля, кнопки, переключатели и другие. Для внедрения элементов управления на Web -страницу предназначен тег Input .

Пример вставки текстового поля.

Input Type = text Name =” txt 1” value =”АИС”>

Атрибут Type определяет тип элемента управления.

Атрибут Name определяет имя элемента управления, которое используется при написании сценариев.

Атрибут Value определяет исходное содержание текстового поля.

Атрибут Size определяет размер поля в символах.

Атрибут Maxlength определяет максимальное количество символов, вводимое пользователем.

Для вставки флажка тег Input имеет вид:

Каждый раз, когда пользователь щелкает на флажок, состояние элемента меняется на противоположное. Для исходной установки флажка используется атрибут Checked . Checked =1, если флажок установлен, и наоборот, если Checked =0, флажок сброшен.

Для вставки переключателя тег Input имеет вид:

В группе может быть установлен только один переключатель.

В отличие от флажков, обладающих собственными именами, группа переключателей объединяется общим именем. Для исходной установки одного из переключателей группы используется атрибут Checked .

Для вставки стандартной кнопки тег Input имеет вид:

При каждом нажатии на кнопку происходит событие kn 1_ onClick .

С помощью языка VBScript можно определить, как различные элементы управления будут реагировать на те или иные события.

HEAD > TITLE >Пример странички с VBScript TITLE >

В данном примере на Web -страницу вставлена кнопка, а сценарий запускается при щелчке на кнопку. Экрана обозревателя после загрузки Web -страницы представлен на рисунке 1.

Основы VBS

VBS (Visual Basic Scripting) — язык написания сценариев высокого уровня, по синтаксису похожий на VBA, применяемый для автоматизации администрирования Windows, обработки данных и т.д. Если Вы уже знаете Visual Basic или Visual Basic для приложений (VBA), VBScript будет очень знаком. Основные понятия VBScript являются общими для большинства языков программирования.

Объявление переменных и массивов

В VBS есть глобальные и локальные переменные, доступные только в конкретной области.

Использование Public и Private по большей части имеют смысл при использовании классов в VBS, которые будут рассмотрены в следующей статье. В языке VBS так же можно объявить константы:

Переменную так же можно вообще не объявлять, а сразу присваивать ей значение, однако, так делать не рекомендуется, т.к. в случае опечатки в названии переменной, можно получить не те результаты, что ожидались. Чтобы компилятор требовал явного объявления всех переменных, нужно использовать оператор Option Explicit

Тип переменной задается при присвоении ей значения, при этом тип может меняться в процессе выполнения программы.

Массивы объявляются с помощью скобок.

Как и с переменными, тип массива задается при присвоении значения, причем, у разных элементов массива могут быть разные типы.

Очистить массив от данных можно так:

Условия и ветвления

Условия в VBS осуществляется с помощью If Then Else. Пример:

Оператор Select Case поможет при большом количестве сравнений. Пример:

Циклы

В VBS используется два основных вида циклов.

Синтаксис цикла For . Next

Операторы в квадратных скобках не обязательны. Step — задает шаг изменения переменной цикла, на сколько она увеличивается или уменьшается с каждой итерацией (повтором) цикла. Exit For — позволяет прервать цикл «досрочно», т.е. выйти из цикла, когда необходимо и передать управление оператору, следующему за Next.

Пример цикла For . Next

Еще один вариант цикла For Each . Next. Он позволяет перебирать элементы какого-либо списка (массива), в случае, если его размеры не известны. В цикле так же можно использовать Exit For при необходимости.

Пример цикла For Each . Next

Цикл Do .. Loop используется когда необходимо выполнять цикл до тех пор пока условие верно или, наоброт, выйти из цикла если условие стало верно.

Синтаксис цикла с предусловием:

Синтаксис цикла с постусловием:

Как и с циклом For оператор Exit Do позволяет «досрочно» выйти из цикла.

Цикл While Wend — альтернативная форма записи цикла Do Loop с предусловием. Цикл выполняется пока условие верно.

Заключение

Мы рассмотрели основные операторы языка VBS. Так же стоит упомянуть еще несколько моментов:

  • Операторы можно записывать в одну строку, разделяя их двоеточием :
  • Для записи комментария в начале строку нужно использовать апостроф или оператор REM
  • Файлы VBScript записываются как обычные текстовые файлы в кодировке Windows-1251.

На этом, основы VBS можно считать рассмотренными.

Функция CreateObject CreateObject function

Создает и возвращает ссылку на объект ActiveX. Creates and returns a reference to an ActiveX object.

Синтаксис Syntax

CreateObject(класс, [ имя_сервера ]) CreateObject(class, [ servername ])

Синтаксис функции CreateObject состоит из следующих частей: The CreateObject function syntax has these parts:

Java Script VB Script
Часть Part Описание Description
класс class Обязательный элемент, Variant (String). Required; Variant (String). Имя приложения и класс создаваемого объекта. The application name and class of the object to create.
имя_сервера servername Необязательный элемент, Variant (String). Optional; Variant (String). Имя сетевого сервера, где будет создан объект. The name of the network server where the object will be created. Если имя_сервера является пустой строкой («»), используется локальный компьютер. If servername is an empty string («»), the local machine is used.

Для аргумента класс используется синтаксис имя_приложения.тип_объекта, содержащий указанные ниже части: The class argument uses the syntax appname.objecttype and has these parts:

Часть Part Описание Description
имя_приложения appname Обязательный элемент; Variant (String). Required; Variant (String). Имя приложения, предоставляющего объект. The name of the application providing the object.
тип_объекта objecttype Обязательный элемент, Variant (String). Required; Variant (String). Тип или класс создаваемого объекта. The type or class of object to create.

Примечания Remarks

Каждое приложение, поддерживающее автоматизацию, предоставляет как минимум один тип объекта. Every application that supports Automation provides at least one type of object. Например, в приложении для обработки текстов могут быть объекты Application, Document и Toolbar. For example, a word processing application may provide an Application object, a Document object, and a Toolbar object.

Чтобы создать объект ActiveX, назначьте объект, возвращаемый функцией CreateObject, переменной объекта. To create an ActiveX object, assign the object returned by CreateObject to an object variable.

Этот код запускает приложение, в котором создается объект, в данном случае электронная таблица Microsoft Excel. This code starts the application creating the object, in this case, a Microsoft Excel spreadsheet. После создания объекта на него можно ссылаться в коде, используя переменную объекта. After an object is created, you reference it in code by using the object variable you defined. В приведенном ниже примере доступ к свойствам и методам нового объекта осуществлялся с помощью объектной переменной ExcelSheet и других объектов Microsoft Excel, включая объект Application и коллекцию Cells . In the following example, you access properties and methods of the new object by using the object variable, ExcelSheet , and other Microsoft Excel objects, including the Application object and the Cells collection.

При объявлении объектной переменной с помощью предложения As Object создается переменная, которая может содержать ссылку на любой тип объекта. Declaring an object variable with the As Object clause creates a variable that can contain a reference to any type of object. Однако обращение к объекту через эту переменную выполняется с поздним связыванием, то есть привязка создается при выполнении программы. However, access to the object through that variable is late bound; that is, the binding occurs when your program is run. Чтобы создать объектную переменную с ранним связыванием, то есть со связыванием при компиляции программы, объявите объектную переменную с определенным идентификатором класса. To create an object variable that results in early binding, that is, binding when the program is compiled, declare the object variable with a specific class ID. Например, можно объявить и создать следующие ссылки Microsoft Excel: For example, you can declare and create the following Microsoft Excel references:

Ссылка с ранней привязкой может обеспечить большее быстродействие, но может содержать ссылку только на класс, указанный в объявлении. The reference through an early-bound variable can give better performance, but can only contain a reference to the class specified in the declaration.

Можно передать объект, возвращаемый функцией CreateObject, функции, которая использует объект в качестве аргумента. You can pass an object returned by the CreateObject function to a function expecting an object as an argument. Например, в следующем коде создается и передается ссылка на объект Excel.Application: For example, the following code creates and passes a reference to a Excel.Application object:

Вы можете создать объект на удаленном компьютере, подключенном к сети, указав его имя в аргументе имя_сервера функции CreateObject. You can create an object on a remote networked computer by passing the name of the computer to the servername argument of CreateObject. Это имя совпадает с именем компьютера в имени общего ресурса; для имени «\\MyServer\Public» имя_сервера будет «MyServer». That name is the same as the Machine Name portion of a share name; for a share named «\MyServer\Public,» servername is «MyServer.»

[!NOTE] > Refer to COM documentation (see _Microsoft Developer Network_) for additional information about making an application visible on a remote networked computer. You may have to add a registry key for your application.

Приведенный ниже код возвращает номер версии экземпляра приложения Excel, запущенного на удаленном компьютере с именем MyServer : The following code returns the version number of an instance of Excel running on a remote computer named MyServer :

Если удаленный сервер не существует или недоступен, возникает ошибка во время выполнения. If the remote server doesn’t exist or is unavailable, a run-time error occurs.

Используйте функцию CreateObject, если текущий экземпляр объекта отсутствует. Use CreateObject when there is no current instance of the object. Если экземпляр объекта уже запущен, запускается новый экземпляр и создается объект указанного типа. If an instance of the object is already running, a new instance is started, and an object of the specified type is created. Для использования текущего экземпляра или запуска приложения с одновременной загрузкой файла используйте функцию GetObject. To use the current instance, or to start the application and have it load a file, use the GetObject function.

Если объект зарегистрировал себя как объект типа «единственный экземпляр», создается только один экземпляр этого объекта независимо от того, сколько раз выполнялась функция CreateObject. If an object has registered itself as a single-instance object, only one instance of the object is created, no matter how many times CreateObject is executed.

Пример Example

В этом примере функция CreateObject используется для создания ссылки ( xlApp ) на Microsoft Excel. This example uses the CreateObject function to set a reference ( xlApp ) to Microsoft Excel. Эта ссылка используется для доступа к свойству Visible Microsoft Excel, а затем используется метод Quit Microsoft Excel, чтобы закрыть это приложение. It uses the reference to access the Visible property of Microsoft Excel, and then uses the Microsoft Excel Quit method to close it. В конце ссылка освобождается. Finally, the reference itself is released.

См. также See also

Поддержка и обратная связь Support and feedback

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Have questions or feedback about Office VBA or this documentation? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь. Please see Office VBA support and feedback for guidance about the ways you can receive support and provide feedback.

Visual Basic Script

Visual Basic Script

VBS — Ввод и вывод значений

Прежде чем мы приступим к самому интересному — хотел бы написать про два оператора, самых важных. Самых важных потому, что они выводят и вводят информацию в код программы. Делают код наглядным и интерактивным.

Первый из этих чудесных операторов — MsgBox

MsgBox

Данный оператор производит вывод информации как текстовой, так и числовой.

Самая наипростейшая конструкция это простой вывод.

Но данная конструкция является минимальной и её можно усложнить.

База следующей конструкции такая: MsgBox (Текст, Кнопки, ЗаголовокОкна)

На этом примере так же хотел бы заострить внимание на первой, текстовой, части аргументов MsgBox. Если необходимо вывести одновременно несколько переменных, текстовой информации вместе с чем-либо, используется знак &, так называемый знак Конкатенации. В случае, если вы укажете + то в лучшем случае вы получите не тот результат, например если вы захотите вывести A и B, а он вам выведет их сумму. В худшем, выдаст ошибку, если вы попытаетесь сложить текст с чем-нибудь.

Теперь, давайте разберёмся, какие могут быть аргументы, указывающие, какие кнопки показывать у окна.

vbOKOnly Отображается только кнопка «OK».
vbOKCancel 1 Отображаются кнопки «OK» и «Отмена» (Cancel).
vbAbortRetryIgnore 2 Отображаются кнопки «Прервать» (Abort), «Повторить» (Retry) и «Пропустить» (Ignore).
vbYesNoCancel 3 Отображаются кнопки «Да» (Yes), «Нет» (No) и «Отмена» (Cancel).
vbYesNo 4 Отображаются кнопки «Да» (Yes) и «Нет» (No).
vbRetryCancel 5 Отображаются кнопки «Повторить» (Retry) и «Отмена» (Cancel).
vbCritical 16 Используется значок «Критическое сообщение».
vbQuestion 32 Используется значок «Предупреждающий запрос».
vbExclamation 48 Используется значок «Предупреждение».
vbInformation 64 Используется значок «Информационное сообщение».
vbDefaultButton1 Основной является первая кнопка.
vbDefaultButton2 256 Основной является вторая кнопка.
vbDefaultButton3 512 Основной является третья кнопка.
vbDefaultButton4 768 Основной является четвертая кнопка.
vbApplicationModal Модальное окно на уровне приложения: чтобы продолжить работу с текущим приложением, необходимо ответить на данное сообщение.
vbSystemModal 4096 Модальное окно на уровне системы: все приложения будут недоступны до тех пор, пока пользователь не ответит на данное сообщение

Теперь, чуточку подробнее. Допустим, нам нужно вывести сообщение об ошибке.
Тогда мы сделаем это следующим образом:

В результате, как нам и нужно, мы получим следующее окно:

Данное окно так же позволяет не только вывести что либо, но и для взаимодействия с пользователем. Изменим немного данный пример.

На этом примере хорошо видно, что когда мы просто хотим что-то вывести, то мы указываем MsgBox без скобок и наличие скобок приведёт к ошибке. Однако, когда мы приравниваем MsgBox к переменной для получения ответа от пользователя, то аргументы MsgBox указываются в скобках. Как видно, если мы нажимаешь кнопку «Повтор», то значение переменной будет равно 4. Если мы нажмём «Отмена», то переменная будет равна 2.Кстати говоря, нажатии кнопки Esc равносильно нажатию кнопки «Отмена». В коде использован условные операторы IF THEN ELSE. Мы о них поговорим в следующей статье. Пока делаем акцент на остальном коде.

Ниже привожу список значений реакции на нажатие определённых кнопок:

Константа Значение Нажатая кнопка
vbOK 1 OK
vbCancel 2 Отмена (Cancel)
vbAbort 3 Прервать (Abort)
vbRetry 4 Повторить (Retry)
vbIgnore 5 Пропустить (Ignore)
vbYes 6 Да (Yes)
vbNo 7 Нет (No)

Так же, вместо числовых значений можно использовать приведённые выше константы:

Так же MsgBox предусматривает ссылку на справочный файл. Но с этим могут быть проблемы. Например, разные версии Windows. Поэтому, я напоследок лишь скажу, что максимальный формат записи MsgBox следующий:

MsgBox Текст, Кнопки, Заголовок, СсылкаНаСправочныйФайл, НомерРазделаВСправке

Теперь давайте перейдём к не менее важному InputBox

InputBox

Для ввода данных используется InputBox.

Минимальная конструкция следующая:

В данном примере текст вводится в поле, а потом происходит его вывод на экран.

Полная конструкция InputBox следующая: InputBox(Текст, Заголовок, ТекстВПоле, xpos, ypos, helpfile, context)

Последние два аргумента как и в MsgBox, а с остальными разберёмся. Пример:

И ниже сразу приведу результаты:

Как мы видим, слева ввод переменной А (4 строчка кода), а справа ввод переменной B (5 строчка кода).

Как не трудно догадаться, через запятую указываются в скобках: Текст сообщения в окне(чтобы пользователь понял, что вводить), Заголовок окна, Значение текстового поля по умолчанию(например, дополнительная подсказка пользователю о том, в каком формате вводить значение).

Так же можно указать xpos и ypos (в коде строчка 6). Эти величины указывают расстояние от левого края экрана до окна(xpos) и расстояние от верхнего края экрана до окна(ypos).

Не забываем все аргументы InputBox брать в скобки, как показано в примере.

как сделать «включать» объект ActiveX в VB6 для VBScript?

это то, что я пытаюсь сделать:

VB6 com.dll, имя и имя_класса: scripting.includefile

VBScript:

Это возможно? заранее спасибо :)

Если суть вопроса здесь в том числе внешнего скрипта файлов в WSH скрипты, то вы можете просто перестать писать свои скрипты, как обнаженные VBS файлы и писать WSFS вместо этого.

Предположим, эти два файла в той же папке:

Utilities.vbs (Здесь мы будем только один Sub , определенный в качестве демо)

DemoScript.wsf

Вы просто прочитать файл с ним и присвоить текст элемента управления сценариев.

Это VBScript, но VBScript является законным VB6.

Вот я читаю сценарий из командной строки и применить его к каждой строке стандартного ввода. Примечание Я использую элемент управления сценария, чтобы проверить на наличие ошибок синтаксиса (вы не можете продолжать программу после синтаксической ошибки в отличие от ошибок во время выполнения). Я на самом деле выполнить сценарий в VBScript (который VB6 не может сделать), а не контроль над сценарием для прохождения простых данных.

Используйте двоеточия для того чтобы отделить заявления и линии. Используйте одинарные кавычки вместо двойных кавычек, если вам нужно использовать апостроф Chr (39). Побег скобки и амперсанд с ^ характером. Если вам нужно использовать каретку Chr (136).

Функция называется ультрафильтрации (для пользовательской функции). Он имеет два параметра, L, который содержит текущую строку и LC, который содержит LineCount. Установить результаты сценария к UF. Смотрите пример.

Есть три глобальные объекты доступны. Необъявленная глобальная переменная GU для сохранения состояния. Используйте его как массив, если вам нужно больше, чем одну переменную. Словарь объект ГД для сохранения и доступа предыдущих строк. И RegExp объект greU готов к использованию.

пример

Этот VBS скрипт вставляет номер строки и устанавливает линию к функции UF, какой фильтр печатает.

Вот как это выглядит в памяти

Если есть ошибка фильтр синтаксиса будет отображать отладочную деталь.


Пользователь ошибка синтаксиса функции

Пользователь ошибка функции времени выполнения

Автоматизация рутины в Microsoft Excel при помощи VBA

В этом посте я расскажу, что такое VBA и как с ним работать в Microsoft Excel 2007/2010 (для более старых версий изменяется лишь интерфейс — код, скорее всего, будет таким же) для автоматизации различной рутины.

VBA (Visual Basic for Applications) — это упрощенная версия Visual Basic, встроенная в множество продуктов линейки Microsoft Office. Она позволяет писать программы прямо в файле конкретного документа. Вам не требуется устанавливать различные IDE — всё, включая отладчик, уже есть в Excel.

Еще при помощи Visual Studio Tools for Office можно писать макросы на C# и также встраивать их. Спасибо, FireStorm.

Сразу скажу — писать на других языках (C++/Delphi/PHP) также возможно, но требуется научится читать, изменять и писать файлы офиса — встраивать в документы не получится. А интерфейсы Microsoft работают через COM. Чтобы вы поняли весь ужас, вот Hello World с использованием COM.

Поэтому, увы, будем учить Visual Basic.

Чуть-чуть подготовки и постановка задачи

Итак, поехали. Открываем Excel.

Для начала давайте добавим в Ribbon панель «Разработчик». В ней находятся кнопки, текстовые поля и пр. элементы для конструирования форм.

Теперь давайте подумаем, на каком примере мы будем изучать VBA. Недавно мне потребовалось красиво оформить прайс-лист, выглядевший, как таблица. Идём в гугл, набираем «прайс-лист» и качаем любой, который оформлен примерно так (не сочтите за рекламу, пожалуйста):

То есть требуется, чтобы было как минимум две группы, по которым можно объединить товары (в нашем случае это будут Тип и Производитель — в таком порядке). Для того, чтобы предложенный мною алгоритм работал корректно, отсортируйте товары так, чтобы товары из одной группы стояли подряд (сначала по Типу, потом по Производителю).

Результат, которого хотим добиться, выглядит примерно так:

Разумеется, если смотреть прайс только на компьютере, то можно добавить фильтры и будет гораздо удобнее искать нужный товар. Однако мы хотим научится кодить и задача вполне подходящая, не так ли?

Кодим

Для начала требуется создать кнопку, при нажатии на которую будет вызываться наша програма. Кнопки находятся в панели «Разработчик» и появляются по кнопке «Вставить». Вам нужен компонент формы «Кнопка». Нажали, поставили на любое место в листе. Далее, если не появилось окно назначения макроса, надо нажать правой кнопкой и выбрать пункт «Назначить макрос». Назовём его FormatPrice. Важно, чтобы перед именем макроса ничего не было — иначе он создастся в отдельном модуле, а не в пространстве имен книги. В этому случае вам будет недоступно быстрое обращение к выделенному листу. Нажимаем кнопку «Новый».

И вот мы в среде разработки VB. Также её можно вызвать из контекстного меню командой «Исходный текст»/«View code».

Перед вами окно с заглушкой процедуры. Можете его развернуть. Код должен выглядеть примерно так:

Напишем Hello World:

Sub FormatPrice()
MsgBox «Hello World!»
End Sub

И запустим либо щелкнув по кнопке (предварительно сняв с неё выделение), либо клавишей F5 прямо из редактора.

Тут, пожалуй, следует отвлечься на небольшой ликбез по поводу синтаксиса VB. Кто его знает — может смело пропустить этот раздел до конца. Основное отличие Visual Basic от Pascal/C/Java в том, что команды разделяются не ;, а переносом строки или двоеточием (:), если очень хочется написать несколько команд в одну строку. Чтобы понять основные правила синтаксиса, приведу абстрактный код.

Примеры синтаксиса

‘ Процедура. Ничего не возвращает
‘ Перегрузка в VBA отсутствует
Sub foo(a As String , b As String )
‘ Exit Sub ‘ Это значит «выйти из процедуры»
MsgBox a + «;» + b
End Sub

‘ Функция. Вовращает Integer
Function LengthSqr(x As Integer , y As Integer ) As Integer
‘ Exit Function
LengthSqr = x * x + y * y
End Function

Sub FormatPrice()
Dim s1 As String , s2 As String
s1 = «str1»
s2 = «str2»
If s1 <> s2 Then
foo «123» , «456» ‘ Скобки при вызове процедур запрещены
End If

Dim res As sTRING ‘ Регистр в VB не важен. Впрочем, редактор Вас поправит
Dim i As Integer
‘ Цикл всегда состоит из нескольких строк
For i = 1 To 10
res = res + CStr(i) ‘ Конвертация чего угодно в String
If i = 5 Then Exit For
Next i

Dim x As Double
x = Val( «1.234» ) ‘ Парсинг чисел
x = x + 10
MsgBox x

On Error Resume Next ‘ Обработка ошибок — игнорировать все ошибки
x = 5 / 0
MsgBox x

On Error GoTo Err ‘ При ошибке перейти к метке Err
x = 5 / 0
MsgBox «OK!»
GoTo ne

ne:
On Error GoTo 0 ‘ Отключаем обработку ошибок

‘ Циклы бывает, какие захотите
Do While True
Exit Do

Loop ‘While True
Do ‘Until False
Exit Do
Loop Until False
‘ А вот при вызове функций, от которых хотим получить значение, скобки нужны.
‘ Val также умеет возвращать Integer
Select Case LengthSqr(Len( «abc» ), Val( «4» ))
Case 24
MsgBox «0»
Case 25
MsgBox «1»
Case 26
MsgBox «2»
End Select

‘ Двухмерный массив.
‘ Можно также менять размеры командой ReDim (Preserve) — см. google
Dim arr(1 to 10, 5 to 6) As Integer
arr(1, 6) = 8

Dim coll As New Collection
Dim coll2 As Collection
coll.Add «item» , «key»
Set coll2 = coll ‘ Все присваивания объектов должны производится командой Set
MsgBox coll2( «key» )
Set coll2 = New Collection
MsgBox coll2.Count
End Sub

Грабли-1. При копировании кода из IDE (в английском Excel) есь текст конвертируется в 1252 Latin-1. Поэтому, если хотите сохранить русские комментарии — надо сохранить крокозябры как Latin-1, а потом открыть в 1251.

Грабли-2. Т.к. VB позволяет использовать необъявленные переменные, я всегда в начале кода (перед всеми процедурами) ставлю строчку Option Explicit. Эта директива запрещает интерпретатору заводить переменные самостоятельно.

Грабли-3. Глобальные переменные можно объявлять только до первой функции/процедуры. Локальные — в любом месте процедуры/функции.

Еще немного дополнительных функций, которые могут пригодится: InPos, Mid, Trim, LBound, UBound. Также ответы на все вопросы по поводу работы функций/их параметров можно получить в MSDN.

Надеюсь, что этого Вам хватит, чтобы не пугаться кода и самостоятельно написать какое-нибудь домашнее задание по информатике. По ходу поста я буду ненавязчиво знакомить Вас с новыми конструкциями.

Кодим много и под Excel

В этой части мы уже начнём кодить нечто, что умеет работать с нашими листами в Excel. Для начала создадим отдельный лист с именем result (лист с данными назовём data). Теперь, наверное, нужно этот лист очистить от того, что на нём есть. Также мы «выделим» лист с данными, чтобы каждый раз не писать длинное обращение к массиву с листами.

Sub FormatPrice()
Sheets( «result» ).Cells.Clear
Sheets( «data» ).Activate
End Sub

Работа с диапазонами ячеек

Вся работа в Excel VBA производится с диапазонами ячеек. Они создаются функцией Range и возвращают объект типа Range. У него есть всё необходимое для работы с данными и/или оформлением. Кстати сказать, свойство Cells листа — это тоже Range.

Примеры работы с Range

Sheets( «result» ).Activate
Dim r As Range
Set r = Range( «A1» )
r.Value = «123»
Set r = Range( «A3,A5» )
r.Font.Color = vbRed
r.Value = «456»
Set r = Range( «A6:A7» )
r.Value = «=A1+A3»

Теперь давайте поймем алгоритм работы нашего кода. Итак, у каждой строчки листа data, начиная со второй, есть некоторые данные, которые нас не интересуют (ID, название и цена) и есть две вложенные группы, к которым она принадлежит (тип и производитель). Более того, эти строки отсортированы. Пока мы забудем про пропуски перед началом новой группы — так будет проще. Я предлагаю такой алгоритм:

  1. Считали группы из очередной строки.
  2. Пробегаемся по всем группам в порядке приоритета (вначале более крупные)
    1. Если текущая группа не совпадает, вызываем процедуру AddGroup(i, name), где i — номер группы (от номера текущей до максимума), name — её имя. Несколько вызовов необходимы, чтобы создать не только наш заголовок, но и всё более мелкие.
  3. После отрисовки всех необходимых заголовков делаем еще одну строку и заполняем её данными.

Для упрощения работы рекомендую определить следующие функции-сокращения:

Function GetCol(Col As Integer ) As String
GetCol = Chr(Asc( «A» ) + Col)
End Function

Function GetCellS(Sheet As String , Col As Integer , Row As Integer ) As Range
Set GetCellS = Sheets(Sheet).Range(GetCol(Col) + CStr(Row))
End Function

Function GetCell(Col As Integer , Row As Integer ) As Range
Set GetCell = Range(GetCol(Col) + CStr(Row))
End Function

Далее определим глобальную переменную «текущая строчка»: Dim CurRow As Integer. В начале процедуры её следует сделать равной единице. Еще нам потребуется переменная-«текущая строка в data», массив с именами групп текущей предыдущей строк. Потом можно написать цикл «пока первая ячейка в строке непуста».

Глобальные переменные

Option Explicit ‘ про эту строчку я уже рассказывал
Dim CurRow As Integer
Const GroupsCount As Integer = 2
Const DataCount As Integer = 3

FormatPrice

Sub FormatPrice()
Dim I As Integer ‘ строка в data
CurRow = 1
Dim Groups(1 To GroupsCount) As String
Dim PrGroups(1 To GroupsCount) As String

Sheets( «data» ).Activate
I = 2
Do While True
If GetCell(0, I).Value = «» Then Exit Do
‘ .
I = I + 1
Loop
End Sub

Теперь надо заполнить массив Groups:

На месте многоточия

Dim I2 As Integer
For I2 = 1 To GroupsCount
Groups(I2) = GetCell(I2, I)
Next I2
‘ .
For I2 = 1 To GroupsCount ‘ VB не умеет копировать массивы
PrGroups(I2) = Groups(I2)
Next I2
I = I + 1

И создать заголовки:

На месте многоточия в предыдущем куске

For I2 = 1 To GroupsCount
If Groups(I2) <> PrGroups(I2) Then
Dim I3 As Integer
For I3 = I2 To GroupsCount
AddHeader I3, Groups(I3)
Next I3
Exit For
End If
Next I2

Не забудем про процедуру AddHeader:

Перед FormatPrice

Sub AddHeader(Ty As Integer , Name As String )
GetCellS( «result» , 1, CurRow).Value = Name
CurRow = CurRow + 1
End Sub

Теперь надо перенести всякую информацию в result

For I2 = 0 To DataCount — 1
GetCellS( «result» , I2, CurRow).Value = GetCell(I2, I)
Next I2

Подогнать столбцы по ширине и выбрать лист result для показа результата

После цикла в конце FormatPrice

Sheets( «Result» ).Activate
Columns.AutoFit

Всё. Можно любоваться первой версией.

Некрасиво, но похоже. Давайте разбираться с форматированием. Сначала изменим процедуру AddHeader:

Sub AddHeader(Ty As Integer , Name As String )
Sheets( «result» ).Range( «A» + CStr(CurRow) + «:C» + CStr(CurRow)).Merge
‘ Чтобы не заводить переменную и не писать каждый раз длинный вызов
‘ можно воспользоваться блоком With
With GetCellS( «result» , 0, CurRow)
.Value = Name
.Font.Italic = True
.Font.Name = «Cambria»
Select Case Ty
Case 1 ‘ Тип
.Font.Bold = True
.Font.Size = 16
Case 2 ‘ Производитель
.Font.Size = 12
End Select
.HorizontalAlignment = xlCenter
End With
CurRow = CurRow + 1
End Sub

Осталось только сделать границы. Тут уже нам требуется работать со всеми объединёнными ячейками, иначе бордюр будет только у одной:

Поэтому чуть-чуть меняем код с добавлением стиля границ:

Sub AddHeader(Ty As Integer , Name As String )
With Sheets( «result» ).Range( «A» + CStr(CurRow) + «:C» + CStr(CurRow))
.Merge
.Value = Name
.Font.Italic = True
.Font.Name = «Cambria»
.HorizontalAlignment = xlCenter

Select Case Ty
Case 1 ‘ Тип
.Font.Bold = True
.Font.Size = 16
.Borders(xlTop).Weight = xlThick
Case 2 ‘ Производитель
.Font.Size = 12
.Borders(xlTop).Weight = xlMedium
End Select
.Borders(xlBottom).Weight = xlMedium ‘ По убыванию: xlThick, xlMedium, xlThin, xlHairline
End With
CurRow = CurRow + 1
End Sub

Осталось лишь добится пропусков перед началом новой группы. Это легко:

В начале FormatPrice

Dim I As Integer ‘ строка в data
CurRow = 0 ‘ чтобы не было пропуска в самом начале
Dim Groups(1 To GroupsCount) As String

В цикле расстановки заголовков

If Groups(I2) <> PrGroups(I2) Then
CurRow = CurRow + 1
Dim I3 As Integer

В точности то, что и хотели.

Надеюсь, что эта статья помогла вам немного освоится с программированием для Excel на VBA. Домашнее задание — добавить заголовки «ID, Название, Цена» в результат. Подсказка: CurRow = 0 CurRow = 1.

Файл можно скачать тут (min.us) или тут (Dropbox). Не забудьте разрешить исполнение макросов. Если кто-нибудь подскажет человеческих файлохостинг, залью туда.

Спасибо за внимание.

Буду рад конструктивной критике в комментариях.

UPD: Перезалил пример на Dropbox и min.us.

UPD2: На самом деле, при вызове процедуры с одним параметром скобки можно поставить. Либо использовать конструкцию Call Foo(«bar», 1, 2, 3) — тут скобки нужны постоянно.

3. Работа с объектами. Библиотеки классов и их просмотр

Классы и объекты в VBScript, создание объектов, объектные модели Windows

Классы — это блоки функциональности, которые можно использовать в программах, в нашем случае — скриптах. Для наших целей их можно считать «чертежами» для создания объектов. На основе этих «чертежей» создаются экземпляры классов — объекты. Коллекция классов обычно называется библиотекой типов и в Windows она «упакована» в файл dll или ocx . Такие библиотеки типов откомпилированы — классы из них можно использовать, но просмотреть их исходный код нельзя (технология «черного ящика»).

Чаще всего в скрипте производится создание объекта определенного класса ( instantiation ) и далее работа производится с этим объектом. В одном скрипте вполне можно использовать несколько разных объектов одного и того же класса.

Создание объекта производится очень просто:

Set Объектная_переменная = CreateObject (“Библиотека.Класс”)

Set oNetwork = CreateObject(«Wscript.Network»)

oNetwork.MapNetworkDrive «z:», \\London\Labs

Функция CreateObject() встроена в VBScript. WScript — это одновременно и имя библиотеки типов (как в нашем примере), и имя специального объекта, который создается в момент запуска скрипта (и поэтому его специально создавать не нужно) и существует до конца выполнения скрипта WSH .

Пример — в любом месте скрипта вы можете использовать его метод Wscript . Echo .

Чтобы явно удалить объект (например, чтобы освободить оперативную память) можно использовать команду

Set объект = Nothing

Все объекты, которые не удалены явным образом, удаляются автоматически при завершении работы скрипта, однако правило хорошего тона — удалять все объекты, в которых пропала надобность, явно (во избежание разных проблем).

Обычно в скрипте используются методы и свойства созданного объекта.

Метод может выполнять какие-либо действия, принимать и возвращать значения. Чаще всего нам неважно, какой именно код выполняет тот или иной метод используемого нами объекта, однако знать, как тот или иной метод можно вызвать, мы обязаны. Всего три способа:

1) простой вызов метода выглядит как

При этом не возвращаются и не принимаются никакие параметры.

2) второй способ:

объект.метод параметр1 [, параметр2, . , параметр]

Параметры передаются путем перечисления через запятую, скобки не используются.

3) третий способ:

моя_переменная = объект.метод (параметр1 [, параметр2, . , параметр n ])

В этом случае значение, которое возвращает метод, присваивается переменной. При этом применение скобок для передаваемых параметров обязательно. Даже если никакие параметры не передаются, круглые скобки все равно обязательны:

Обращение к данным объекта обычно производится через его свойства. Через свойства можно получать информацию о данных объекта или их изменять.

Самые простой синтаксис для изменения свойств объекта выглядит так:

Значение может быть обычной константой (10 или «Сообщение»), простым выражением (10 + 5), свойством другого объекта Объект1.Свойство = Объект2.Свойство), возвращаемым значением какого либо метода: Объект.Свойство = Объект2.Метод()

Естественно, можно извлекать значение свойства:

Основная функциональность скриптов реализуется через библиотеки классов. В Windows , как правило, библиотеки классов реализованы при помощи COM -технологий.

Все классы идентифицируются по ProgID ( Programmatic Identifier ). Информация о ProgID хранится в разделе реестра HKEY _ CLASSES _ ROOT и через него определяется, какой файл *. dll , *. exe и *. ocx содержит данный объект. ProgId состоит из имени библиотеки типов и имени класса. Например, при выполнении команды

Set MyObject = CreateObject(“Scripting.FileSystemObject”)

Через реестр определяется физический файл, в котором находится библиотека Scripting и класс FSO .

Скриптовые среды (в том числе WSH ) работают с COM -объектами с определенными ограничениями. Одно из главных ограничений — по типам данных, которые могут передаваться COM -объектам. Поэтому из скриптов можно обращаться далеко не ко всем COM -объектам. COM -объекты, которые полностью соответствуют требованиям скриптов, называются объектами автоматизации ( automation objects ).

Автоматизацию, естественно, поддерживают все объекты библиотек типов WSH , а также многие другие объекты, например, все приложения MS Office — MS Word , PowerPoint и т.п. Показать пример копирования презентации и вставки в документ Word .

Очень важно уметь находить информацию о классах и тех свойствах и методах этих классов, которые можно использовать в скриптах. Для этой цели можно использовать следующие утилиты:

o наиболее мощная — OLE / COM Object Viewer из Visual Studio (запускается через среду разработки или из командной строки — oleview );

o просмотрщик встроен в VBA , который поставляется вместе с MS Office . Например, в Word 2000 нужно нажать Alt — F 11, а затем F 2 (добавить новую библиотеку можно через Tools -> Options );

o просмотрщик (наиболее слабый) встроен в PrimalScript . Кроме того, в PrimalScript встроена технология «подсказки», открывающая список доступных свойств и методов объекта.

Чтобы полностью понимать то, что показывается в просмотрщике, необходимо знать COM -технологии. При написании обычных административных скриптов рекомендуется пользоваться документацией по объектным моделям, хотя для определения дополнительных возможностей можно использовать и просмотрщики библиотек.

Наиболее важные библиотеки/объектные модели, используемые в административных целях:

WSH: преобразуем макрос VBA в скрипт VBScript

Чтобы отправить ответ, вы должны войти или зарегистрироваться

Сообщения 4

1 Тема от alexii 2011-03-31 04:12:37

  • alexii
  • Разработчик
  • Неактивен

Тема: WSH: преобразуем макрос VBA в скрипт VBScript

При автоматизации Microsoft Office средствами Windows Script Host довольно часто бывает проще записать макрос непосредственно в самом приложении Microsoft Office, а затем перенести текст полученного макроса Visual Basic for Apllication в скрипт Windows Script Host. Как правильно осуществить этот перенос?

Далее упоминания об использовании обычного скрипта *.vbs обозначены как VBS, об использовании формата скрипта *.wsf (WSH: пишем сценарии в формате WSF) — как WSF.

1. Константы

При переносе констант Microsoft Office в скрипт Windows Script Host нужно помнить следующее:

VBS: нужно вручную описать все используемые константы посредством ключевого слова Const.
WSF: достаточно добавить тэг reference, либо же использовать методику, изложенную в предыдущем пункте.

2. Оператор «:=», именованные и необязательные аргументы

Оператор «:=» присваивания значения некоторому параметру метода (используемый в макросах VBA для сокращения записи, когда задаются значения не всех параметров, либо параметры перечисляются в порядке, отличающемся от заданного прототипом) в Windows Script Host не поддерживается, поскольку Windows Script Host не поддерживает именованные аргументы, а только позиционные. Посему требуется убрать наименования аргументов (вместе с оператором «:=») и расставить аргументы в правильную позицию, так, как это описано в объектной модели того или иного метода или события. В большинстве случаев при работе с приложениями Microsoft Office необязательные аргументы допускается просто пропускать.

3. Глобальные объекты, раннее и позднее связывание

В глобальном контексте приложения Microsoft Office обычно наличествуют один или более глобальных объектов, таких, как объект Apllication целевого приложения, объекты CommandBars, FileDialog, Scripts (и т.д.) объектной модели самого Microsoft Office, объект UserForms объектной модели Visual Basic for Apllication. Ссылки на библиотеки, реализующие поддержку этих объектов изначально присутствуют в свойствах проекта VBA (\Tools\References…). В отличие от VBA, поддерживающего как раннее, так и позднее связывание, Windows Script Host поддерживает только позднее связывание при создании объектов. Исходя из вышеизложенного, надо помнить, что любой глобальный объект Microsoft Office требует явного предварительного создания перед использованием, как правило, завершения работы приложения методом «.Quit()» и очистки объектной переменной путём присвоения ей значения Nothing.

VBS:

WSF: объект может быть создан при помощи тэга object, либо может быть использована та же методика, что и для VBS.

Замечание: последний способ не рекомендуется использовать для Microsoft Word, ибо может возникать ситуация (при вызове скрипта *.wsf с параметром «/?», чтобы посмотреть справку скрипта), когда приложение останется в памяти после завершения работы скрипта. Особенности поведения приложений Microsoft Office при использовании технологии Automation изложены в KB288902: GetObject and CreateObject behavior of Office automation servers, в частности:

Note For Word, the UserControl property is read-only. It cannot be set to True or False. Word always remains running when the last reference is released.

Поэтому для Microsoft Word рекомендуется использовать методику, описанную в предыдущем пункте — непосредственное создание объекта в коде и завершение его методом «.Quit()».

4. Обработка событий

Поддержка обработки событий в Windows Script Host для объектов Microsoft Office осуществляется стандартными способами.

VBS:

WSF: можно добавить атрибут events со значением «true» в тэг «object». Кроме того, поддерживается использование методики, описанной в предыдущем пункте.

Замечание: к сожалению, большую часть событий приложений Microsoft Office обрабатывать не удаётся.

Илон Маск рекомендует:  Поддержание актуальной карты вашего сайта
Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL