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

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

05.05.2013, 14:37. Показов 3113. Ответов 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
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.05.2013, 14:37
Ответы с готовыми решениями:

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

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

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

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

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

Я тем временем минут 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  [ТС] 3
Sasha_Smirnov
ну не работал он из-за того что я не поставил пробел в Format(Date - 1).
Так как делать алогичные манипуляции только в UserForm'e используя Textbox? не могу найти ответ в интернете да и макрос тут не запишешь, заготовка UserForm создается в редакторе VBA.

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

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


Вот постарался наглядно показать чего бы хотел получить
0
5464 / 1144 / 50
Регистрация: 15.09.2012
Сообщений: 3,469
05.05.2013, 18:22 6
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  [ТС] 7
Цитата Сообщение от Скрипт Посмотреть сообщение
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
5464 / 1144 / 50
Регистрация: 15.09.2012
Сообщений: 3,469
05.05.2013, 22:19 8
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  [ТС] 9
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
5464 / 1144 / 50
Регистрация: 15.09.2012
Сообщений: 3,469
05.05.2013, 22:27 10
Цитата Сообщение от multiki Посмотреть сообщение
Возможно ли создать в ЮзерФорме Текстбокс в который можно вставить маленькую таблицу (2 стлб, 4-5 строк)
попробуйте использовать элемент управления "ListBox" - это таблица.
0
0 / 0 / 0
Регистрация: 30.04.2013
Сообщений: 21
07.05.2013, 00:39  [ТС] 11
К сожалению не могу выложить фаил потому, что я понятия не имею возможно ли данные манипуляции в 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
5464 / 1144 / 50
Регистрация: 15.09.2012
Сообщений: 3,469
07.05.2013, 06:08 12
multiki, нужно выяснить: какой элемент управления использовать для таблицы.

Создайте на Форуме новую тему "Как вставить на пользовательскую форму таблицу из буфера обмена". Потому что это отдельный вопрос. Когда с ними разберётесь, то дальше продолжите писать свой код.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.05.2013, 06:08

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru