Главная Гостевая Форум INFA

Программируем на Visual Basic'e:

Часть 1/Часть 2/Часть 3/Часть 4/Часть 5/Часть 6/Часть 7/Часть 8/ Часть 9/Часть 10/Часть 11/Часть 12 /Часть 13/Часть 14 /Часть 15

ШАГ 141

Что такое VBA? или Введение.

И так что такое VBA? Полностью название языка расшифровывается так: Visual Basic for Applications. Он поставляется с пакетом программ Office. Он создан, для того чтобы делать программы пакета Office под определенного пользователя. Т.е. с его помощью можно делать программы, например для Worda, которые будут легко выполнять однообразную работу за пользователя. В этой статье мы научимся работать с так называемыми «Пользовательскими формами» написав маленькую программу «Конвертор скорости км/ч в м/c».

Эта статья рассчитана на тех, кто уже умеет программировать (хотя бы чуть-чуть) на Visual Basic. Поэтому я не стану объяснять, что такое переменные, как их записывать, что такое элементы управления и прочее...

  • автор шага: Ашот Даниелян
  • Сайт: Visual Basic
  • Мыло: ashdan87@mail.ru

    ШАГ 142

    Различия и сходства между VBA и Visual Basic.

    Сразу оговорюсь, всех различий и сходств я не знаю. Я назову только основные сходства и различия языков. Первое и самое главное: программы написанные на VBA невозможно компилировать в отдельные EXE файлы для Windows, для их работы необходимы окна тех программ из пакета Offica для которых они написаны, например Word, Excel, PowerPoint, Access. В принципе написания программного кода эти языки очень похожи за исключением некоторых случаев, которые не рассматриваются в данном примере. Интерфейсы двух языков очень похожи, и поэтому кто умеет работать с Visual Basicom не встретит много трудностей в использовании VBA.

  • автор шага: Ашот Даниелян
  • Сайт: Visual Basic
  • Мыло: ashdan87@mail.ru

    ШАГ 143

    Создание программы на VBA с использованием USER FORM

    А сейчас, как я и обещал, мы начнем писать 1 программу с использованием User Form. Эта программа будет рассчитана для Word. Чтобы начать писать программу запустим Word (вы должны знать сами как это делать). После того как текстовый редактор откроется, запустим VBA. Есть два варианта запуска: 1 короткий, нажать Alt + F11, 2 длинный (вы его должны знать тоже): «Сервис * Макрос * Редактор Visual Basic». В открывшемся окне нажимаем «Insert * User Form». Должно получиться примерно так:



    Все с объяснениями, кажется, я закончил, приступим к созданию самой программы. Меняем свойство Caption формы на: Программа конвертор. На форме располагаем объект Frame с именем Frame 1 и свойством Caption = км/ч в м/с. В этот объект вставляем 2 текстовых поля с именами TextBox1 TextBox2. У TextBox2 свойство Locked = True (чтобы в него нельзя было ввести текст) .Напротив 1 текстового поля ставим метку (Label) со свойством Caption = «км/ч», напротив второго, метку с Caption = «Результат в м/с». Под текстовыми полями ставим кнопку с именем CommandButton1 и Caption = «Вставить результат в документ». У вас должна получится примерно такая форма:



    Приступим к созданию текста программы. Совсем забыл сказать: Наша программа будет (как вы уже наверное догадались) переводить км/ч в м/с и вставлять результат в документ Word.

    Вычисление результата мы вынесем в отдельную процедуру Scet, которую будем вызывать из события TextBox1_ Change (оно работает при вводе текста в текстовое поле). Результат вычислений будет вставляться в TextBox2. Также, перед решением (в процедуре Scet) мы будем проверять, правильное ли введено значение в TextBox1 (оно должно быть только числовым и не быть меньше нуля), для этого будем использовать функции IsNumeric и Val (их синтаксис и применение смотрите в справке). Если пользователь введет неправильное значение, будет блокироваться кнопка (свойство Enabled = False). В кнопке будем использовать событие Click. При нажатии на нее будем проверять есть ли открытый документ Word, если его нет, то откроем его : If Documents.Count = 0 Then Documents.Add. Дальше мы будем вставлять в документ результаты наших вычислений, да непросто цифры голые вставлять, а целую фразу: Selection.Text = TextBox1.Text & " км/ч = " & TextBox2.Text & " м/с". Теперь надо сделать так, чтобы наша фраза не стирала предыдущий текст (т.е снять с нее выделение). Для этого есть функция Collapse, ее синтаксис: Selection.Collapse Direction:=wdCollapseEnd (подробнее про нее смотрите в справочной системе). Дальше я привожу полный текст программы, надеюсь вы с ней разобрались:

    Private Sub CommandButton1_Click()
    If Documents.Count = 0 Then Documents.Add
    Selection.Text = TextBox1.Text & " км/ч  = " & TextBox2.Text & " м/с"
    Selection.Collapse Direction:=wdCollapseEnd
    End Sub
    
    Private Sub TextBox1_Change()
    Scet
    End Sub
    
    Private Sub Scet()
    Dim rez As Double
    If IsNumeric(TextBox1.Text) = True And Not Val(TextBox1.Text) = 0 Then
    rez = ((TextBox1.Text) * 1000) / 60 / 60
    TextBox2.Text = rez
    CommandButton1.Enabled = True
    Else
    TextBox2.Text = ""
    CommandButton1.Enabled = False
    End If
    
    End Sub
     

    Теперь сделаем так, чтобы можно было запускать программу из Word’a. Для удобства переименуем нашу форму в Perevod (свойство Name формы). Потом создадим модуль (Insert*Module) присвоим ему имя Convert (свойство Name модуля) и напишем туда следующий текст:

    ConvertCount()
    Perevod.Show
    End Sub 

    Теперь осталось вытащить нашу программу на одну из панелей Office’a. Для этого нажимаем на Другие кнопки (серый треугольник в конце панели инструментов), в длинном списке кнопок нажимаем на «Настройки». Перед вами откроется окно «Настройка», выберите в нем пункт «Команды». В разделе «Категории» находим и кликаем на «Макросы». С право от «Макросов» находится раздел «Команды», в нем выбираем Normal.Convert.ConvertCount и перетаскиваем на одну из приглядевшихся вам панелей инструментов. Эту кнопку можно отредактировать, вместо названия поставить картинка, как у других кнопок.

    На этом знакомство с User Form закончено. Если вам понравилась моя статья или возникли какие-нибудь вопросы ко мне шлите их мне на мыло. Также, я буду рад вашим исходникам написанным на VB6.

  • автор шага: Ашот Даниелян
  • Сайт: Visual Basic
  • Мыло: ashdan87@mail.ru

    ШАГ 144

    Контрол Winsock. Узнаем свой IP адрес

    Этот контрол нужен в основном для связи с удаленным компом, но можно с ним делать и другие штуки. Например, щас мы узнаем свой IP адрес. Создай новый проект, нажми на Project/Components/MicrosoftWinsock Control 6.0, и кинь на форму появившийся на панели инструментов Winsock1, и кнопку. Код:
    Private Sub Command1_Click()
    MsgBox Winsock1.LocalIP
    End Sub

    ШАГ 145

    Контрол Winsock. Ода о WinSock

    WinSock - очень мощное средство Visual Basic для коммуникаций. Он позволяет работать со всеми роспостраненными протоколами связи: SMTP и POP3 (E-Mail), FTP, HTTP (WWW), NNTP (News). Но наиболее интересной темой является, на мой взгляд, создание приложений клиент - сервер. Именно клиент - серверные приложения позволяют при связи между двумя компютерами, обменеватся данными, первый из которых будет подавать запросы, а второй - исполнять их. Если ты понял всю тему, то, наверное, уже догадался что именно этим способом ты сможешь испортить жизнь своему учителю информатики!
    Ну а если не догадался - обясню. Нам необходимо создать две проги, одна - клиент, вторая - сервер. Клиент запущен на твоем компе, а сервер на компе учителя информатики и работает в скрытом режиме (то есть невидим!). У тебя, на клиенте есть кнопка "Убить гада!" и когда ее нажать, то клиент посылает серверу команду "Убить гада!". А в сервере есть код, который перезагружает комп и, кроме него, есть росписание: "Если клиент подал команду "Убить гада!" - перезагрузить комп. Втыкаешь?

    Хорошо, а теперь будем писать проги. Прога должна взять на себя контроль над CD-ROM учителя информатики.
    Сначала создадим сервер.
    Создай стандартный проект, и добавь компонент "MicrosoftWinSock control". В роздел "General" скопируй етот код:
    Private Declare Function mciSendString Lib "winmm.dll" Alias "mciSendStringA" (ByVal lpstrCommand As String, ByVal lpstrReturnString As Any, ByVal uReturnLength As Long, ByVal hwndCallback As Long) As Long ' декларируем апи функцию для конторля над CD-ROM
    Dim Status As Integer 'обявляем переменную - статус CD-ROM

    В событии Form_Load ты должен указать серверу, какой порт он будет слушать и заставить его слушать! Для этого пишем вот такой код: Private Sub Form_Load()

    Winsock1.LocalPort = 1000 ' указываем какой порт должен слушать сервер

    Winsock1.Listen ' заставляем его слушать

    End Sub

    Теперь нам надо написать процедуру обработки запроса на соединение. Для етого напишите такой код:
    Private Sub winsock1_ConnectionRequest(ByVal requestID As Long)

    If Winsock1.State <> sckClosed Then Winsock1.Close ' если сервер не закрыт, то закрываем его
    Winsock1.Accept requestID ' принимаем запрос
    End Sub

    Еще осталось написать процедуру приема данных:

    Private Sub winsock1_dataArrival(ByVal BytesTotal As Long)
    Dim Data As String 'обявляем переменную для хранения данных
    Winsock1.GetData Data 'присваиваем переменной Data все принятые данные
    If Data = "open" Then Status = mciSendString("Set CDAudio Door Open Wait", 0&, 0, 0)

    ' ну а здесь - инструкция, которая говорит: если Data равно "open", тогда открываем CD-ROM If Data = "close" Then Status = mciSendString("Set CDAudio Door Closed Wait", 0&, 0, 0)
    'а здесь инструкция, которая говорит, если Data равно "close", тогда закрываем CD-ROM

    End Sub

    Все!Сервер готов!
    Теперь ты должен создать клиент.
    Открой Visual Basic еще раз (первый не закрывай).
    Создай стандартный проект, и добавь компонент "MicrosoftWinSock control". Добавь кнопку и назови её "open", а в свойстве caption напиши "Открыть". Добавь еще одну кнопку и назови её "close", а в свойстве caption напиши "Закрыть".
    В событии Form_Load напиши код:
    Public Sub Form_Load ()
    Winsock1.RemoteHost = "127.0.0.1" ' указываем адресс сервера (здесь ты указал свой же адресс)
    Winsock1.RemotePort = 1000 ' указываем порт сервера (в нашем случае 1000)
    Winsock1.Connect ' вызываем коннект
    End Sub

    В коде кнопки "open" пишешь:

    Private Sub open_Click()
    Winsock1.SendData "open" ' посылаем серверу комманду "open"
    End Sub

    В коде кнопки "close" пишешь:

    Private Sub open_Click()
    Winsock1.SendData "close" ' посилаем серверу комманду "close"
    End Sub

    Готово!
    Теперь запусти сервер и после этого запусти клиент. Нажми на кнопку "Открыть", потом на "Закрыть". Круто?
    Можно также использовать это в сети, запустив на одном компе сервер, а на другом клиент, но при этом надо изменить ІР "127.0.0.1" на ІР компа, где будет запущен сервер.

  • Автор шага: Ракочий Назар
  • Страна(город): Укранина(Тернополь)
  • Сайт: newrate.boom.ru
  • Мыло: dasharm@mail.ru
  • Дата написания: 5.07.2003

    ШАГ 146

    Ссылки

    Т.к. мой учебник еще пишется, а в тебе бурлит инстинкт познания (Во как сказал!), то я решил здесь написать самые лучшие на мой взгляд ссылки (ВНИМАНИЕ!!! это не коммерческие ссылки, я писал их не с целью чтоб мне отвалили немного бабла (хотя все равно влятри кто отвалит), или еще что - нибудь сделали, а с целью сэкономить твое драгоценное время, которое ты потратишь в поисках хорошего VB сайта. Все сайты представлены в порядке убывания, от крутого к стремному.

    1. VBStreets.narod.ru - Сайт супер! Статей, иходников, приколов до хрена, есть форум, чат, проги, библиотеки, справочники, VB журналы, игры... С сайта качай последние версии этого учебника.
    2. VBCode.FAQ - этот сайт содержит столько инфы о VB, сколько VBStreets.ru может только мечтать, короче сайт супер, и ему пока нет равных(если на него зайдешь, то зайди в раздел "Примеры").
    3. VB Шаг за Шагом - на этом сайте тоже много инфы
    4. VBKODERs - на этом сайте ты можешь найти много всего, но это неважно, самое главное то, что на нем есть VB Журнал.
    5. VBNet.ru - на сайте есть очень много статей, исходников, примеров...

    Ну на этом больше я не чего не нашел, если у тебя есть ссылка на сайт, который ты считаешь достойным быть в моем учебнике, оставляй у меня на форуме его ссылку.


    Ну вроде все. Последние версии этого учебника скачивай с моего сайта vbstreets.narod.ru, а на этом я пока закончу. В этот учебник не вошли темы: Создание библиотек; Классы модули - с чем их едят?; VBScript; DerectX ... Эти темы, и другие будут написаны в ближайшее время, так что качай последние версии с моего сайта. Если ты сам написал статью, исходник - отсылай мне на мыло: padre03@mail.ru - я ее обязательно размещу на своем творенье. Если у тебя есть какие - нибудь вопросы, пиши мне, и я на них отвечу, или оставь их на форуме. Покиданьки булы!

    автор учебника: Падре
    Дата создания: 22 мая 2003 года

    Место под Банеры

    Официальный сайт учебника - 'Программируем на Visual Basic'