Страницы: 1 2 След.
RSS
Запись даты с календаря в форму или в ячейку
 
Добрый день.
Старожилы, нужна Ваша помощь.
Суть вопроса, был файл донор, я из него переделал под свои нужды, поковырялся вроде все работает, но уперся в одну проблему, с которой не могу разобраться, т.к. с WBA на "Вы". Нужно (уговорить) календарь, чтобы прописывал дату в поле В4;В37 и в выпадающем окне "Расход". В "Приход" все прописывается.
А в первых двух случаях, все упирается в строку:
Код
UserForm1.ActiveControl = Format(Me.TextBox_Дата, "dd/mm/yyyy")

Диалоговое окно открывается, но при записи данных выдает ошибку, т.к. не прописана команда куда записывать. Я уже всю голову сломал, в доноре все прописывает, а здесь нет. Там только нет команды прописать дату в массиве ячеек. Вот и обратился за помощью.
 
UserForm1.ActiveControl..
А Вы разными кнопками вызываете разные формы.
 
Да, там получается календарь вызывается тремя способами.
1. Из массива ячеек В4;В37, и туда надо записать дату, в ту ячейку из которой вызван календарь.
2. Кнопка "Приход", вызывает диалоговое окно, там все прописывает, это и есть UserForm1
3. Кнопка "Расход" вызывает диалоговое окно , это UserForm2.
Получается 1 и 3 вариант не прописывает дату.

Спасибо большое, что тему исправили!
Изменено: kovap - 26.12.2015 15:39:26
 
Можно одну форму вместо двух (Приход и Расход). Они одинаковы, только в коде дописать обработку.

Самый простой вариант - перед вызовом формы записать в глобальную переменную или в ячейку листа значение.
Например: 1 - приход, запись в форму прихода; 2 - расход, запись в форму расхода; 3 - вызов из диапазона листа, запись даты в ячейку.
Код
Private Sub Cmd_Select_Click()
'Команда - закончить выбор даты и закрыть форму
    Select Case СУПЕРПУПЕРПЕРЕМЕННАЯ
        Case 1
            UserForm1.ActiveControl = Format(Me.TextBox_Дата, "dd/mm/yyyy")
        Case 2
            UserForm2.ActiveControl = Format(Me.TextBox_Дата, "dd/mm/yyyy")
        Case 3
            ActiveCell.Value = Format(Me.TextBox_Дата, "dd/mm/yyyy")
    End Select

   Unload Me
End Sub
 
Приход и Расход формы одинаковы, там только заголовки в окне разные. Если сделать одну форму мне кажется будет путаница. Вопросом отвлекли и забыл куда будет произведена запись. По этому и сделал два окна. Календарь получается понимает от куда он вызван, но команда на ввод у него одна, хотя в доноре он прописывал в трех оконцах, правда они все были в одном диалоговом окне. Я понимаю чего ему надо, но как это сделать не пойму. Мне кажется ему надо указать, что прописывать там от куда вызван.
 
Цитата
kovap написал:
Например: 1 - приход, запись в форму прихода; 2 - расход, запись в форму расхода; 3 - вызов из диапазона листа, запись даты в ячейку.
Да, вот именно это ему и нужно прописать, только вместо форм (это я понял про Лист2) оставить диалоговые окна Приход, Расход.
 
Вы пропустили:
Цитата
перед вызовом формы записать в глобальную переменную или в ячейку листа значение.
В сообщении 4 и код есть.
 
Цитата
vikttur написал: В сообщении 4 и код есть.
Пока писал сообщение видно код появился.
Спасибо сейчас попробую.
 
Ошибки при вводе даты не происходи, но записи самой даты нет. Даже в Приходе не стал записывать.
 
А СУПЕРПУПЕРПЕРЕМЕННАЯ вы прописали ?
 
Прописал весь код вместо этого:
Код
Private Sub Cmd_Select_Click()
'Команда - закончить выбор даты и закрыть форму
       UserForm1.ActiveControl = Format(Me.TextBox_Дата, "dd/mm/yyyy")
   Unload Me
End Sub
 
Третий раз:
Цитата
перед вызовом формы записать в глобальную переменную или в ячейку листа значение.
Например, в общем модуле объявить глобальную переменную (строку вписать над процедурами):
Public СУПЕРПУПЕРПЕРЕМЕННАЯ As Byte
Перед вызовом календаря дописать строку:
СУПЕРПУПЕРПЕРЕМЕННАЯ=1 (или 2, 3 - чтобы календарь сообразил, откуда его вызвали)
 
А теперь понял..... Теперь надо понять куда эту фамилию записать))) Общий модуль это модуль календаря, я правильно понял. А СУПЕРПУПЕРПЕРЕМЕННАЯ=1 ,2 и 3 это прописываем перед запуском календаря от куда он вызывается. Я так быстро не соображу))) буду пробовать. Спасибо.
 
