Выбрать дату в календареВыбрать дату в календаре

Страницы: 1 2 3 4 5 След.
Ошибка при попытке вывода InputBox, Возникновение ошибки после перехода на Виндовс 10 x64
 
Доброго времени суток!
Для подтверждения пользовательских прав использую функцию ввода пароля доступа в InputBox. Для этого использую следующий скрипт:
Код
Private Const HC_ACTION = 0
Private hHook As Long
Private Const HCBT_ACTIVATE = 5
Public Const WH_CBT = 5
Public Const EM_SETPASSWORDCHAR = &HCC
Private Declare PtrSafe Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Declare PtrSafe Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
Private Declare PtrSafe Function CallNextHookEx Lib "user32" (ByVal hHook As Long, ByVal ncode As Long, ByVal wParam As Long, lParam As Any) As Long
Private Declare PtrSafe Function GetModuleHandle Lib "kernel32" Alias "GetModuleHandleA" (ByVal lpModuleName As String) As Long
Private Declare PtrSafe Function SetWindowsHookEx Lib "user32" Alias "SetWindowsHookExA" (ByVal idHook As Long, ByVal lpfn As Long, ByVal hmod As Long, ByVal dwThreadId As Long) As Long
Private Declare PtrSafe Function UnhookWindowsHookEx Lib "user32" (ByVal hHook As Long) As Long
Private Declare PtrSafe Function SendDlgItemMessage Lib "user32" Alias "SendDlgItemMessageA" (ByVal hDlg As Long, ByVal nIDDlgItem As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Private Declare PtrSafe Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hWnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long
Private Declare PtrSafe Function GetCurrentThreadId Lib "kernel32" () As Long

Public Function vbInputBox(Prompt As String, Optional Title As String, Optional Default As String, Optional Xpos As Single, Optional Ypos As Single, Optional Helpfile As String, Optional Context As Long) As String
    hHook = SetWindowsHookEx(WH_CBT, AddressOf CBTProc, Application.Hinstance, 0)
    vbInputBox = InputBox(Prompt, Title, Default, Xpos, Ypos, Helpfile, Context)
End Function

Private Function CBTProc(ByVal lMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    Dim hwndEditControl As Long
    If lMsg = HCBT_ACTIVATE Then
        hwndEditControl = FindWindowEx(wParam, 0, "Edit", "")
        If hwndEditControl Then SendMessage hwndEditControl, EM_SETPASSWORDCHAR, Asc("*"), 0
        UnhookWindowsHookEx hHook
    End If
    CBTProc = 0
End Function

Public Function NewProc(ByVal lngCode As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    Dim RetVal
    Dim strClassName As String, lngBuffer As Long
    If lngCode < HC_ACTION Then
        NewProc = CallNextHookEx(hHook, lngCode, wParam, lParam)
        Exit Function
    End If
    strClassName = String$(256, " ")
    lngBuffer = 255
    If lngCode = HCBT_ACTIVATE Then
        RetVal = GetClassName(wParam, strClassName, lngBuffer)
        If Left$(strClassName, RetVal) = "#32770" Then SendDlgItemMessage wParam, &H1324, EM_SETPASSWORDCHAR, Asc("*"), &H0
    End If
    CallNextHookEx hHook, lngCode, wParam, lParam
End Function

Public Function InputBoxDK(Prompt As String, Optional Title As String, Optional Default As String, Optional Xpos As Long, Optional Ypos As Long, Optional Helpfile As String, Optional Context As Long) As String
    Dim lngModHwnd As Long, lngThreadID As Long
    On Error GoTo ExitProperly
    lngThreadID = GetCurrentThreadId
    lngModHwnd = GetModuleHandle(vbNullString)
    hHook = SetWindowsHookEx(WH_CBT, AddressOf NewProc, lngModHwnd, lngThreadID)
    If Xpos Then
        InputBoxDK = InputBox(Prompt, Title, Default, Xpos, Ypos, Helpfile, Context)
    Else
        InputBoxDK = InputBox(Prompt, Title, Default, , , Helpfile, Context)
    End If
ExitProperly: UnhookWindowsHookEx hHook
End Function
После перехода с Вин7 х32 на Вин10 х64, при попытке выполнения Public Function InputBoxDK,  получаю сообщение об ошибке типа: Type Mismatch. Ругается на строку: hHook = SetWindowsHookEx(WH_CBT, AddressOf NewProc, lngModHwnd, lngThreadID), а именно на ..., AddressOf NewProc, ...

Подскажите пожалуйста, как это побороть?
Заранее огромное спасибо всем!
B Win 10 oтсутствует контрол ListView и TreeView, Возникновение ошибки после перехода на Виндовс 10
 
Доброго времени суток! Давиче на предприятии мне установили новый ПК под Вин 7. Начал тут же получать ошибки от ВБА. Установил и зарегистрировал новый MSCOMCTL.OCX для 64бит системы. Переделал запросы. Но осталась проблема с отсутствием контролов ListView и TreeView для UserForm. Подскажите как это побороть?
Заранее огромное спасибо!
Проверка двух массивов на редактирование, удаление или добавление данных
 
Доброго времени суток!
Существует база в mySQL которая управляется через форму.
При закрытии формы необходимо выполнить проверку данных: были ли добавлены, удалены или отредактированы какие либо данные. В случае обнаружения оных, внести изменения в БД.
Решил выполнять проверку циклично: сравнивая поэтапно одно значение с другим. Но как бы не крутил, то удаленные не могу определить, то новые не вижу. Нашел единственный выход: циклично проверить удаленные и редактируемые, а затем новым циклом найти добавляемые значения. (см. файл). Но как-то не "камельфо".
Подскажите пожалуйста, может есть более корректный способ?
Заранее огромное спасибо!

P.S. Пример выполнил за счет двух ListBox-ов с данными.
Ошибка method 'open' of object '_Recordset' failed при выполнении запроса, Запрос к MySQL
 
Доброго времени суток!
На компьютере есть установлен сервер. Установил также и ODBS Driver (конектор).
Подключение к серверу из ВБА получается, но вот выполнить запрос - никак.
При этом через консоль сервера или через "Использование источника данных" в эксель, запрос выполняется успешно.
Подскажите пожалуйста, что не так?
Код
    Dim sSQL As String
    Set FConn = New ADODB.Connection
    Set pFilter = New ADODB.Recordset
    pFilter.CursorLocation = adUseClient
    FConn.Open "DRIVER={MySQL ODBC 5.1 Driver}; SERVER=localhost; USER=root; PASSWORD=MyPassword; Option=3"
    sSQL = "SELECT * FROM keep_3.keep"
    pFilter.Open sSQL, FConn.ConnectionString, adOpenKeyset, adLockOptimistic
    If pFilter.RecordCount > 0 Then
    ...
ошибка возникает на строке:
Код
pFilter.Open sSQL, FConn.ConnectionString, adOpenKeyset, adLockOptimistic
Заранее всем спасибо за помощь!
Маска ввода домашнего адреса, может кому пригодится
 
Доброго времени суток!
Задался вопросом создания маски ввода домашнего адреса в одной строке. Пока, немного конечно, "костылем", но вроде работает.
Буду рад любым советам или критике.
Заранее спасибо всем и успехов!
Использование формулы записанной в TextBox
 
Доброго времени суток!
Подскажите пожалуйста, можно ли и как (если можно) использовать формулу которая написана в TextBox?
Заранее всем спасибо!
Изменить цвет ячеек в зависимости от условий макросом
 
Доброго времени суток!
Есть таблица 12х31 (годовой график выходов на работу). Необходимо закрасить другим цветом те ячейки, которые соответствуют дням отсутствующим в месяце указанного года (т.е 29,30,31 февраля, 31 апреля и т.д.). С этой задачей легко справляется УФ. Но проблема в том, что далее мне необходимо будет циклом заполнить график значениями из формы. А XL уперто не хочет воспринимать заливку УФ как другой цвет. Подскажите пожалуйста, как сменить цвет ячеек макросом? Заранее огромное спасибо всем!
П.С. Офис 2003 года
Ошибка при создании контекстного меню на UserForm, До сегодня всё работало
 
 Доброго времени суток!
Есть файл с формой на которой по нажатию на Label появляется конт.меню. До сегодняшнего дня всё работало замечательно. Сегодня стал получать ошибку: "Method Add of object _CommandBars failed". Файл в сетевом доступе и открывается только в режиме чтения. Ошибка появляется только на одной машине. На остальных всё нормально работает. Пробовал переустановить офис, но ситуация не изменилась.
На всех машинах Вин ХР и офис 2003 SP3.
Заранее огромное спасибо всем!
Редактирование ячеек ListView, Может кому пригодится
 
Всем доброго времени суток!
Столкнувшись с отсутствием возможности редактирования ячеек ListView решил это дело подправить. Вот что получилось.
P.S. Думаю такой подход подойдет и к ListBox, но не проверял.
Буду признателен за критику и советы.
Всем успехов!
Получить данные из MySQL, Прошу помощи в построении запроса
 
Доброго времени суток всем!
  В MySQL есть БД "jornal" с таблицей "adres". Таблица состоит из столбцов | iD_Adres | Город | Улица | Дом | Буква | Корп | Кв |. Необходимо произвести поиск по таблице согласно образца адреса который находится в TextBox. Маска адреса выглядит так: "Кропивницький, просп. Леваневского, 24-А корп.1 кв.101", но при поиске пользователь может указать и что-то одно к примеру только № квартиры. В таком случае образец будет таким: "кв.101".
  Для этого решил сделать поиск по базе превращая  значения строк в маску:
Код
"SELECT * " & _
"FROM (SELECT (IF(Город='Кропивницький','',Город & ', ')  & Улица & ', ' & IF(Дом>'', Дом,'') & IF(Буква='','','-' & Буква) & IF(Корп>0,' корп.' & Корп,'') & IF(Кв>0,' кв.' & Кв,'')) AS AD From jornal.adres) AS t1 " & _
"WHERE AD LIKE '%" & Me.TB3.Text & "%'"
Recordset возвращает 17 строк, но все пустые. Подскажите пожалуйста, как найти все строки в которых есть сходство с указанным значением? Всем спасибо заранее!
П.С. прошу меня простить если не очень четко объяснил.
Как запустить файл .frm с помощью VBA
 
Доброго времени суток всем!
При удалении UserForm из книги, эксель предлагает её сохранить. В результате появляется два файла с расширением .frm ( собственно сама форма ) и .frx (не знаю зачем нужен). В дальнейшем, при необходимости, файл .frm можно импортировать и использовать в любую книгу эксель. А можно ли использовать файл .frm средствами VBA без импорта в книгу? Заранее спасибо всем!
Ошибка 1004 "Не найден макрос..."
 
 Доброго времени суток всем!
Столкнулся с проблемкой и не как не могу понять её причины ибо всё вроде бы верно и мало того, в созданном по аналогии варианте (см.файл), всё работает замечательно.
К сути: Из формы файла1 открываем файл2. Из ListBox файла2 передаем значение в макрос файла1. В данном варианте всё работает. Но в оригинале получаю ошибку "1004 Не найден макрос qwe"
Может кто знает возможные причины? Заранее спасибо всем!
Сопоставить время в TextBox-ах согласно условий
 
Доброго времени суток уважаемые форумчане!
Есть форма с TextBox-ами (Т1, Т2, Т3, Т4) в которых вводится время в формате (НН:ММ). По нажатию кнопки необходимо проверить выполняются ли все необходимые условия:
1) Т2 > Т1 не более чем на 00:05;
2) Т3 > Т1 не более чем на 00:40;
3) Т4 > Т3
Проблема: не могу справиться с третьим пунктом (Т4>Т3)
Заранее всем спасибо!
Основная форма вылетает после закрытия программно созданой, Как избежать закрытия основной формы
 
