|
Вопрос # 3 158/ вопрос открыт / |
|
Доброго времени суток, уважаемые эксперты!
Подскажите пожалуйста.
У меня код, который вводит данные или удаляет на выбранную дату, находится в кнопке Cmd_Select
Как после выполнение команды закончить выбор даты и закрыть форму календаря,
Private Sub Cmd_Select_Click()
'Команда - закончить выбор даты и закрыть форму
SelectedDate = CStr(DateValue(dt_1))
Unload Me
End Sub
выполнить код по отношению к той кнопки, которой был открыт календарь? В данном примере кнопки CommandButton6_
Private Sub CommandButton6_Click()
Get_Date (Now) 'Открыть календарь
End Sub
К вопросу прикреплён файл. Загрузить » (срок хранения: 60 дней с момента отправки вопроса)
Примечание #1 (6 сентября 2009, 12:11): Код который необходимо вставить
If CDate(TextBox_Year) <> CDate(Sheets("Отчет").Range("R1")) Then
MsgBox " Год ввода данных выбран не верно.", vbInformation, "Запрет ввода"
Exit Sub
End If
Dim i As Integer
For i = 1 To 1000
If Sheets("Отчет").Cells(i, 1).Value = CStr(DateValue(dt_1)) Then 'Поиск даты
'Удаление данных на выбранную дату, если ТextBox1 пустой
If UserForm1.TextBox1.Text = "" Then
Sheets("Отчет").Cells(i, 2).Value = ""
Sheets("Отчет").Cells(i, 3).Value = ""
Sheets("Отчет").Cells(i, 4).Value = ""
Sheets("Отчет").Cells(i, 5).Value = ""
Sheets("Отчет").Cells(i, 6).Value = ""
Sheets("Отчет").Cells(i, 7).Value = ""
Sheets("Отчет").Cells(i, 8).Value = ""
Sheets("Отчет").Cells(i, 9).Value = ""
Sheets("Отчет").Cells(i, 21).Value = Sheets("Отчет").Cells(i - 1, 21).Value ' Значения беруться из строки выше
Sheets("Отчет").Cells(i, 22).Value = Sheets("Отчет").Cells(i - 1, 22).Value ' Значения беруться из строки выше
Else
'Ввод данных на выбранную дату.
If chb_Time.Value = True Then Sheets("Отчет").Cells(i, 2).Value = Label_Hour.Caption + ":" + Label_Minute 'Ввод времени если chb_Time обозначен галочкой
If chb_Time.Value = False Then Sheets("Отчет").Cells(i, 2).Value = "" 'Удаление времени если chb_Time не обозначен галочкой
Sheets("Отчет").Cells(i, 3).Value = UserForm1.TextBox1.Text + Sheets("Отчет").Cells(i, 3).Value
Sheets("Отчет").Cells(i, 4).Value = UserForm1.TextBox2.Text + Sheets("Отчет").Cells(i, 4).Value
Sheets("Отчет").Cells(i, 5).Value = UserForm1.TextBox3.Text + Sheets("Отчет").Cells(i, 5).Value
Sheets("Отчет").Cells(i, 6).Value = UserForm1.TextBox5.Text + Sheets("Отчет").Cells(i, 6).Value
Sheets("Отчет").Cells(i, 7).Value = UserForm1.TextBox6.Text + Sheets("Отчет").Cells(i, 7).Value
Sheets("Отчет").Cells(i, 8).Value = UserForm1.TextBox7.Text + Sheets("Отчет").Cells(i, 8).Value
Sheets("Отчет").Cells(i, 9).Value = UserForm1.TextBox8.Text + Sheets("Отчет").Cells(i, 9).Value
Sheets("Отчет").Cells(i, 21).Value = Range("F10").Value
Sheets("Отчет").Cells(i, 22).Value = Range("G10").Value
End If
End If
Next
 |
