Visual Basic: новости сайтов, советы, примеры кодов.
Выпуск 185.


VBNet VBMania
Голосование:

Голосования сайта VBNet.Ru. Результаты голосований передаются на сайт. Проследите, что есть соединение с интернетом.



Рассылки Subscribe.Ru
VB.NET-World
Новости сайта IgorykSoft и советы по программированию
DanSoft о Visual Basic
Visual Basic.NET Уроки.

Ссылки:

  • Улицы VB
  • Использование VB
  • Азбука VB
  • VB на русском
  • Улицы VB
  • Кирпичики VB
  • CообЧа VB
  • MDesign
  • IgorykSoft
  • DanSoft
  • Господа!!! читайте MSDN!!!

    Несколько слов от автора:

       За отсутствием кодов и неимением времени на создание новых кодов, пришлось этот раздел упразднить... Теперь будет публиковаться раздел "НеЧаВо" - Не Часто задаваемые Вопросы.
    Читайте!


    Содержание выпуска




    Книги

    Переход на VB .NET. Стратегии, концепции, код (цена ~ 158 руб.)

    Эта книга была задумана как одна из первых книг о .NET, которая ознакомит читателя с основными идеями новой архитектуры и подготовит его к знакомству с более детальной литературой, например документацией Microsoft и ее толкованиями, которая неизбежно появится на рынке. Она поможет вам взглянуть на эту технологию с позиций ваших собственных рабочих планов и быстро освоить те концепции, которые покажутся необычными для большинства прогр...

    Автор(ы): Дан Эпплман, Издательство: Питер, 2002 г.


    Программирование на VB.NET. Учебный курс (цена ~ 119 руб.)

    Эта книга является вводным курсом по изучению языка программирования Visual Basic .NET. Даны основные принципы объектно-ориентированного программирования в контексте языка VB .NET, поскольку без хорошей подготовки в этой области невозможно в полной мере пользоваться всеми преимуществами VB .NET.
    Изложены азы всех аспектов языка, которыми должен владеть любой профессиональный разработчик VB .NET

    Автор(ы): Г. Корнелл, Дж. Моррисон, Издательство: Питер, 2002 г.


    VB.NET для разработчиков (цена ~ 125 руб.)

    Основная задача книги - быстро ознакомить разработчиков Visual Basic с изменениями в .NET Framework. Программисты, использующие Java, C++, Delphi или другие инструменты разработки приложений и интересующиеся Visual Basic или технологией .NET Framework, также найдут эту книгу полезной. Хотя книга посвящена Visual Basic.NET, ее основная цель - продемонстрировать взаимодействие Visual Basic и ...

    Автор(ы): Кит Франклин, Издательство: Вильямс, 2002 г.




    Остальные книги о VB можно найти здесь.

    наверх


    Эксперт

    - Привет, Серый.
    - Угу, привет. Ты проходи, садись, я щас, с функцией тут разберусь...
    - Да я на момент. Вопросец имеется.
    - Вопросец, вопросец... Так, тут переменная не объявлена... Вопросец... С вопросами в систему, к экспертам... А тут точку не поставил! Вот она где, соб-бака!!
    - Ты че, какая система? Ты о чем?
    - О! Все, работает... Чего ты говоришь?
    - Ты про каких это экспертов тут заикаешься?
    - А-а. А ты что, первый раз слышишь, что ли? Ты на СообЧа бывал?
    - Где?!!
    - Да вот, гляди. Щас соединимся... Во! http://soobcha.ru, зришь?
    - М-да... Занятно. Так я с вопросом к тебе...
    - А я вот и говорю: туда иди, в систему "Эксперт", там ответят.
    - Это чайники, что ли, ответят?
    - Не сомневайся, ответят. Там у них такое наворочено... Короче, ты по почте вопрос свой задаешь - и все:)))))) Больше не изволь беспокоиться, там они сами будут искать ответ на твой вопрос. А через некоторое время вывалят тебе на ящик не один, а несколько ответов. Пользуйся и радуйся:)
    - А чего это они там такие добрые да услужливые? У них чего, своих проблем нет? Сколько я должен платить за такое трогательное беспокойство?
    - Ну, это немного. Меньше, чем ты думаешь:) Тебе достаточно только подтвердить правильный ответ. Давишь на соответствующую ссылку, дескать, вот этот ответ мне понравился, помог, и я доволен. Просто пустое письмо засылаешь к ним, и вся оплата. А если хочешь у них экспертом стать, то пожалуйста, регистрируйся и отвечай на вопросы.
    - Кем? Экспертом?
    - А что? Что-то ты ведь знаешь, не вчера за комп сел.
    - А на фига мне это надо? Разбираться с чужими проблемами... У меня своих - хоть отбавляй...
    - Ага. Вот ты только что спрашивал: а сколько? И если уж ты со своими проблемами обращаешься к людям, то ведь надеешься, что тебе помогут. А сам-то что, влом, что ли, помочь кому-то? Да ладно! Тебя, вобщем-то, никто и не тянет, не заставляет. А вот те, кому интересно, кому не жаль поделиться, те там и работают. Я, между прочим, давно уже с ними.
    - В смысле, экспертом, что ли, заделался? И сколько тебе платят?
    - А ты не прикалывай. Там никто никому не платит. А вот конкурсы, между прочим, проводят, и не хилые. Представляешь, за лучший ответ дают бесплатно три месяца платного хостинга, да еще домен регистрируют. За просто так. А вот тебе, если ты задашь самый лучший вопрос, тоже приз может выгореть.
    - Это как: лучший? На который никто ответить, что ли, не сможет? Так я щас таких вопро...
    - Причем тут это? Просто ты, если вопрос пишешь к ним, так сподобься хоть запятые в нужных местах поставить, там, грамотно, короче, обрисуй свой трабл.
    - Ну ладно, въехал. Ты мне вот лучше помоги с моим траблом. Мой Фотошоп не хочет по русски работать...
    - Ха, так этот трабл там уже сколько раз появлялся. У них на сайте и ответ есть... Вот, любуйся: Заходим в редактор реестра (regedit.exe). Находим ключ HKEY_LOCAL_MACHINE\System\CurrentControlSet\control\Nls\Codepage В нем изменяем значение параметра 1252 с cp_1252.nls на cp_1251.nls. Перезагружаемся...
    - Понял... погоди, запишу...
    - Да чего записывать? Шагай домой, входи на сайт и копируй...
    - Да я ссылку запишу... Слушай, а как там в эту систему вопрос задать? Вообще, как она работает?
    - Так тут же, на сайте, все есть. А вообще, можешь по почте пустое письмо загнать на mailto:reply.infoexpert@soobcha.ru, и получишь всю необходимую инфу. А вообще, ты лучше в следующий раз с вопросами не ко мне, а туда. Может, я и отвечу там.
    - А не проше тебе здесь ответить?
    - Э-э-э... Там я баллы зарабатываю...
    - А это еще зачем?
    - Ладно, мотай. Дома почитаешь, все о них узнаешь. У меня тут халтурка... Давай, пока.
    - Пока. А как ты экспертом там зарегился?
    - Иди, иди! Инфу читай...

    наверх


    НеЧаВо

    Вопрос:

    В Excel 2000 при копировании листа

    Sheets("Name").Copy After:="NameA"

    Где-то на 26-31-й копии возникает ошибка #1004 и лист не копируется. Что это за глюк? Как с ним бороться?

    Ответ:

    Используй следующий метод: не Sheets("Name").Copy, а ActiveSheet.Copy

    str1 = ActiveSheet.Name + "_svod"
    ActiveSheet.Name = "proverka"
    ActiveSheet.Copy before:=Workbooks(WBN).Worksheets("START")
    ActiveSheet.Copy before:=Worksheets(Worksheets.Count)

    zhebelev


    Вопрос:

    Как сделать, чтобы программа добавлялась в автозагрузку (не в меню "Автозагрузка", а в реестр)?

    Ответ:

    Для этого необходимо создать в разделе реестра HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run строковый параметр. В значении параметра установить путь программы.
    В модуле пишешь:

    Option Explicit
    Public Const REG_SZ As Long = 1
    Public Const REG_DWORD As Long = 4
    Public Const HKEY_LOCAL_MACHINE = &H80000002
    Public Const HKEY_CLASSES_ROOT = &H80000000
    Public Const HKEY_CURRENT_USER = &H80000001
    Public Const HKEY_USERS = &H80000003
    Public Const ERROR_NONE = 0
    Public Const ERROR_BADDB = 1
    Public Const ERROR_BADKEY = 2
    Public Const ERROR_CANTOPEN = 3
    Public Const ERROR_CANTREAD = 4
    Public Const ERROR_CANTWRITE = 5
    Public Const ERROR_OUTOFMEMORY = 6
    Public Const ERROR_INVALID_PARAMETER = 7
    Public Const ERROR_ACCESS_DENIED = 8
    Public Const ERROR_INVALID_PARAMETERS = 87
    Public Const ERROR_NO_MORE_ITEMS = 259
    Public Const KEY_ALL_ACCESS = &H3F
    Public Const REG_OPTION_NON_VOLATILE = 0
    Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long
    Declare Function RegCreateKeyEx Lib "advapi32.dll" Alias "RegCreateKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal Reserved As Long, ByVal lpClass As String, ByVal dwOptions As Long, ByVal samDesired As Long, ByVal lpSecurityAttributes As Long, phkResult As Long, lpdwDisposition As Long) As Long
    Declare Function RegOpenKeyEx Lib "advapi32.dll" Alias "RegOpenKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal ulOptions As Long, ByVal samDesired As Long, phkResult As Long) As Long
    Declare Function RegQueryValueExString Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, ByVal lpData As String, lpcbData As Long) As Long
    Declare Function RegQueryValueExLong Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, lpData As Long, lpcbData As Long) As Long
    Declare Function RegQueryValueExNULL Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, ByVal lpData As Long, lpcbData As Long) As Long
    Declare Function RegSetValueExString Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, ByVal lpValue As String, ByVal cbData As Long) As Long
    Declare Function RegSetValueExLong Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, lpValue As Long, ByVal cbData As Long) As Long
    Declare Function RegDeleteKey& Lib "advapi32.dll" Alias "RegDeleteKeyA" (ByVal hKey As Long, ByVal lpSubKey As String)
    Declare Function RegDeleteValue& Lib "advapi32.dll" Alias "RegDeleteValueA" (ByVal hKey As Long, ByVal lpValueName As String)

    'Создание нового ключа (подключа)
    Public Function CreateNewKey(lPredefinedKey As Long, sNewKeyName As String)
    Dim hNewKey As Long
    Dim lRetVal As Long
    lRetVal = RegCreateKeyEx(lPredefinedKey, sNewKeyName, 0&, vbNullString, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, 0&, hNewKey,
    lRetVal)
    RegCloseKey (hNewKey)
    End Function

    'Запись данных в ключ
    Public Function SetKeyValue(lPredefinedKey As Long, sKeyName As String, sValueName As String, vValueSetting As Variant, lValueType As Long)
    Dim lRetVal As Long
    Dim hKey As Long
    lRetVal = RegOpenKeyEx(lPredefinedKey, sKeyName, 0, KEY_ALL_ACCESS, hKey)
    lRetVal = SetValueEx(hKey, sValueName, lValueType, vValueSetting)
    RegCloseKey (hKey)
    End Function
    Public Function SetValueEx(ByVal hKey As Long, sValueName As String, lType As Long, vValue As Variant) As Long
    Dim lValue As Long
    Dim sValue As String
    Select Case lType
          Case REG_SZ
               sValue = vValue
               SetValueEx = RegSetValueExString(hKey, sValueName, 0&, lType, sValue, Len(sValue))
          Case REG_DWORD
               lValue = vValue
               SetValueEx = RegSetValueExLong(hKey, sValueName, 0&, lType, lValue, 4)

    End Select
    End Function

    'Возвращает значения записанные в ключе
    Public Function QueryValue(lPredefinedKey As Long, sKeyName As String, sValueName As String)

    Dim lRetVal As Long
    Dim hKey As Long
    Dim vValue As Variant

    lRetVal = RegOpenKeyEx(lPredefinedKey, sKeyName, 0, KEY_ALL_ACCESS, hKey)
    lRetVal = QueryValueEx(hKey, sValueName, vValue)
    QueryValue = vValue
    RegCloseKey (hKey)
    End Function

    Function QueryValueEx(ByVal lhKey As Long, ByVal szValueName As String, vValue As Variant) As Long
    Dim a As Integer
    Dim cch As Long
    Dim lrc As Long
    Dim lType As Long
    Dim lValue As Long
    Dim sValue As String

    On Error GoTo QueryValueExError
       
    'Определение размера и типа считываемых данных
    lrc = RegQueryValueExNULL(lhKey, szValueName, 0&, lType, 0&, cch)
    If lrc <> ERROR_NONE Then a = 0

    Select Case lType
       'Для символьных
       Case REG_SZ:
       sValue = String(cch, 0)
       lrc = RegQueryValueExString(lhKey, szValueName, 0&, lType, sValue, cch)
       If lrc = ERROR_NONE Then
          vValue = Left$(sValue, cch)
       Else
          vValue = Empty
       End If

       'Для числовых
       Case REG_DWORD:
       lrc = RegQueryValueExLong(lhKey, szValueName, 0&, lType, lValue, cch)
       If lrc = ERROR_NONE Then vValue = lValue
       'Для остальных не поддержанных типов данных
       Case Else
       lrc = -1
       End Select

    QueryValueExExit:
       QueryValueEx = lrc
       Exit Function

    QueryValueExError:
      Resume QueryValueExExit
    End Function

    'Удаление значений ключа

    Public Function DeleteValue(lPredefinedKey As Long, sKeyName As String, sValueName As String)

    Dim lRetVal As Long
    Dim hKey As Long

    lRetVal = RegOpenKeyEx(lPredefinedKey, sKeyName, 0, KEY_ALL_ACCESS, hKey)
    lRetVal = RegDeleteValue(hKey, sValueName)
    RegCloseKey (hKey)
    End Function

    'Удаление ключа
    Public Function DeleteKey(lPredefinedKey As Long, sKeyName As String)
    Dim lRetVal As Long
    lRetVal = RegDeleteKey(lPredefinedKey, sKeyName)
    End Function

    В примере написан полный код работы с реестром, если необходимо только записать данные, то лишнее можно убрать.
    Применение:

    Private Sub Command1_Click()
    Dim path As String
    path = "Software\Microsoft\Windows\CurrentVersion\Run"
    CreateNewKey HKEY_LOCAL_MACHINE, path
    SetKeyValue HKEY_LOCAL_MACHINE, path, "Назавание программы", "здесь пишешь полный путь программы", REG_SZ
    End Sub

    Иван


    Вопрос:

    Что бы послать почту, пишу:

    Private Declare Function ShellExecute& Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long)
    Private Declare Function GetDesktopWindow Lib "user32" () As Long

    Private Sub Label1_Click()
    'Выяываем маил с адресом
    Call ShellExecute(0&, "Open", "mailto:" + "ЛОГИН@СЕРВЕР.ru" + "?Subject=" + "'Здесь описана тема...'" + "?body=" + "'Сдесь
    нужно написать сообщение'", "", "", SW_SHOWNORMAL)
    End Sub

    Но в почтовой программе текст 'Сдесь нужно написать сообщение' выводится там где вводится тема. Помогите сделать так чтобы в текстовом поле ияображалать текст

    Ответ:

    Все дело в том что у вас получается след вызываемая комманда:
    mailto:ЛОГИН@СЕРВЕР.ru?Subject=описана тема...?body=Сдесь нужно написать сообщение
    Между Subject и Body должен быть знак (& - амперсанд), а не ? иначе ничего работать небудет!

    Александр


    Вопрос:

    Если на VB написать программу и записать на CD-R, а затем написать соответствующий autorun.inf, чтобы программа запускалась при вставке диска в привод, то если на компьютере нет нужных библиотек (например, msvbvm60.dll), то программа не будет работать. Как быть?

    Ответ:

    Надо просто поместить все необходимые библиотеки в корневой каталог твоего CD. Будет работать.

    Sobic


    Вопрос:

    Как запустить файл .mp3?

    Ответ:

    В разделе формы General Declarations объявляем следующую API-функцию:

    Private Declare Function mciExecute Lib "winmm.dll" (ByVal lpstrCommand As String) As Long

    'чтобы воспроизвести файл
    Private Sub Command2_Click()
    Call mciExecute("play d:\Music01.mp3")
    End Sub

    'чтобы закрыть файл
    Private Sub Command1_Click()
    Call mciExecute("close d:\Music\01.mp3")
    End Sub

    Иван




    наверх


    Мои программы

    BalloonMessage for MS Agent

       BalloonMessage for Microsoft Agent реализует диалог программы с пользователем, используя при этом технологию Microsoft Agent. OCX реализует три типа диалоговых окон: InputBox, MsgBox и MsgLabels.

    Автора: Шатрыкин Иван и Павел Сурменок.

    наверх


    Вопрос/Ответ

    Здесь Вы можете задать вопрос, или ответить на уже имеющиеся вопросы.

    Вопросы:


    Автор вопроса: Alex

    Ответ ожидается по этому адресу

       Каким образом можно отловить сигналы с COM порта, например с инфры, подключенного к нему?


    Автор вопроса: Валера

    Ответ ожидается по этому адресу

       Если нет AddressOf инструкции в VBA, то как передать в программу адрес другой программы? Можно ли через VarPtr (имя программы)?


    Автор вопроса: XXX

    Ответ ожидается по этому адресу

       Как сделать, чтобы мою прогу нельзя было закрыть через Ctrl+Alt+Del?


    Автор вопроса: Роганов Владимир

    Ответ ожидается по этому адресу

       В модуле пишу:
    Public Declare Function SetCursorPos Lib "user32" (ByVal x As Long, ByVal y As Long) As Long
    При выполнении выдаётся ошибка: "Constants, fixid-lenght strings, arrays, user defined types and Declare statements not allowed as Public members as object modules". Что делать?


    Автор вопроса: Роганов Владимир

    Ответ ожидается по этому адресу

       Какой контрол будет распологать папки так, как в моём компьюторе(крупные значки, отображать как веб страницу)?


    Автор вопроса: Taras Prikhodko

    Ответ ожидается по этому адресу

       Как получить список всех папок диска в виде полного пути для каждой папки?


    Автор вопроса: Мелёшин Андрей

    Ответ ожидается по этому адресу

       Как сделать Shape1 или Command1 поверх TextBox?


    Автор вопроса: Сергей Гаан

    Ответ ожидается по этому адресу

       У меня вопрос про WindowsXP Visual Style. Как написано в MSDN и Интернете, я создал в папке с программой файл .manifest. Однако программа работает только с включенной опцией совместимости, а если она выключена, то программа вообще не запускается. Я даже пробовал запихнуть этот manifest в exe-файл (с помощью проги PE Explorer). Результат тот же. Кто знает, подскажите что надо сделать, чтобы прога работала без совместимости.


    Автор вопроса: Роман

    Ответ ожидается по этому адресу

       Как можно из приложения написанного на VB6 отключить базу данных от SQL Server Enterprise Manager?


    Автор вопроса: OXYGEN

    Ответ ожидается по этому адресу

       В ресурсах приложения есть несколько файлов формата BMP. Как сделать, чтобы при загруяке формы в контроле picture1.picture проиявольно (!) устанавливалась любая из этих картинок.


    Автор вопроса: OXYGEN

    Ответ ожидается по этому адресу

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




    Ответы:


    Вопрос:

       Как с помощью нашего любимого VB сделать скриншот и записать его в jpg?

    Ответ:

    Автор ответа: valix

    Ставишь на форму PictureBox:
      
    'API
    Private Declare Function BitBlt Lib "gdi32" (ByVal hDestDC As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long
    Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
    Private Declare Function GetDesktopWindow Lib "user32" () As Long
      
    'код
    Dim sw As Long, sh As Long
    sw = Screen.Width: sh = Screen.Height
    Picture1.AutoRedraw = True
    Picture1.ScaleMode = vbPixels
    Picture1.Width = sw
    Picture1.Height = sh
    BitBlt Picture1.hDC, 0, 0, sw, sh, GetDC(GetDesktopWindow), 0, 0, vbSrcCopy
    SavePicture Picture1.Image, "c:\screenshot.bmp"
      
    В jpg стандартными функц. VB сохранить не получится, надо юзать спец. DLL.


    Вопрос:

       А есть в VB 6.0 какой-нибудь контрол, чтобы при передачи в него данных из TextBox он их отображал в HTML?

    Ответ:

    Автор ответа: valix

    Есть компонент такой Microsoft Internet Controls:
      
    Project > Components > Microsoft Internet Controls
      
    Кидаешь на форму WebBrowser и пишешь:
      
      
    open "c:\temp.htm" for output as #1
    print #1,text1.text;
    close #1;
    webbrowser1.navigate "c:\temp.htm"


    Вопрос:

       Как нажать "Alt" + "TAB" програмно при помощи VB 6.0.

    Ответ:

    Автор ответа: valix

    'API
      
    Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
    Private Const KEYEVENTF_KEYUP = &H2
    Private Const VK_TAB = &H9
    'Код
      
    keybd_event 18, 0, 0, 0
    keybd_event VK_TAB, 0, 0, 0
      
    keybd_event VK_TAB, 0, KEYEVENTF_KEYUP, 0
    keybd_event 18, 0, KEYEVENTF_KEYUP, 0


    Вопрос:

       По мере изучения VB столкнулся с двумя проблемами: 1) Нужно из формы запустить посторонний exe-шник с ключами, например winrar.exe 2) Часто встречал, что в VB-шных прогах для вывода отчетов использовался Word. Заранее созданный шаблон имел *.doc формат. Причем для заполнения данными в нужные ячейки таблицы помещали так называемые маркеры. Например: Поставщик: %001 Покупатель: %002 и т.п. Вот и я бы хотел реализовать нечто подобное в своих прогах.

    Ответ:

    Автор ответа: KAS (c)

    Что бы запустить exe'шник:

    shell "winrar.exe -a"



    Ответ:

    Автор ответа: Alexander

    1. Надо использовать Shell:
      
    Dim ReturnValue, I
    ReturnValue = Shell("calc.exe", 1) ' запуск калькулятора
    AppActivate ReturnValue ' активация калькулятора
    For I = 1 To 100 ' установка счётчика
        SendKeys I & "{+}", True ' посылаем нажатия клавиш
    Next I ' с текущим I
    SendKeys "=", True ' Получаем "Всего"
    SendKeys "%{F4}", True ' Посылаем ALT+F4 для закрытия калькулятора

    2. Пример моего использования Word 97-2002 как "генератора отчётов". В References установим ссылку на Microsoft Word 9.0 Object Library
      
    Attribute VB_Name = "PrintForm"
      
    ' agorby@hotmail.com
    Declare Function FindWindow Lib "user32" Alias _
    "FindWindowA" (ByVal lpClassName As String, _
                         ByVal lpWindowName As Long) As Long
      
    Declare Function SendMessage Lib "user32" Alias _
    "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, _
                         ByVal wParam As Long, _
                         ByVal lParam As Long) As Long
      
    Const TemplatePath As String = "C:\Program Files\Common Files\Счет.dot"
    Sub InitForm()
      
    Dim appWD As Word.Application
    Dim nNewIndDoc
    Dim nRow
    nRow = ActiveCell.row
    ' Проверка, выполняется ли Microsoft Word.
    On Error Resume Next ' Отложенный перехват ошибок.
    ' Функция GetObject, вызванная без указания первого аргумента,
    ' возвращает ссылку на экземпляр приложения. Если это приложение
    ' не запущено, возвращается ошибка. Обратите внимание на запятую,
    ' стоящую на месте отсутствующего первого аргумента.
    Set appWD = GetObject(, "Word.Application")
    If Err.Number <> 0 Then 'Word Was Not Running = 429
         Err.Clear ' Очищаем объект Err на случай ошибки.
         Set appWD = CreateObject("Word.Application")
    Else
         DetectWord
    End If
    On Error GoTo 0
      
    appWD.Visible = False
    appWD.Documents.Add Template:=TemplatePath, NewTemplate:=False
      
    appWD.Documents.Add Template:=TemplatePath
    appWD.Activate
    appWD.ScreenUpdating = False
      
    appWD.Selection.Goto What:=wdGoToBookmark, Name:="Плательщик"
    appWD.Selection.TypeText Text:="Мой текст"
    .....
      
    appWD.ActiveDocument.PrintOut
    appWD.ActiveDocument.Close SaveChanges:=wdDoNotSaveChanges
      
    End Sub
      
    Sub DetectWord()
         ' Процедура находит выполняемый Word и регистрирует его.
         Const WM_USER = 1024
         Dim hWnd As Long
         
         ' Если Word выполняется, этот вызов API возвращает его дескриптор.
         hWnd = FindWindow("OpusApp", 0)
         If hWnd = 0 Then ' 0 означает, что Word не выполняется.
             Exit Sub
         Else
             ' Word выполняется. Используйте функцию API SendMessage, чтобы ввести его в таблицу выполняемых объектов (Running Object Table).
             SendMessage hWnd, WM_USER + 18, 0, 0
         End If
    End Sub


    Вопрос:

       У меня тут такая проблема - не работает SQL-запрос с предикатом LIKE. Вот код:

    Set db = New ADODB.Connection
    db.ConnectionString = "Driver=Microsoft Access Driver (*.mdb);DBQ=" & App.Path & "\MP3Base.mdb"
    db.Open
    Set DynSet = New ADODB.Recordset
    DynSet.ActiveConnection = db
    SQL = "SELECT * FROM Таблица1 WHERE Путь LIKE '*чего-то там*'"
    DynSet.Open SQL

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

    Ответ:

    Автор ответа: Tatyana L. Hordynskaya

    Попробуй LIKE '%чего-то там%'



    Ответ:

    Автор ответа: Sergey

    А что если переписать запрос так:

    SQL = "SELECT * FROM Таблица1 WHERE Путь LIKE '%чего-то там%'"



    Ответ:

    Автор ответа: Alexey Pavlov

    В последних версиях ADO оператор LIKE работает с символом '%' в аксессовских базах, так же как и с MSSQL. Символ '*' не используется.



    Ответ:

    Автор ответа: Alexander

    На эти грабли я сам в своё время наступил! Причём, сначала увидел как надо, а после экспериментов с Access вылетело из головы! Спасибо, люди добрые надоумили вспомнить!
    Итак, "фокус" состоит в следующем: там, где мы считаем, чтот обобщаем через знак '*', в VB используется ... '%'. Об этом написано в документации!
      
    Т.е.
    SQL = "SELECT * FROM Таблица1 WHERE Путь LIKE '*чего-то там*'"
      
    надо записать как

    SQL = "SELECT * FROM Таблица1 WHERE Путь LIKE '%чего-то там%'"

    Работает как часики!


    Вопрос:

       Подскажите пожалуйста такую вещь - есть процедура, которая выделяет цветом определённый диапазон ячеек в MSFlexGrid, но при щелчке по любой из ячеек выделение цветом теряется. Как зафиксировать цвет выделеных ячеек? Процедура ниже...

    Sub SelLineGrid()
    Dim ir As Integer, istr As Integer 'номер строки
    ir = 1
    Do Until ir = 6
    If flxDivizion.TextMatrix(ir, 1) = txtTeam Then istr = ir
    ir = ir + 1
    Loop
    flxDivizion.row = istr
    flxDivizion.Col = 0
    flxDivizion.RowSel = istr
    flxDivizion.ColSel = 7
    flxDivizion.BackColorSel = RGB(150, 150, 250)
    End Sub

    Ответ:

    Автор ответа: Andrew Isakov

    Прога твоя работает ПРАВИЛЬНО ;-) Ты используешь свойство Selected. Вместо выделения ячеек, просто изменяй цвет фона КАЖДОЙ нужной тебе ячейки…




    Можете заполнить эту форму, либо отослать вопрос СЮДА

    Форма для добавления нового вопроса в этот раздел. Информация отсылается по E-mail владельцу сайта.
    Текст сообщения:
    Ваше имя
    E-mail для ответа

    наверх


    Выпуск подготовили:

    Сурменок Павел