Доброго времени суток!
Из основной формы (не модальной) создаю новую форму, которую потом и уничтожаю. При закрытии новой формы, закрывается и основная. Подскажите, как избежать закрытия основной формы?
 Заранее спасибо всем!
Приложение LangMF, Интересное и простое для тех кто знаком с ВБА
 
Доброго времени суток!
В недрах интернета нашел скриптовый язык "LangMF". Скрипт один в один с ВБА (ну, почти). Поддерживает ODBC и т.д.
Собственно ВОТ. Скачать можно тут.

П.С. После инсталяции создается папка с множеством примеров.

Всем успехов!  
Изменено: Ronin751 - 11.05.2017 21:02:31
iGrid для UserForm, Думаю очень полезный контрол
 
Всем здравствуйте!
Недавно нашел в сети вот такой, как по мне, очень интересный контрол. После скачивания и установки .ехе, происходит установка в виде приложений, а так же создается папка с примерами использования данного контрола. Там же есть и .OCX файлы. Собственно ВОТ.
Успехов!
Как узнать количество строк запроса к MySQL
 
Доброго времени суток!
Есть некая БД на MySQL SERVER с Названием "Catalog" и таблицей "City". Структура таблицы: | iD_City| City | Street | Region |
При попытке выполнить следующий запрос:
Код
Sub Counter()
    Dim sSQL As String
    Set pFilter = New ADODB.Recordset
    Set FConn = New ADODB.Connection
    FConn.Open "DRIVER={MySQL ODBC 5.1 Driver}; SERVER=Server_Name; USER=root; PASSWORD=My_Password; Option=3"

    '======================== ВАРИАНТ 1 ======================================
    sSQL = "SELECT COUNT(*) FROM catalog.city WHERE Street = 'вул. Леніна'"
    pFilter.Open sSQL, FConn, adOpenKeyset, adLockOptimistic '
    MsgBox pFilter.Fields(0).Value ' получаю только число строк без возможности получения данных

    '======================== ВАРИАНТ 2 ======================================
    sSQL = "SELECT City FROM catalog.city WHERE Street = 'вул. Леніна'"
    pFilter.Open sSQL, FConn, adOpenKeyset, adLockOptimistic '
    MsgBox pFilter.RecordCount 'Получаю -1
