text1 = rs!Phone & "" Так, и не нужно лишних проверок, если телефон не введен |
при использовании ADO Просто - после rs.Update в ADO указатель текущей записи остается на обновленной записи. Достаточно просто получить ее значение: rs!UserId |
Вы будете смеяться, достаточно воспользоваться свойствами TopIndex , синхронизируя их при изменении. |
приложением Windows (например *doc - вордом) Под Windos NT: Shell "cmd /X /C start c:\mydoc\example.doc" Под Windos 9x: Shell "start c:\mydoc\example.doc" |
Постепенно вводя буквы находишь нужную запись. Private Sub DBCombo1_KeyUp(KeyCode As Integer, Shift As Integer) Dim n% Select Case KeyCode Case Is >= 48 DBCombo1.SelStart = Len(DBCombo1.Text) - DBCombo1.SelLength + 1 n = DBCombo1.SelStart Data1.Recordset.FindFirst "[Название поля] LIKE '" & DBCombo1.Text & "*'" If Data1.Recordset.NoMatch = False Then DBCombo1.Text = Data1.Recordset.Fields("Название поля").Value End If DBCombo1.SelStart = n DBCombo1.SelLength = Len(DBCombo1.Text) - n End Select End Sub |
- отвечаю Очень Просто: 'Поместите в модуль Public Declare Function SetWindowPos Lib "user32" _ (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, _ ByVal X As Long, ByVal Y As Long, ByVal cx As Long, _ ByVal cy As Long, ByVal wFlags As Long) As Long Public Const HWND_NOTOPMOST = -2 Public Const HWND_TOPMOST = -1 Public Const SWP_NOACTIVATE = &H10 Public Const SWP_NOMOVE = &H2 Public Const SWP_NOSIZE = &H1 Public Sub SetFormPosition(frmHandl As Long, TopPosition As Boolean) If TopPosition Then SetWindowPos frmHandl, HWND_TOPMOST, 0, 0, 0, 0, _ SWP_NOACTIVATE Or SWP_NOSIZE Or SWP_NOMOVE Else SetWindowPos frmHandl, HWND_NOTOPMOST, 0, 0, 0, 0, _ SWP_NOSIZE Or SWP_NOMOVE End If End Sub 'Поместите на форму в любой процедуре call SetFormPosition(Me.hwnd, True) |
1. Положите на форму таймер, поставьте интервал в 50 2. Добавьте в модуль: Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer Public Const VK_TAB = &H9 ' Константа для TAB key. ' константы для других кнопок посмотрите в API вьювере ' Поместите в событие Timer: If GetAsyncKeyState(VK_TAB) And KEY_SHIFT = True Then msgboх "Кто то трогает ТАБ", vbinformation End If |
Разместите в модуле: Public Declare Function ExitWindowsEx Lib "user32" (ByVal uFlags As Long, _ ByVal dwReserved As Long) As Long Public Const EWX_LOGOFF = 0 Public Const EWX_SHUTDOWN = 1 Public Const EWX_REBOOT = 2 Public Const EWX_FORCE = 4 А это в коде: Dim s As Long 'Так можно сделать Shut down s = ExitWindowsEx(EWX_SHUTDOWN, 0&) 'Так можно сделать Log off s = ExitWindowsEx(EWX_LOGOFF, 0&) 'А так Reboot s = ExitWindowsEx(EWX_REBOOT, 0& |
Сортировка по русским словам работает неверно. Что делать? Необходимо выставить Sort Order для поддержки Кирилицы При создании - dbcreate(cNewName, dbLang Cyrillic, rnVersion) При упаковке - dbEngine.CompactDatabase sOldName, sNewName, dbLangcyrillic .. Sergey Sysoev |
|
Не пугайтесь, никакого громоздкого кода на событе MouseMove,
Const WM_NCLBUTTONDOWN = &HA1 Const HTCAPTION = 2 Private Declare 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 Function ReleaseCapture Lib "user32" () As Long Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) Call ReleaseCapture Call SendMessage(Me.hWnd, WM_NCLBUTTONDOWN, HTCAPTION, 0&) End Sub |
Мало кто использует встроенную функциб Бэйсика Choose. А зря. Все очень просто Choose(5, "A", "B", "C", "D", "F") Вернет вам F , очень удобно для работы с днями недели, месяцами, или просто для выбора |
На пустую форму положите листбокс и текстбокс. Ну и этот код, конечно Option Explicit Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" _ (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam _ As Long, lParam As Any) As Long Private Const LB_ITEMFROMPOINT = &H1A9 Private Sub Form_Load() With List1 .AddItem "Hello World" .AddItem "Hello Again" .AddItem "Just Example " End With End Sub Private Sub List1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) Dim xPosition As Long Dim yPosition As Long Dim i As Long If Button = 0 Then ' если никакие кнопки не нажаты xPosition = CLng(X / Screen.TwipsPerPixelX) yPosition = CLng(Y / Screen.TwipsPerPixelY) With List1 ' взять выбранный элемент из листа i = SendMessage(.hwnd, _ LB_ITEMFROMPOINT, 0, ByVal _ ((yPosition * 65536) + xPosition)) 'подсветить подсказку к элементу If (i >= 0) And _ (i <= .ListCount) Then .ToolTipText = .List(i) Text1.Text = .List(i) Else .ToolTipText = "" End If End With End If End Sub |
На пустую форму положите этот код Option Explicit Private Declare Function SetSysColors Lib "user32" _ (ByVal nChanges As Long, lpSysColor As _ Long, lpColorValues As Long) As Long Private Declare Function GetSysColor& Lib "user32" (ByVal nIndex As Long) 'Можно использовать следующие константы Private Const COLOR_SCROLLBAR = 0 'The Scrollbar colour Private Const COLOR_BACKGROUND = 1 'Colour of the background with no wallpaper Private Const COLOR_ACTIVECAPTION = 2 'Caption of Active Window Private Const COLOR_INACTIVECAPTION = 3 'Caption of Inactive window Private Const COLOR_MENU = 4 'Menu Private Const COLOR_WINDOW = 5 'Windows background Private Const COLOR_WINDOWFRAME = 6 'Window frame Private Const COLOR_MENUTEXT = 7 'Window Text Private Const COLOR_WINDOWTEXT = 8 '3D dark shadow (Win95) Private Const COLOR_CAPTIONTEXT = 9 'Text in window caption Private Const COLOR_ACTIVEBORDER = 10 'Border of active window Private Const COLOR_INACTIVEBORDER = 11 'Border of inactive window Private Const COLOR_APPWORKSPACE = 12 'Background of MDI desktop Private Const COLOR_HIGHLIGHT = 13 'Selected item background Private Const COLOR_HIGHLIGHTTEXT = 14 'Selected menu item Private Const COLOR_BTNFACE = 15 'Button Private Const COLOR_BTNSHADOW = 16 '3D shading of button Private Const COLOR_GRAYTEXT = 17 'Grey text, of zero if dithering is used. Private Const COLOR_BTNTEXT = 18 'Button text Private Const COLOR_INACTIVECAPTIONTEXT = 19 'Text of inactive window Private Const COLOR_BTNHIGHLIGHT = 20 '3D highlight of button Dim OldColor As Long Private Sub Form_Load() 'Эапоминаем текущий цвет OldColor = GetSysColor(COLOR_ACTIVECAPTION) SetSysColors 1, COLOR_ACTIVECAPTION, RGB(255, 0, 0) End Sub Private Sub Form_Unload(Cancel As Integer) 'Восстанавливаем текущий цвет SetSysColors 1, COLOR_ACTIVECAPTION, OldColor End Sub |
Приложения Microsoft Office по разному хранят созданные пользователем
вручную или с помощью VBA панели инструментов - Word - в шаблонах (dot)
или в документах (doc), Excel - где-то в общей настройке, независящей от
XLS-фалов, Power Point - еще как-то (разобраться со всем этим можно самостоятельно,
ничего сложного нет; подробности исключены так как "хитрость" не совсем
об этом).
Независимо от приложения и того, как оно хранит пользовательские панели, в VBA-программах нельзя выполнять следующие действия (попытка приводит к ошибке приложения) : - Удалить панель, которая в этот момент не существует - Создать новую панель, причем ее имя совпадает с именем уже существующей панели (очень распространенная ошибка начинающих VBA-программистов - перед началом работы приложения создается панель - но ведь она уже есть, та же самая; в Excel, например, она была создана при самом первом запуске приложения, да так и болтается, если не была удалена вручную через диалоговое окно "Вид - Панели - инструментов - Настройка") - Любым образом обратиться к элементам или свойствам несуществующей панели. Конструктивный вывод из этих печальных фактов - до выполнения таких
действий мы должны убедиться в наличии или отсутствии панели.
Public Function CommandBarIsReady(CommandBarName As String) Dim CommandBarIsReady As Boolean CommandBarIsReady = False Dim Cycle As Byte Cycle = 1 For Each Cycle In CommandBars 'цикл по элементам коллекции If Cycle.Name = CommandBarName Then CommandBarIsReady = True Exit For 'панель с указанным именем обнаружена, ' цикл не нужен End If Next End FunctionА вот пример ее использования - в данном случае до описания панели проверяем - может быть она уже есть, тогда делаем ее видимой, если нет, описываем панель (наиболее актуален такой подход для Excel) Public Sub ИнициализацияПанели() If CommandBarIsReady("Моя панель") = True Then Application.CommandBars("Моя панель").Visible = True 'такая панель есть, делаем ее видимой так как считаем, _ что это именно нужная нам панель Else ' если панели нет, то описываем ее и затем ее элементы With Application.CommandBars.Add("Моя панель", Temporary:=True) .Visible = True .Position = msoBarFloating With .Controls With .Add(msoControlButton) .Caption = "Первая кнопка" .Style = msoButtonCaption .TooltipText = "Описание первой кнопки" .OnAction = "Процедура1" End With With .Add(msoControlButton) .Caption = "Вторая кнопка" .Style = msoButtonCaption .TooltipText = "Описание второй кнопки" .OnAction = "Процедура2" End With End With End With End If End Sub |
Если у вас есть хитрости, которыми хочется поделиться с товарищами по ремеслу - пишите, они обязательно будут опубликованы.