Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.72/18: Рейтинг темы: голосов - 18, средняя оценка - 4.72
0 / 0 / 0
Регистрация: 30.04.2013
Сообщений: 21

Переходим от одиночных окон Inputbox к Userform'e

05.05.2013, 14:37. Показов 4142. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день! Столкнулся со следующей проблемой. Имеется простенький код:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
Dim x, y, q, w
 
x = InputBox("число-месяц[-год] (ввод через дефис)", "Дата для фильтра", _
    Format(Date, "dd-mm-yyyy"))
 
y = InputBox("число-месяц[-год] (ввод через дефис)", "Дата для фильтра", _
    Format(Date-1, "dd-mm-yyyy"))
 
q = "[" & x & "-2013-00-00-00]"
 
w = "[" & x & "-2013-00-00-00]"
    
MsgBox q, w
Тут как видите друг за другом следуют 2 диалоговых окна, каждое запрашивает ввести дату, и через Msgbox выводит введенные даты в специальном заданном (q,w) формате.

Задание:
Сделать аналогичную картину с помощью UserForm. То есть на одной форме будем иметь 2 окна ввода даты (Textbox). и Кнопку чтобы выводила нам сообщение с заданной датой. (Главное не забывать что каждая введенная в бокс дата должна записываться в аргумент для дальнейшего её использования. Как например для изм формата даты и вывода её на экран).

Я изначально представлял себе это так:

Visual Basic
1
2
3
4
5
6
7
Userform.Show
 
Userform.Textbox1 = InputBox("число-месяц[-год] (ввод через дефис)", "Дата для фильтра", _
    Format(Date, "dd-mm-yyyy"))
 
Userform.Textbox2 = InputBox("число-месяц[-год] (ввод через дефис)", "Дата для фильтра", _
    Format(Date-1, "dd-mm-yyyy"))
Но этот код конечно не работает) да и в аргумент у меня ничего не запишется, разве что исп.

Visual Basic
1
w = "[" & Userform.Textbox1 & "-2013-00-00-00]"
Однако и это я думаю некорректно.
Буду ждать советов спасибо!!
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
05.05.2013, 14:37
Ответы с готовыми решениями:

Автофльтр в UserForme
Добрый день. Фаил присутствует во вложении. Создана юзер форма которая фильтрует столбец по значению(в виде раскрывающегося списка) и...

Переходим на ЕЕ правильно
Здравствуйте, тему с соответствующим вопросом не нашел. Извините за простой вопрос, но для меня это вопрос работоспособности моих...

Переходим с VB.NET на C#
У меня очень много вопросов и что бы не плодить пустые темы, я просто буду задавать их здесь. Вопросы характера "как это перевести с...

11
 Аватар для Sasha_Smirnov
5562 / 1370 / 150
Регистрация: 08.02.2009
Сообщений: 4,109
Записей в блоге: 30
05.05.2013, 15:00
Так пробуйте — и узнаете. Но случайным тырканьем это всё потребует многих дней и ночей!

Я тем временем минут 20 пытал ваш простенький код (он не работал!) — вот сложненький:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Sub UserFormPrep()
Dim x, y, q, w
 
    x = InputBox("число-месяц-год (ввод через дефис)", "Дата сегодня", _
        Format(Date, "dd-mm-yyyy"))
     
    y = InputBox("число-месяц-год (ввод через дефис)", "Дата вчера", _
        Format(Date - 1, "dd-mm-yyyy"))
     
    q = "[" & x & "]"
     
    w = "[" & y & "]"
    
MsgBox "x = " & x & Chr(13) & "y = " & y & Chr(13) & Chr(13) & _
        "q = " & q & Chr(13) & "w = " & w
End Sub
Миниатюры
Переходим от одиночных окон Inputbox к Userform'e  
0
0 / 0 / 0
Регистрация: 30.04.2013
Сообщений: 21
05.05.2013, 15:36  [ТС]
Sasha_Smirnov
ну не работал он из-за того что я не поставил пробел в Format(Date - 1).
Так как делать алогичные манипуляции только в UserForm'e используя Textbox? не могу найти ответ в интернете да и макрос тут не запишешь, заготовка UserForm создается в редакторе VBA.

Добавлено через 6 минут
Ну а msgbox можно было 2 раза подряд ввести =)
0
 Аватар для Sasha_Smirnov
5562 / 1370 / 150
Регистрация: 08.02.2009
Сообщений: 4,109
Записей в блоге: 30
05.05.2013, 15:47
Не цитируйте полностью. И так ясно, что пост идёт в ответ на предыдущий!
Цитата Сообщение от multiki Посмотреть сообщение
ну не работал он из-за того что я не поставил пробел в Format(Date - 1)
Вот я и говорю "тырканье". Не в пробелах был "пробел в образовании" (они сами ставятся), а вот тут:
Цитата Сообщение от multiki Посмотреть сообщение
Visual Basic
1
MsgBox q, w
(Запятая.) Ну проехали.

Предлагаю нарисовать (ну хоть в Пэйнте) форму и сформулировать все её функции.
0
0 / 0 / 0
Регистрация: 30.04.2013
Сообщений: 21
05.05.2013, 17:03  [ТС]


Вот постарался наглядно показать чего бы хотел получить
0
5472 / 1150 / 50
Регистрация: 15.09.2012
Сообщений: 3,576
05.05.2013, 18:22
multiki, выложил форму, задайте вопрос, если что-то не понятно.

Чтобы поместить форму в VBA:
  1. разархивируйте то, что я выложил;
  2. перейдите в VBA;
  3. "File" - "Import File...".
Вложения
Тип файла: zip Форма.zip (1.5 Кб, 28 просмотров)
0
0 / 0 / 0
Регистрация: 30.04.2013
Сообщений: 21
05.05.2013, 22:12  [ТС]
Цитата Сообщение от Скрипт Посмотреть сообщение
multiki, выложил форму, задайте вопрос, если что-то не понятно.

