Доброе. Имеется код который убирает крестик в UserForm. Возможно ли его доработать так, что бы заголовок UserForm выравнивался по центру имел шрифт "Times New Roman", жирный, размер 14.
Код
Private Const GWL_STYLE As Long = -16& 'для установки нового вида окна
Private Const GWL_EXSTYLE = -20& 'для расширенного стиля окна
Private Const WS_CAPTION As Long = &HC00000 'определяет заголовок
Private Const WS_BORDER As Long = &H800000 'определяет рамку формы
'Функции API, применяемые для поиска окна и изменения его стиля
#If VBA7 Then
Private Declare PtrSafe Function SetWindowLong Lib "User32" Alias "SetWindowLongA" (ByVal hwnd As LongPtr, ByVal nIndex As Long, ByVal dwNewLong As LongPtr) As LongPtr
Private Declare PtrSafe Function GetWindowLong Lib "User32" Alias "GetWindowLongA" (ByVal hwnd As LongPtr, ByVal nIndex As Long) As LongPtr
Private Declare PtrSafe Function FindWindow Lib "User32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As LongPtr
Private Declare PtrSafe Function DrawMenuBar Lib "User32" (ByVal hwnd As LongPtr) As Long
#Else
Private Declare Function SetWindowLong Lib "User32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare Function GetWindowLong Lib "User32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Private Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function DrawMenuBar Lib "user32.dll" (ByVal hwnd As Long) As Long
#End If
Sub NoQueryClose(FormName As String)
Dim ihWnd, hStyle
'ищем окно формы среди всех открытых окон
If Val(Application.Version) < 9 Then
ihWnd = FindWindow("ThunderXFrame", FormName) 'для Excel 97
Else
ihWnd = FindWindow("ThunderDFrame", FormName) 'для Excel 2000 и выше
End If
'получаем информацию о найденном окне(стили и т.д.)
hStyle = GetWindowLong(ihWnd, -16&)
'убираем кнопку крестика
SetWindowLong ihWnd, -16&, hStyle And Not &H80000
End Sub
Создать TextBox и разрешить вводить только цифры
Пользователь
Сообщений: Регистрация: 14.01.2012
19.05.2023 11:24:38
Доброе. У меня не получается с помощью кода создать TextBox и ограничить ввод символов. Подскажите, как реализовать? Так же нужно, что бы во время ввода пропадал Label1 а если TextBox пустой Label1 появлялся.
Создать новую книгу и сохранить как скрытый файл
Пользователь
Сообщений: Регистрация: 14.01.2012
12.02.2022 17:39:02
Спасибо огромное, это то что нужно. Весь интернет облазил ни как не мог найти решения)
Создать новую книгу и сохранить как скрытый файл
Пользователь
Сообщений: Регистрация: 14.01.2012
12.02.2022 14:38:31
Доброе, имеется код который проверяет наличие файла и если файла нет то он создаёт его, однако мне нужно что бы файл был скрытым. Как это сделать?
Код
If Len(Dir$(ThisDocument.Path & "/" & "Data.xlsx", vbHidden)) > 0 Then
MsgBox ("Файл существует!")
Else
Workbooks.add
Application.Visible = False 'Делаем запуск приложения невидимым
'Вставляем данные
Worksheets(1)
Range("A1").Value = "Фамилиё"
Range("B1").Value = "Имя"
Range("A1:B1").Font.Bold = True
Range("A2").Value = "Doe"
Range("B2").Value = "John"
'Отключаем системные сообщения
Application.DisplayAlerts = False
'Сохраняем книгу
Workbooks.SaveAs ThisDocument.Path & "/" & "Data.xlsx"
'Включаем системные сообщения
Application.DisplayAlerts = True
'Закрываем книгу
Workbooks.Quit
End If
Обмен данными из UserForm Word с Excel
Пользователь
Сообщений: Регистрация: 14.01.2012
12.02.2022 10:40:38
Доброе, помогите реализовать идею. В файле Word Есть UserForm в которой имеются TextBox (Фамилия, имя, отчество), так же две кнопки, "Добавить" и "База". Каким образом можно сделать что бы при нажатии кнопки добавить ФИО сохранялось в Excel а при нажатии кнопки База открывается еще окно со списком ранее сохранённых ФИО при выборе нужного человека, TextBox заполняется выбранными данными.
Автоматическое форматирование даты в TextBox
Пользователь
Сообщений: Регистрация: 14.01.2012
29.09.2021 01:01:36
Доброе. Решил поделиться своим решение автоматического форматирования даты в TextBox. Возможно кому-то пригодится. Так же выкладываю для обсуждения и критики. Я не очень опытный в плане написания кода так что возможно код окажется примитивным. Буду рад любой критике и любым предложениям по доработке.
Из возможностей: Возможно вводить только цифры, точку и подчёркивание При нажатии кнопки Tab сразу вставляется текущая дата Так же если ввести число и нажать Tab то сразу вставляется текущий месяц и год Там есть еще много разных комбинаций, в общем тестируйте кому интересно)
Единственная проблема которую не смог решить это авто постановка точек. Желаемый результат: что бы при вводе 2 и 5-го символа точка ставилась сразу, однако в таком варианте не получается потом точку удалить в случае необходимости. Текущий результат: точка делит цифры на части при попытке ввести 3 и 6-й символ, в таком случае пользователь может сам нажимать всегда точку и даже не узнать что мог этого не делать)
Запрет показа MsgBox при закрытии UserForm
Пользователь
Сообщений: Регистрация: 14.01.2012
27.09.2021 21:49:10
Цитата
Шит написал: возможно в UserForm_QueryClose обработку сказать что бы он дальше не шёл?)))
Нашёл решение, всё оказалось очень просто
Код
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
End
End Sub
Всем спасибо за помощь)
Запрет показа MsgBox при закрытии UserForm
Пользователь
Сообщений: Регистрация: 14.01.2012
27.09.2021 21:28:29
Нашёл решение
Код
If VBA.UserForms.Count = 1 Then Exit Sub
Однако это не помогло.
Когда я нажимаю крестик до обработчик заходит в Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
а потом идёт в Private Sub txt_StartedData_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
возможно в UserForm_QueryClose обработку сказать что бы он дальше не шёл?)))
Запрет показа MsgBox при закрытии UserForm
Пользователь
Сообщений: Регистрация: 14.01.2012
27.09.2021 20:46:37
Добрый вечер Уважаемые форумчане. Подскажите как ревизовать. На UserForm находится ComboBox в который необходимо вводить определённые данные если данные не верны то при переходе к следующему ComboBox появляется MsgBox. Однако в той ситуации когда введены не верные данные а пользователь просто хочет закрыть UserForm это уведомление не нужно. Хочу в событие Exit из ComboBox добавить проверку на предмет закрытия UserForm, если UserForm закрыто то Exit sub.
Или возможно в Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer) прописать что-то что не позволит выполнять какие либо действия другим объектам
подскажите пожалуйста как прописать такое.
Изменено: - 27.09.2021 21:48:03
Автокоррекция ввода даты в TextBox
Пользователь
Сообщений: Регистрация: 14.01.2012
08.02.2019 00:59:11
Кому интересно ...
Автокоррекция ввода даты в TextBox
Пользователь
Сообщений: Регистрация: 14.01.2012
07.02.2019 13:12:30
Думаю по такому вопросу это не принципиально)))
Автокоррекция ввода даты в TextBox
Пользователь
Сообщений: Регистрация: 14.01.2012
07.02.2019 12:07:50
Доброго Помогите реализовать. В UserForm есть TextBox в который пользователь должен ввести дату. Идея заключается в том, когда человек ввел число, например 12 то сразу автоматом ставится точка, потом он вводит 10 и так же подставляется точка, дальше может быть два развития события либо человек написал 2019 и его курсор автоматический переводится на следующий TextBox или он просто пишет 19 и перейдя на следующий TextBox либо с помощью Tab или курсором 12.10.19 переделывается в 12.10.2019. Так же нужно что бы можно было писать только цифры и подчеркивание "_".
[ Закрыто] Переменная
Пользователь
Сообщений: Регистрация: 14.01.2012
05.01.2019 14:19:50
Доброе Уважаемые форумчане. Меня мучает один вопрос и я решил спросить опытных людей.
У меня есть много текстбоксов в итоге их будет около 30 в каждом текст боксе буду свои правила форматирования текста. Вопрос в следующем. В данном случае есть ли смысл в переменных? я имею в виду не глупо будет присваивать переменной txt_surname, как вообще делают в таких случаях опытные люди?
Код
Dim Фамилия As String = txt_surname.Text
плохо что я использую русские имена для переменных? есть ли в этом смысл, возможно в такой ситуации переменная это просто лишнее? возможно такое действие благотворно влияет на программу и операции будут проходить быстрее?
В качестве примера приведу программный которым я сейчас занимаюсь (особая благодарность )
Код
' *****************************************************************************
' ComboBox Кызы \ Оглы
'
Private Sub cbo_kz_og_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If cbo_kz_og.Text = "" Then lbl_kz_og.Visible = True
End Sub
Private Sub cbo_kz_og_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = vbKeyTab Then Exit Sub
If lbl_kz_og.Visible = True Then lbl_kz_og.Visible = False
End Sub
' *****************************************************************************
' TextBox Фамилия
'
Private Sub txt_surname_Enter()
ВключитьРусскуюРаскладку
End Sub
Private Sub txt_Surname_Change()
If txt_surname.Text <> "" Then txt_surname.Text = Up1Letter(txt_surname.Text)
End Sub
Private Sub txt_Surname_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If txt_surname.Text = "" Then lbl_surname.Visible = True
txt_surname = Trim(txt_surname)
End Sub
Private Sub txt_surname_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = vbKeyTab Then Exit Sub
If lbl_surname.Visible = True Then lbl_surname.Visible = False
If KeyCode = vbKeyDelete Then
If txt_surname > "" Then
txt_surname.Value = ""
End If
End If
End Sub
' *****************************************************************************
' TextBox Имя
'
Private Sub txt_name_Enter()
ВключитьРусскуюРаскладку
End Sub
Private Sub txt_name_Change()
If txt_name.Text <> "" Then txt_name.Text = Up1Letter(txt_name.Text)
End Sub
Private Sub txt_name_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If txt_name.Text = "" Then lbl_name.Visible = True
End Sub
Private Sub txt_name_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = vbKeyTab Then Exit Sub
If lbl_name.Visible = True Then lbl_name.Visible = False
If KeyCode = vbKeyDelete Then
If txt_name > "" Then
txt_name.Value = ""
End If
End If
End Sub
Авто форматирование TextBox
Пользователь
Сообщений: Регистрация: 14.01.2012
02.01.2019 17:24:18
Задание отдано на выполнение.
Авто форматирование TextBox
Пользователь
Сообщений: Регистрация: 14.01.2012
02.01.2019 17:14:17
Logistic, не вижу ничего плохого в том что я на разных форумах одно и тоже пишу.... часто бывает что в одном месте ни кто не ответил а в другом очень бурная дискуссия началась...
Авто форматирование TextBox
Пользователь
Сообщений: Регистрация: 14.01.2012
02.01.2019 16:39:57
Доброго. Помогите реализовать. Нужно что бы при появление UserForm в TextBox1,2,3,4 были надписи Фамилия, Имя, Отчество, Дата рождения. --Текст серый и полупрозрачный. --Как только нажимаешь на поле или переходишь на поле с помощью Tab текст пропадает и вводишь то, что нужно. --Если в поле нечего не вводилось, то текст с информацией должен появиться снова. --Так же в TextBox Фамилия, Имя, Отчество нужно сделать, так что бы первая буква автоматический становилась заглавной, а другие строчными (на случай если регистр перепутал). --В поле дата рождения нужно, что бы текст сам подгонялся под формат дата, к примеру, если я написал 2101999 или 2 11 1999 или 02 октября 1999 а так же 02октября1999 после перехода на другое поле с помощью Tab или курсора мыши введенное значение должно стать 02.10.1999 --в случае когда в это поле было введено любое другое значение, которое ни как не связано с датой, на 5 сек. должно появиться всплывающее уведомление о том, что формат даты не верен, автоматически заполняем поле датой 11.04.1992, фокус на поле дата рождения и выделяем весь текст в поле, начиная с левого края. --Нужно чтобы исправления, например, в поле Фамилия происходили сразу, как перешёл на другое поле с помощью Tab ли курсора мыши.
Так же есть просьба.... в коде писать описание что делается и зачем.
ComboBox с добавлением новых элементов в Userform
Пользователь
Сообщений: Регистрация: 14.01.2012
30.12.2018 15:24:58
Гениально))) А по поводу удаления... как удалить из списка не нужную запись?
Изменено: - 30.12.2018 15:29:00
ComboBox с добавлением новых элементов в Userform
Пользователь
Сообщений: Регистрация: 14.01.2012
30.12.2018 13:38:53
Юрий М, Буду довольствоваться этим))) Однажды наберусь достаточно знаний и опыты и смогу программно менять значения в ComboBox)))
ComboBox с добавлением новых элементов в Userform
Пользователь
Сообщений: Регистрация: 14.01.2012
30.12.2018 13:23:28
Юрий М, Я не хочу захламлять листами свой проект. Плюс ко всему такого способа в гугле не нашел и стало интересно возможно ли это))) Видимо Вариантов не много либо масив либо реестр... но в реестре хранить не удобно но это было интересно)
ComboBox с добавлением новых элементов в Userform
Пользователь
Сообщений: Регистрация: 14.01.2012
30.12.2018 13:12:35
А возможно программно изменить код? на подобие как . Просто что бы при нажатие "+" в UserForm_Initialize() Добавлялось строка ComboBox1.AddItem "новый текст"
ComboBox с добавлением новых элементов в Userform
Пользователь
Сообщений: Регистрация: 14.01.2012
29.12.2018 23:28:22
Как то давно на Word находил такую формулу. Для того что бы ComboBox запоминал последнее значение которые выбирал пользователь.
Код
Private Sub UserForm_Initialize()
ComboBox1.AddItem "Иванов"
ComboBox1.AddItem "Петров"
ComboBox1.AddItem "Сидоров"
Dim i As Integer
On Error Resume Next
i = CInt(ThisDocument.Variables("Combobox1LastChoice").Value)
If Err.Number <> 0 Then Err.Clear
ComboBox1.ListIndex = i
End Sub
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
Dim var As Variable
For Each var In ThisDocument.Variables
If var.Name = "Combobox1LastChoice" Then
Exit For
End If
Next
If var Is Nothing Then
ThisDocument.Variables.Add "Combobox1LastChoice", ComboBox1.ListIndex
Else
var.Value = ComboBox1.ListIndex
End If
End Sub
Возможно что то подобное можно придумать для Excel ну естественно что бы Лист запоминался.
ComboBox с добавлением новых элементов в Userform
Пользователь
Сообщений: Регистрация: 14.01.2012
29.12.2018 22:41:38
Добавляю пример
ComboBox с добавлением новых элементов в Userform
Пользователь
Сообщений: Регистрация: 14.01.2012
29.12.2018 21:57:59
На другом форуме мне предложили вот такой вариант
Код
Dim t$, i As Variant
t = "Premix Drops"
i = Application.Match(t, ComboBox1.List, 0)
If Not IsError(i) Then
MsgBox t & " уже есть с списке и мы его уничтожим ", vbCritical, ""
ComboBox1.RemoveItem i - 1
Else
ComboBox1.AddItem t
End If
Единственный недостаток это то что после того как закрываешь UserForm все возвращается в исходное состояние. Как доработать?
Anchoret написал: речь о заполнении Комбобокса уникальными значениями?
Да. В ComboBoxe названия Брендов.... в случае если появляется новый бренд, его нужно добавить в список, а на случай если ошибся реализовать удаление.
ComboBox с добавлением новых элементов в Userform
Пользователь
Сообщений: Регистрация: 14.01.2012
29.12.2018 19:09:47
Цитата
Sanja написал: Перенаполняйте Ваш Array нужными на данный момент данными и 'скармливайте' его КомбоБоксу
Хочется это делать через кнопочку на UserForm)))
ComboBox с добавлением новых элементов в Userform
Пользователь
Сообщений: Регистрация: 14.01.2012
29.12.2018 18:58:38
Доброго и с Наступающим. Помогите реализовать. В UserForm есть ComboBox добавил в него значения с помощью такой формулы
Код
Private Sub UserForm_Initialize()
ComboBox1.List = Array("Capella", "DIY Flavor Shack", "Flavor West", "Flavorah", "Inawera")
End Sub
Как в таком случае добавить новые элементы в Userform и удалить старые, а так же добавить предупреждение что в списке такой элемент уже присутствует? Мне нужно что бы не было связи ни с диапазоном ни с ячейками.
Заранее спасибо.
Как заставить combobox запоминать последнее значение?
Пользователь
Сообщений: Регистрация: 14.01.2012
07.03.2018 13:27:54
Апострофф, Спасибо. Хорошее решение. Но меня интересует возможность запоминать выбор в определенных combobox
Как заставить combobox запоминать последнее значение?
Пользователь
Сообщений: Регистрация: 14.01.2012
07.03.2018 11:47:06
Sanja, В UserForm у меня два а в дальнейшем больше Combobox два из них взаимосвязаны ( возможно это важно) В одном списке я выбераю округ в другом район и после того как я закрываю диалоговое окно нужно что эти данные сохранились. то есть при новом открытии UserForm были уже выбраны предыдущие данные.
Как заставить combobox запоминать последнее значение?
Пользователь
Сообщений: Регистрация: 14.01.2012
07.03.2018 11:36:07
Sanja, Да это для ворда. Но я думал ризницы большой нет), не очень опытен я в этих делах подскажите про ГЛОБАЛЬНУЮ переменную, что как там делать?