End Sub
в Варианте №1 Получаю только число строк, а для получения данных приходится делать новый запрос (считаю немного муторным). В Варианте №2 Получаю значение -1. Реальное количество строк, равно 9. Подскажите пожалуйста, как получить правильное значение количества строк? Заранее всем огромное спасибо!
Изменено: Ronin751 - 05.05.2017 12:20:12
Как подключиться к MySQL по сети
 
Доброго времени суток уважаемые жители планеты и любители эксель!

Установил MySQL к которому подключаюсь методом:
Код
Dim FConn As ADODB.Connection
Private Sub ConnectDB()
    Set FConn = New ADODB.Connection
    FConn.Open "DRIVER={MySQL ODBC 5.1 Driver};" & _
    "SERVER=localhost;" & _
    "DATABASE=forum;" & _
    "USER=root;" & _
    "PASSWORD=;" & _
    "Option=3"
    If FConn.State = adStateOpen Then
        MsgBox "Connected... =)"
    Else
        MsgBox "Can not connect... =("
    End If
End Sub
 При выполнении макроса с машины на которой установлен MySQL, всё нормально. Но попытки подключения с других машин через сетевой доступ, приводят к ошибке. Думаю проблема в имени Сервера. Попытка прописать "SERVER=192.168.12.200;" & _ тоже дают ошибку.