Чтобы поместить форму в VBA:
  1. разархивируйте то, что я выложил;
  2. перейдите в VBA;
  3. "File" - "Import File...".
Огромное спасибо на основе этого я воплощу задуманное, остается только понять как присвоить ячейкам ввода формат и некую дату во время появления диалога.

Например:
'MyUserForm.MyTextBox1.Text = (Format(Date, "dd-mm-yyyy"))
'MyUserForm.MyTextBox2.Text = (Format(Date - 1, "dd-mm-yyyy"))

Но куда нужно вставить? Как я уже не пробовал:
перед процедурой вставлял
вставлял с Private Sub MyUserForm_Initialize().
Не работает.

Единственно он работает если скопировать код присваивания формата и даты допустим в саб Клика или в саб текстбокса. Но увы необходимая дата и формат появляются только после клика по данным формам, а нужно как я уже сказал во время её появления.
0
5472 / 1150 / 50
Регистрация: 15.09.2012
Сообщений: 3,576
05.05.2013, 22:19
multiki, в форму из сообщения #6 вставьте вот этот код:
Visual Basic
1
2
3
4
5
6
Private Sub UserForm_Initialize()
 
    Me.TextBox1.Text = (Format(Date, "dd-mm-yyyy"))
    Me.TextBox2.Text = (Format(Date - 1, "dd-mm-yyyy"))
    
End Sub
0
0 / 0 / 0
Регистрация: 30.04.2013
Сообщений: 21
05.05.2013, 22:24  [ТС]
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Option Explicit
 
Private Sub CommandButton1_Click()
    
    Dim x As String, y As String
   
    x = TextBox1.Text
    y = TextBox2.Text
 
    MsgBox x & vbCr & y
    
End Sub
 
Private Sub UserForm_Initialize()
TextBox1.Text = (Format(Date, "dd-mm-yyyy"))
TextBox2.Text = (Format(Date - 1, "dd-mm-yyyy"))
End Su
b

Ураа заработало! Также смог присвоить формат и дату с помощью Private Sub UserForm_Initialize() !! Скрипт и Саша спасибо вам большое

Также я хотел узнать! Возможно ли создать в ЮзерФорме Текстбокс в который можно вставить маленькую таблицу (2 стлб, 4-5 строк), а она бы всвою очередь бы скопировалась на определенный лист1, например в середине данного листа.
0
5472 / 1150 / 50
Регистрация: 15.09.2012
Сообщений: 3,576
05.05.2013, 22:27
Цитата Сообщение от multiki Посмотреть сообщение
Возможно ли создать в ЮзерФорме Текстбокс в который можно вставить маленькую таблицу (2 стлб, 4-5 строк)
попробуйте использовать элемент управления "ListBox" - это таблица.
0
0 / 0 / 0
Регистрация: 30.04.2013
Сообщений: 21
07.05.2013, 00:39  [ТС]
К сожалению не могу выложить фаил потому, что я понятия не имею возможно ли данные манипуляции в VBA. Однако листбокс мне не подойдет, потому что я буду сам вставлять некую таблицу при вызове формы.

Могу лишь передать суть через вложенный вами ранее код VBA.
И так как вы помните, мы создавали тексбокс в который вносили числа, после чего мсгбокс выдавал эти числа на экран.

Теперь необходимо в текстбокс вставить небольшую таблицу (представьте что её мы скопировали из сторонней программы и она у нас просто в буфере обмена), и так контрл-в. Вставили. Теперь покажем её в мсгбоксе на экран. Далее необходимо, чтобы таблица скопировалась (перенеслась) на заготовленный лист1 и в отведенный ей диапозон.

Возможно таблицу которую мы вставим в текстбокс из буфера необходимо будет записать в аргумент. а только потом выводить аргумент на экран и вставлять его в диапозон на листе1.

Dim x
x = textbox.txt
Msgbox x
Worksheets("Лист1").Range("A1: E3") = x

'где х - это некая таблица из буфера обмена.

Спасибо. Жду ваших советов.

Добавлено через 12 минут
P.s. также хотел спросить по поводу переменных значения которых мы присваиваем ячейкам.

Worksheets("Лист").Range("A1") = x

Я использую в работе числа вида "14567,123".
Как правильно прописать Dim x as .... - чтобы получить в ячейке данный формат числа. Integer вроде только для целых используется.
0
5472 / 1150 / 50
Регистрация: 15.09.2012
Сообщений: 3,576
07.05.2013, 06:08
multiki, нужно выяснить: какой элемент управления использовать для таблицы.

Создайте на Форуме новую тему "Как вставить на пользовательскую форму таблицу из буфера обмена". Потому что это отдельный вопрос. Когда с ними разберётесь, то дальше продолжите писать свой код.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
07.05.2013, 06:08
Помогаю со студенческими работами здесь

Переходим на 22-ядерники
Друзья, пора переходить на 22-ядерное программирование. Boost в помощь.Intel Parallel studio, однако, до свиданья.. Haswell (E3...

плавно переходим с 6.5 на 8
Есть: - работающий 6.5 на стареньком компаке - лицензионный дистриб Дмино 8 Нужно: перейти на 8 План такой: запустить 8,...

Перемещение одиночных файлов
ребят, помогите написать процедуру перемещения одиночных файлов у нас есть готовый файл-менеджер типа Midnight Comander, в котором мы...

Спектры одиночных сигналов
Сразу извиняюсь, если не туда написала.. Если что, перенаправьте меня тогда в нужный раздел :) А теперь ближе к делу. Мне очень нужна...

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. fontSize": 18, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations":. . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru