powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Как модернизировать макрос для ввода дат
22 сообщений из 22, страница 1 из 1
Как модернизировать макрос для ввода дат
    #36416288
Gleod
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!
Имеется макрос. Может быть не очень совершенный? Только учусь их делать.

Private Sub insert_date_Click()
If Me.OptionButton2.Value = True Then
UserForm2.TextBoxDate = meDateFormat(DateSerial(year1.Value, drop_month.ListIndex + 1, iDay)) & " р."
Else
UserForm2.TextBoxDate = DateSerial(year1.Value, drop_month.ListIndex + 1, iDay)
OptionButton2 = True
End If
Unload Me
End Sub

Который вставляет в текстовое поле дату в двух варинтах.
Первый вариант даты имеет формат - 18 січня 2010 р. (обязательно на украинском языке) Месяц словами берет из специального макроса meDateFormat. Второй - 1/18/2010.
А мне нужно, чтобы второй вариант даты, отображался в текстбоксе в виде – 18.01.2010 (через точку и день стоял в переди месяца).
Смена вариантов написания дат,, осуществляется двумя OptionButton, которые находятся на этой же форме. Дата вставляется, посредством выпадающего календарика.
И , что еще очень важно, так это то, чтобы при нажатии на один из двух OptionButton, он фиксировался и оставался включенным, аж до момента нажатия на другой, из них. Если это возможно сделать технически.
Сейчас же просто, OptionButton2 (дата цифрами), всегда остается активным.
На ПК стоит Офис 2003.
Заранее спасибо!
...
Рейтинг: 0 / 0
Как модернизировать макрос для ввода дат
    #36416300
Hugo121
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
OptionButton2 (дата цифрами), всегда остается активным - так уберите строку
Код: plaintext
OptionButton2 = True
У Вас если он True, эта опция не срабатывает, а если он не True, срабатывает. Т.е. всегда в итоге True.
...
Рейтинг: 0 / 0
Как модернизировать макрос для ввода дат
    #36416459
Gleod
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Hugo121,
А чем ее заменить, чтобы переключатели фиксировались до определенного момента?
...
Рейтинг: 0 / 0
Как модернизировать макрос для ввода дат
    #36416474
Hugo121
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Эту строку стереть, ну или закомментировать '.
Т.к. примера файла нет, 100% сказать не могу, но на 99% они останутся так, как будут нажаты.
...
Рейтинг: 0 / 0
Как модернизировать макрос для ввода дат
    #36416494
Hugo121
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
И так, с каким положением будет сохранён файл. Если сохранять надо с определённым положением, можно это задать в
Код: plaintext
1.
2.
3.
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Sheets( 1 ).OptionButton1 = True
End Sub
...
Рейтинг: 0 / 0
Как модернизировать макрос для ввода дат
    #36416578
Gleod
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Hugo121,
Высылаю файл
...
Рейтинг: 0 / 0
Как модернизировать макрос для ввода дат
    #36416615
Hugo121
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Переключатели-то на форме, а не на листе. Глубоко не роясь, если надо, чтобы всегда при загрузке формы был нажат один из баттонов, поставьте ему в свойствах Value = True
...
Рейтинг: 0 / 0
Как модернизировать макрос для ввода дат
    #36416634
Hugo121
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Или другой вариант, дополнить код:
Код: plaintext
1.
2.
Private Sub UserForm_Initialize()
frm_Calendar.OptionButton2.Value = True
Это можно уже в зависимости от других условий задавать.
...
Рейтинг: 0 / 0
Как модернизировать макрос для ввода дат
    #36416642
Hugo121
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Что то я автореще очень важно, так это то, чтобы при нажатии на один из двух OptionButton, он фиксировался и оставался включенным, аж до момента нажатия на другой, из них. Если это возможно сделать технически.
пропустил. Т.е. форма будет пропадать и вновь появляться, а переключатели должны оставаться, как были нажаты? Подумаю на досуге, пока вижу путь только заносить куда-то в лист значение и проверять его при открытии формы. Может кто придумает что получше.
...
Рейтинг: 0 / 0
Как модернизировать макрос для ввода дат
    #36416665
Gleod
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Hugo121,
А главный вопрос, изменение формата даты с "1/18/2010" на "18.01.2010" остался нерешенным.
...
Рейтинг: 0 / 0
Как модернизировать макрос для ввода дат
    #36416803
Hugo121
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сам подумал - вместо использования ячейки запоминаем значение в переменной.
В модуль добавляем
Код: plaintext
1.
Public calstate As Integer
А в frm_Calendar всюду перед Unload Me добавляем
Код: plaintext
1.
2.
3.
    If Me.OptionButton1.Value = True Then calstate =  1 
    If Me.OptionButton2.Value = True Then calstate =  2 
Unload Me
Начало кода формы с календарём теперь такое:
Код: plaintext
1.
2.
3.
4.
Private Sub UserForm_Initialize()
    Dim tmp%, month_array
    If calstate =  1  Then OptionButton1.Value = True
    If calstate =  2  Then OptionButton2.Value = True

Так как переменная при создании 0, то при загрузке в форме оба переключателя False или так, как в их свойствах выставлено.
После выбора любого из них это положение запоминается.

По дате пока не знаю.
...
Рейтинг: 0 / 0
Как модернизировать макрос для ввода дат
    #36416816
Hugo121
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
По дате получилось так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Private Sub insert_date_Click()
If Me.OptionButton2.Value = True Then
UserForm2.TextBoxDate = meDateFormat(DateSerial(year1.Value, drop_month.ListIndex +  1 , iDay)) & " s."
Else
UserForm2.TextBoxDate = Format(DateSerial(year1.Value, drop_month.ListIndex +  1 , iDay), "dd.mm.yyyy")
End If
    If Me.OptionButton1.Value = True Then calstate =  1 
    If Me.OptionButton2.Value = True Then calstate =  2 
Unload Me
End Sub
...
Рейтинг: 0 / 0
Как модернизировать макрос для ввода дат
    #36416818
Hugo121
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Поправка - вместо )) & " s." поставь, как надо - кодировка скосячила...
...
Рейтинг: 0 / 0
Как модернизировать макрос для ввода дат
    #36416896
Gleod
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Hugo121,
К сожалению не работает, спотыкается на calstate =
...
Рейтинг: 0 / 0
Как модернизировать макрос для ввода дат
    #36416916
Hugo121
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Проверяй приложенный файл - в нём работает?
Там ещё косяк с украинской датой. Дни не ставятся (переменные напутаны), и текущая дата не текущая (зачем-то -1 было). ArrMonth и ArrMonthSmall тоже лишнее. Автору конечно виднее, может -1 и нужно, но тогда и цифрами тоже -1 надо делать. Я функцию переделал так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Public Function meDateFormat(ByVal ValDate As Date)
        Dim ArrMonthRP
        Dim isMonth, isDay, isYear
        Dim n As Integer
        ArrMonthRP = Array("січня", "лютого", "березня", "квітня", "травня", "червня", "липня", "серпня", "вересня", "жовтня", "листопада", "грудня")
        If IsDate(ValDate) = False Then
        Exit Function
        End If
        isMonth = Format(ValDate, "M")
        isDay = Format(ValDate, "d")
        isYear = Format(ValDate, "yyyy")
        meDateFormat = ArrMonthRP(isMonth) & " " & isDay & " " & isYear
End Function
Но в начале говорилось, что дату надо 18 січня 2010 р., тогда
Код: plaintext
meDateFormat = isDay & " " & ArrMonthRP(isMonth) & " " & isYear
наверное надо писать... смотри сам, тут я не трогал, так было.
Да и в календаре кнопки дней недели непонятно себя ведут. Я их поставил Locked = True и в коде всё к ним относящееся закомментировал.
С месяцами непонятно - где ставится на один позже, где не ставится... Я там покопался, вроде привёл всё к одному, но конечно каша ещё та...
Автор, разбирайся сам, надо так или не надо, мой вариант прикладываю.
И ещё - всюду, а не только там, где выше написал, где
Unload Me
добавил
If Me.OptionButton1.Value = True Then calstate = 1
If Me.OptionButton2.Value = True Then calstate = 2
Может всюду и не надо, но лишним не будет.
...
Рейтинг: 0 / 0
Как модернизировать макрос для ввода дат
    #36417038
Gleod
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Hugo121,
С датой словами справился. А вот сделать так чтобы правильно отображалась дата сегодня. Никак не могу. Поскольку из-за недостатка знаний по макросам, делаю все методом тыка и на догадках.
Поэтому прошу мне помочь и в этом вопросе.
Еще раз спасибо!
...
Рейтинг: 0 / 0
Как модернизировать макрос для ввода дат
    #36417198
Hugo121
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Так, про какую версию говоришь? В 7-ой сегодняшняя дата отображается правильно (в заголовке календаря), и день выбирается правильно, но в другую форму передаётся на месяц больше - так было by design.
...
Рейтинг: 0 / 0
Как модернизировать макрос для ввода дат
    #36417448
Gleod
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Hugo121,доброго вам дня!
Из последнего сообщения че то ничего не понял. О какой версии идет речь?
...
Рейтинг: 0 / 0
Как модернизировать макрос для ввода дат
    #36417469
Hugo121
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Это я у Вас спрашивал
Моя последняя К сообщению приложен файл (Календарь на форме_v.7.rar - 48Kb) cкачать
Там уже правильно отображалась дата сегодня
...
Рейтинг: 0 / 0
Как модернизировать макрос для ввода дат
    #36417517
Gleod
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Hugo121,да нет же!Посмотрел еще раз.И в шапке и в текстовом поле календаряч отображается лютий а сегодня на дворе січень
...
Рейтинг: 0 / 0
Как модернизировать макрос для ввода дат
    #36417621
Hugo121
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, точно, ну не разбираюсь я ваших месяцах...
Нашёл, добавь строку Option Base 1 перед функцией (массив иначе начинался с нуля, и сегодняшнии первый месяц брал второй элемент массива)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Option Base  1 
Public Function meDateFormat(ByVal ValDate As Date)
        Dim ArrMonthRP
        Dim isMonth, isDay, isYear
        Dim n As Integer
        ArrMonthRP = Array("січня", "лютого", "березня", "квітня", "травня", "червня", "липня", "серпня", "вересня", "жовтня", "листопада", "грудня")
        If IsDate(ValDate) = False Then
        Exit Function
        End If
        isMonth = Format(ValDate, "M")
        isDay = Format(ValDate, "d")
        isYear = Format(ValDate, "yyyy")
        meDateFormat = ArrMonthRP(isMonth) & " " & isDay & " " & isYear
    End Function
Но в календаре высвечивается всё равно второй месяц, дальше рыть нужно... ИМХО легче с нуля новый календарь написать (вот как здесь например ), чем этот править... Но я писать не буду :)
...
Рейтинг: 0 / 0
Как модернизировать макрос для ввода дат
    #36417749
Hugo121
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Дальше копнул - всюду .ListIndex = Month(Date) надо заменить на .ListIndex = Month(Date) - 1
Потому что этот .ListIndex забит из массива месяцев данными с 1 по 12 в позиции с 0 по 11.
...
Рейтинг: 0 / 0
22 сообщений из 22, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Как модернизировать макрос для ввода дат
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]