Цитата
Общий модуль это модуль календаря
Нет, общий модуль - это общий модуль. Не листа, не формы, не книги. Модуль, в котором записаны общие процедуры.
Нужно не просто задавать вопросы, а перед вопросом пройтись-поискать. Так быстрее знания придут.

Если бы я назвал переменную Автомотовелофотошинотракторныйзавод - Вы бы и это название писали в коде? )
 
Спасибо, пойду почитаю.
Переменная которая суперпупер это Select Case
 
Select Case - это оператор  выбора.
Select Case АА - выбираем тот Case, с которым совпадет значение АА. АА - вот это и есть наша переменная. На месте ее может быть ссылка на ячейку, на поле формы...
 
vikttur я знаю, что вы шарите в Excel, но когда у меня спрашивают какие материалы лучше для кузовного ремонта, я просто говорю, а не посылаю учить матчасть.
В каких то вещах Вы разбираетесь лучше, в каких то я. Я попросил помочь мне в этом вопросе, а те тыкать как котенка.
Вам прописать код, дело двух минут, или сказать куда, что прописать еще меньше. Я в кое чем тоже могу медалями потрясти, только смысла в этом не вижу.
 
1.
Код
 Public frm As Object

2.
Код
Private Sub NAME_U_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    Set frm = Me
    Form_SelectDate.Show
     Set frm = Nothing
End Sub

3.
Код
Private Sub Cmd_Select_Click()
'Команда - закончить выбор даты и закрыть форму
       frm.ActiveControl = Format(Me.TextBox_Дата, "dd/mm/yyyy")
   Unload Me
End Sub


Но зачем вам с календарем Mod_Date_Valid? Или, точнее, с ним календарь?  :D
Изменено: RAN - 26.12.2015 17:52:24
 
В модуль 1 переменную обозвал iCalendar
Код
Public dt_1 As Date
Public dt_2 As Date
Dim pol As String
Dim rowvyb As Integer
Public iCalendar As Integer

Sub ShowDialog_P()
   iCalendar = 1
    UserForm1.Show
End Sub

Sub ShowDialog_R()
   iCalendar = 2
    UserForm2.Show
End Sub
 
Цитата
RAN написал:
Но зачем вам с календарем Mod_Date_Valid? Или, точнее, с ним календарь?  
Этот модуль был в доноре, я его и оставил. А для чего он, я понятия не имею)))
Спасибо всем, кто откликнулся.
 
И в модуль листа 1
Код
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Count > 1 Then Exit Sub
    If (Not Intersect(Target, Range("B4:B37")) Is Nothing) Then
       iCalendar = 3
        Form_SelectDate.Show
    End If
End Sub
 
Цитата
kovap написал:
А для чего он, я понятия не имею)))
ОбЯсняю  :D
вводите в ячейку 0112 - получаете 01.12.2015
вводите в ячейку 101299 - получаете 10.12.1999
И т.д., и т.п.
 
Ясно))) Значит можно его выкинуть. Я донора хотел сюда скинуть, но он 280 кб, а пустой....
А подскажите, как можно дописать в формы, что бы в ячейке П/№ сразу выставлялось число, что бы каждый раз не смотреть какое число было предыдущее.
 
Хотя вспылил.
Кто-то изрядно покромсал код, так что в исходном варианте (как я описал, он работать уже не будет).
 
Вот донор, в архив сжал, может кому пригодится.
Сейчас меняю код, как Kuzmich написал, опять ошибки лезут......
Ребят, если не трудно скиньте исправленный файл, уже голова кругом, весь день с ним колдую. Эти танцы уже надоели.
 
Цитата
Я в кое чем тоже могу медалями потрясти
Вы неправильно поняли.
Спрашиваете об элементарных вещах, ответы на которые можно найти в справке. Тот же Select Case - сначала ввести в поиск по справке - никак? На форуме помогают, но не по азам, которые можно найти, приложив минимум усилий.
 
Цитата
опять ошибки лезут......
Посмотрите ваш первый вариант
 
Kuzmich Спасибо большое, теперь понял где не так прописывал.
Единственное в этом файле "Приход", "Расход" местами поменены, но это мелочи.
И еще один баг есть, если таблицы (приход, расход) чистые, форма не находит цифру и выдает ошибку, а так все работает.
Еще раз, большое спасибо!!!
 
Цитата
если таблицы (приход, расход) чистые, форма не находит цифру и выдает ошибку
Код
Sub ZAPIS_GO()
    With Sheets("РИД")
      If NextRow = 2 Then
         TIN.Text = 1
      Else
        TIN.Text = .Cells(NextRow - 1, 1) + 1
      End If
        NAME_U.Text = .Cells(NextRow, 2)
        FULLN_U.Text = .Cells(NextRow, 3)
        End With
End Sub

 
Kuzmich, спасибо, все заработало!!!
Страницы: 1 2 След.
Читают тему
Наверх