Вопрос задал: resseg (статус: Посетитель)
Вопрос отправлен: 6 сентября 2009, 11:54
Состояние вопроса: открыт, ответов: 0.
|
Мини-форум вопроса
Всего сообщений: 35; последнее сообщение — 7 сентября 2009, 20:52; участников в обсуждении: 2.
Страницы: [1] [2] [Следующая »]
|
Егор (статус: 10-ый класс), 6 сентября 2009, 12:51 [#1]:
не совсем понял вопрос
пожалуйста, по шагам распишите, что должно быть
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.
|
|
resseg (статус: Посетитель), 6 сентября 2009, 13:05 [#2]:
Добрый день Егор.
Есть календарь (посмотрите файл), при клике по кнопке ОК в календаре, выполняется код.
Но так как календарь будет в последствие много функциональный, необходимо чтобы код (при клике по кнопке ОК в календаре) выполнялся по отношение к той кнопке, которой он был открыт.
|
|
resseg (статус: Посетитель), 6 сентября 2009, 13:11 [#3]:
Проще говоря, кнопка ОК будет одна выполнять различные коды по отношению к кнопкам которыми был открыт календарь.
p/s
Чтобы не вписывать код в кнопку ОК
Кнопка ОК должна выполняеть только выбор даты и закрытие формы
Private Sub Cmd_Select_Click()
'Команда - закончить выбор даты и закрыть форму
SelectedDate = CStr(DateValue(dt_1))
Unload Me
End Sub
|
|
Егор (статус: 10-ый класс), 6 сентября 2009, 13:33 [#4]:
а что мешает сделать нужный код в тех же самых кнопках, которые вызывают календарь?
типа так:
кнопка1:
вызов календаря
делаем код, специфичный для кнопки1
кнопка2:
вызов календаря
делаем код, специфичный для кнопки2
и т.д.
или я чего-то не понимаю?
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.
|
|
resseg (статус: Посетитель), 6 сентября 2009, 13:40 [#5]:
То есть вызывает календарь, но код не исполняется, пока не произведен клик по кнопке ОК в календаре?
|
|
Егор (статус: 10-ый класс), 6 сентября 2009, 13:44 [#6]:
ну да.
а если надо наоборот, то можно так:
кнопкаХ:
код, специфичный для кнопкиХ
вызов календаря
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.
|
|
resseg (статус: Посетитель), 6 сентября 2009, 13:48 [#7]:
Тогда как это сделать.
p/s
Есть также модуль, Date_and_Time, может через модуль лучше. Не знаю.
|
|
Егор (статус: 10-ый класс), 6 сентября 2009, 14:01 [#8]:
можно и так сделать (если нужна специфическая проверка данных для каждой из кнопок "кнопка1", "кнопка2"...)
кнопкаХ:
1. вызываем календарь
(в календаре кнопка ОК только закрывает форму календаря, ничего не проверяя и не делая или делая только то, что нужно делать для всех без исключения случаев)
2. затем в коде кнопкиХ проверяем введённые данные, выводим сообщение о недопустимости некоторых данных и снова показываем календарь.
но тут календарь будет скрываться, т.е. сначала исчезнет календарь, появится сообщение об ошибке, а затем календарь опять появится.
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.
|
|
Егор (статус: 10-ый класс), 6 сентября 2009, 14:03 [#9]:
Я просмотрел ваш файл, но не совсем понял, что к чему. Там лишь одна кнопка, вызывающая календарь.
Остальных кнопок, я так понял, пока ещё нет? Что они должны делать?
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.
|
|
resseg (статус: Посетитель), 6 сентября 2009, 14:10 [#10]:
Да нет что-то больно мудрено, закрытие и повторное открытие, это уже навороты.
Желательно что бы все происходило в открытом календаре.
Через модуль нельзя?
|
|
resseg (статус: Посетитель), 6 сентября 2009, 14:13 [#11]:
Это черновой пример будет четыре кнопки.
|
|
Егор (статус: 10-ый класс), 6 сентября 2009, 14:48 [#12]:
Можно попробовать так:
1. в самом начале модуле календаря объявляем глобальную переменную, которую будет видно и во внешних модулях:
Public NumberFunc As Integer
2. перед вызовом метода Show календаря устанавливаем эту переменную - присваиваем ей номер кнопки:
UserForm1.NumberFunc = 1
UserForm1.Show
3. в модуле создаём функции, которые специфичны для каждой из кнопок
Private Function func1() As Boolean
'код функции для первой кнопки
func1 = True 'если всё хорошо (все значения корректны), то вернём true, иначе - false
End Function
Private Function func2() As Boolean
'код функции для второй кнопки
func2 = True
End Function
...
4. в обработчике кнопки ОК проверяем, чему равен NumberFunc и вызываем необходимую функцию, а результат записываем в переменную canexit:
Dim canexit As Boolean
select case NumberFunc
case=1
canexit = func1()
case=2
canexit = func2()
case=3
canexit = func3()
case=4
canexit = func4()
End Select
if canexit then Hide
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.
|
|
resseg (статус: Посетитель), 6 сентября 2009, 15:29 [#13]:
Что не очень много сбоев ошибок. Может я что-то не то делаю. Может все-таки специфичный код для кнопки, как это будет выглядеть?
|
|
resseg (статус: Посетитель), 6 сентября 2009, 15:42 [#14]:
Я нашел что то подобное для этого календаря, правда код здесь простой ввод даты в TextBox конпкой ОК и без условий, но смыл тот же самый. Посмотрите
Private Sub CommandButton1 Click(): Me.TextBox1 = Get_Date(Me.TextBox1, Now): End Sub
Private Sub CommandButton2 Click(): Me.TextBox2 = Get_Date(Me.TextBox2, Now): End Sub
Private Sub CommandButton3_Click(): Me.TextBox3 = Get_Date(Me.TextBox3, Now): End Sub
|
|
Егор (статус: 10-ый класс), 6 сентября 2009, 17:58 [#15]:
в принципе, если так устраивает, то и так можно.
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.
|
|
resseg (статус: Посетитель), 6 сентября 2009, 18:04 [#16]:
Если бы знать как свой код правильно вставить.
|
|
Егор (статус: 10-ый класс), 6 сентября 2009, 18:23 [#17]:
Ох, ёх... Посмотрел я внимательнее то, что вы мне прислали... мама моя... зачем же так жёстко-то? Есть же компоненты стандартные - не надо было таблицу выбора дней в месяце ВРУЧНУЮ рисовать.
Для установки компонента дата/время сначала отобразим панель toolbox. Щёлкаем правой клавишей на свободном месте этой панели и выбираем Additional Controls. В появившемся окне ставим галочку напротив Microsoft Date and Time Picker Control или Microsoft Month View. Нажимаем ОК. Всё, появились новые кнопки на панели компонентов. Поставьте их на форму, наслаждайтесь. 
Опишите подробнее, что должны делать эти четыре будущие кнопки? Чем их код будет так принципиально отличаться?
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.
|
|
Егор (статус: 10-ый класс), 6 сентября 2009, 18:28 [#18]:
а ещё там же есть "Элемент управления Календарь" в самом конце
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.
|
|
resseg (статус: Посетитель), 6 сентября 2009, 18:43 [#19]:
Этот календарь я скачал с форума, на форуме о нем одобрительно отзываются.
А насчет Microsoft Date and Time Picker Control или Microsoft Month View у меня почему то нет.
Мне бы с одним кодом пока разобраться.
Другие коды тоже будут вставлять ,и удалять значения, пока у меня их нет.
|
|
Егор (статус: 10-ый класс), 6 сентября 2009, 18:50 [#20]:
галочка "selected items only" должна быть снята
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.
|
Страницы: [1] [2] [Следующая »]
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|