Собственно вопрос: как подключиться к MySQL  по сети?
Заранее всем спасибо!
П.С. Железо древнее: Вин. ХР, Офис 2003.
Как вставить запись в БД (Аксес), содержащую апостроф
 
Доброго времени суток уважаемые форумчане!
Появилась проблема с добавлением новых данных в БД. При добавлении слов написанных через апостроф, эксель ругается.
Код
Dim FConn As New ADODB.Connection, pFilter As New ADODB.Recordset, sSQL As String
    sPath = ThisWorkbook.Path & "\БД.mdb"
    FConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & sPath & ";"
    FConn.Execute ("INSERT INTO Данные ([Наименование]) VALUES ('" & Me.ComboBox1 & "')")
Может кто знает как выйти из ситуации?
Спасибо заранее всем за помощь!
Подключение к разным БД Access с помощью одной процедуры, Может кому пригодится
 
  Доброго времени суток уважаемые форумчане!
 Для выполнения запроса о получении или изменении данных в СУБД, нужно объявлять многое (новое подключение, ядро и т.д.). А если таких запросов множество, то эта однообразность немного раздражает (лично меня так точно). Для себя решил эту проблему за счет процедуры. Буду признателен за критику!  
Как создать не активный пункт контекстного меню, Application.CommandBar по условию
 
Доброго времени суток!
Есть форма с листбоксом. При выборе в листбоксе пункта "1", отображается конт.меню с двумя пунктами.
Подскажите пожалуйста, как сделать второй пункт конт.меню не активным при выборе двойки в листбоксе?
Заранее всем спасибо!
При появлении программно созданой формы не срабатывает UserForm_Initialize
 
Доброго времени суток!
Программно создаю форму с контролами и свойствами. Но при появлении формы, код UserForm_Initialize не срабатывает. Может кто знает в чем причина?
Заранее всем спасибо!
Получение iD добавляемой записи в СУБД, Существует ли более простой вариант?
 
  Доброго времени суток уважаемые форумчане!
 Есть форма с ListView в котором отображаются данные из СУБД(Аксэс). При добавлении новых данных в СУБД, считаю не логичным обновлять весь список ListView заново (занимает больше времени, да и мерцание лишнее не к чему). Более правильно, просто добавить новую строку с новыми данными в контрол. В данный момент, приходится почти полностью повторить исходный код выгрузки данных в ListView, для получения данных нужной строки и дальнейшего их добавления в контрол (внести данные в СУБД; найти эту запись; Вытянуть необходимое).
Может есть вариант более простого определения iD добавляемой записи?
Заранее огромное спасибо всем за помощь и совет!
Сортировка числовых значений ListView
 
Доброго времени суток уважаемые жители планеты!
Столкнулся с проблемой. Есть форма с ListView. Необходимо сортировать данные по возростанию и убыванию. Т.к. По умолчанию в ListView все значения являются текстовыми, при нажатии на заглавие столбца, числа сортируются не корректно.
Подскажите пожалуйста, как правильно выполнить сортировку чисел в ListView?
Заранее огромное спасибо всем!  
Изменено: Ronin751 - 17.10.2016 18:02:34
Эксель и Аксесс: при объедененном запросе данные в ЛистБокс выводятся не корректно
 
   Всем доброго времени суток!
  Есть две связаных таблицы в Аксес. В одну (табл.Адрес) вносятся адресные данные (Дата, Город, Улица, Дом, Буква, Корпус, Квартира). В другую (табл.ФИО), исполнитель заказа. Таблицы связаны по iD. В ЛистБоксе необходимо вывести данные каждого адреса, соответственно там где есть исполнитель и там где еще его не назначили. Но у меня что-то не то получается. Данные выводятся, но при этом исполнитель есть даже в тех строках где он еще не назначен. Прошу подсказать, что делаю не так?
  Заранее всем спасибо за помощь!
Вывод данных из Аксес в таблицу Эксель, Позиционирование
 
Доброго времени суток уважаемые жители форума!
Прошу вашей помощи в решении задачи по выводу данных из Аксес в Эксель.
Есть таблица в которую ежедневно вносятся данные.  Чтоб не делать огромный файл с множеством однообразных листов, решил создать хранилище (в Аксесе), а уж из него потом подтягивать необходимое. Перенос из таблицы в Аксес выполняю по свойству Листа (Worksheet_Change). Проблема вся в том, что вероятность заполнения всех ячеек таблицы, практически равна 0. Т.е. могут быть и полностью пустые строки, и полностью пустые столбцы. Подскажите пожалуйста, как построить запрос, чтоб данные при выводе заняли каждое свою ячейку? Заранее спасибо всем!
Определить в каком ТекстБоксе установлен фокус, UserForm
 
Доброго времени суток всем!
Столкнулся на первый взгляд с простой проблемой.
Есть форма с Фреймами в которых расположены ТекстБоксы. Для каждого TextBox, по свойству TextBox_Enter, необходимо выполнить одно и тоже действие. Чтоб не нагромождать однообразным скриптом, решил пойти через макрос, определяющий активный контрол формы. Попытки определить в каком из ТекстБокс находится курсор приводят только к тому, что Эксель пишет "Фрейм1". Что делаю не так?  
Заранее спасибо всем!
Формулировка проверки в запросе к БД Аксесс
 
Доброго времени суток!
При добавлении новых данных в СУБД, предварительно проверяю сумму по одному столбцу. Далее, если результат  = 0, то вношу новые данные, если более чем 0, делаю проверку на запрет превышения допустимых границ (значение не должно быть более 10).
В данный момент СУБД пуста. Но в запросе постоянно ошибка. Думаю из-за не правильной формулировки первой проверки. Подскажите пожалуйста, где ошибка?
Заранее огромное спасибо всем!
Представить данные разных столбцов как одно целое, SQL запрос к Аксес
 
Доброго времени суток!
Есть таблица Аксес, куда вносятся адреса. Для выполнения дальнейших операций необходимо вывести значения всех столбцев таблицы в ЛистБокс в виде одного столбца. К примеру, из значений: Минск, Ленина, 1, 15, А, 1, 21 нужно получить "Минск Ленина 1/15-А корп.1 кв.21"
Заранее всем спасибо за помощь!
Как получить название подменю, Application.CommandBars
 
Доброго времени суток!
В процессе работы, с помощью созданного меню на панели инструментов, необходимо обратится к другому файлу. Имя файла состоит из Названия выбранного пункта подменю и  Название подменю, к примеру "Январь 2016" (см.Файл).
Название выбранного пункта получаю:
Код
MsgBox Application.CommandBars.ActionControl.Caption
Как получить название подменю?
Заранее спасибо всем за помощь!
Страницы: 1 2 3 4 5 След.
Наверх