Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 3 158

Раздел: Basic
/ вопрос открыт /

Доброго времени суток, уважаемые эксперты!

Подскажите пожалуйста.
У меня код, который вводит данные или удаляет на выбранную дату, находится в кнопке 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.  
  2. Excel 2007


Примечание #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 Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: resseg (статус: Посетитель)
Вопрос отправлен: 6 сентября 2009, 11:54
Состояние вопроса: открыт, ответов: 0.


Мини-форум вопроса

Всего сообщений: 35; последнее сообщение — 7 сентября 2009, 20:52; участников в обсуждении: 2.

Страницы: [1] [2] [Следующая »]

Егор

Егор (статус: 10-ый класс), 6 сентября 2009, 12:51 [#1]:

не совсем понял вопрос
пожалуйста, по шагам распишите, что должно быть
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.
resseg

resseg (статус: Посетитель), 6 сентября 2009, 13:05 [#2]:

Добрый день Егор.
Есть календарь (посмотрите файл), при клике по кнопке ОК в календаре, выполняется код.
Но так как календарь будет в последствие много функциональный, необходимо чтобы код (при клике по кнопке ОК в календаре) выполнялся по отношение к той кнопке, которой он был открыт.
resseg

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

resseg (статус: Посетитель), 6 сентября 2009, 13:40 [#5]:

То есть вызывает календарь, но код не исполняется, пока не произведен клик по кнопке ОК в календаре?
Егор

Егор (статус: 10-ый класс), 6 сентября 2009, 13:44 [#6]:

ну да.
а если надо наоборот, то можно так:

кнопкаХ:
код, специфичный для кнопкиХ
вызов календаря
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.
resseg

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

resseg (статус: Посетитель), 6 сентября 2009, 14:10 [#10]:

Да нет что-то больно мудрено, закрытие и повторное открытие, это уже навороты.
Желательно что бы все происходило в открытом календаре.
Через модуль нельзя?
resseg

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

resseg (статус: Посетитель), 6 сентября 2009, 15:29 [#13]:

Что не очень много сбоев ошибок. Может я что-то не то делаю. Может все-таки специфичный код для кнопки, как это будет выглядеть?
resseg

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

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

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] [Следующая »]

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:31
Выполнено за 0.02 сек.