Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Как модернизировать макрос для ввода дат / 22 сообщений из 22, страница 1 из 1
18.01.2010, 16:08
    #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
18.01.2010, 16:12
    #36416300
Hugo121
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как модернизировать макрос для ввода дат
OptionButton2 (дата цифрами), всегда остается активным - так уберите строку
Код: plaintext
OptionButton2 = True
У Вас если он True, эта опция не срабатывает, а если он не True, срабатывает. Т.е. всегда в итоге True.
...
Рейтинг: 0 / 0
18.01.2010, 17:22
    #36416459
Gleod
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как модернизировать макрос для ввода дат
Hugo121,
А чем ее заменить, чтобы переключатели фиксировались до определенного момента?
...
Рейтинг: 0 / 0
18.01.2010, 17:26
    #36416474
Hugo121
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как модернизировать макрос для ввода дат
Эту строку стереть, ну или закомментировать '.
Т.к. примера файла нет, 100% сказать не могу, но на 99% они останутся так, как будут нажаты.
...
Рейтинг: 0 / 0
18.01.2010, 17:32
    #36416494
Hugo121
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как модернизировать макрос для ввода дат
И так, с каким положением будет сохранён файл. Если сохранять надо с определённым положением, можно это задать в
Код: plaintext
1.
2.
3.
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Sheets( 1 ).OptionButton1 = True
End Sub
...
Рейтинг: 0 / 0
18.01.2010, 17:58
    #36416578
Gleod
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как модернизировать макрос для ввода дат
Hugo121,
Высылаю файл
...
Рейтинг: 0 / 0
18.01.2010, 18:13
    #36416615
Hugo121
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как модернизировать макрос для ввода дат
Переключатели-то на форме, а не на листе. Глубоко не роясь, если надо, чтобы всегда при загрузке формы был нажат один из баттонов, поставьте ему в свойствах Value = True
...
Рейтинг: 0 / 0
18.01.2010, 18:21
    #36416634
Hugo121
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как модернизировать макрос для ввода дат
Или другой вариант, дополнить код:
Код: plaintext
1.
2.
Private Sub UserForm_Initialize()
frm_Calendar.OptionButton2.Value = True
Это можно уже в зависимости от других условий задавать.
...
Рейтинг: 0 / 0
18.01.2010, 18:28
    #36416642
Hugo121
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как модернизировать макрос для ввода дат
Что то я автореще очень важно, так это то, чтобы при нажатии на один из двух OptionButton, он фиксировался и оставался включенным, аж до момента нажатия на другой, из них. Если это возможно сделать технически.
пропустил. Т.е. форма будет пропадать и вновь появляться, а переключатели должны оставаться, как были нажаты? Подумаю на досуге, пока вижу путь только заносить куда-то в лист значение и проверять его при открытии формы. Может кто придумает что получше.
...
Рейтинг: 0 / 0
18.01.2010, 18:45
    #36416665
Gleod
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как модернизировать макрос для ввода дат
Hugo121,
А главный вопрос, изменение формата даты с "1/18/2010" на "18.01.2010" остался нерешенным.
...
Рейтинг: 0 / 0
18.01.2010, 20:38
    #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
18.01.2010, 20:54
    #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
18.01.2010, 20:56
    #36416818
Hugo121
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как модернизировать макрос для ввода дат
Поправка - вместо )) & " s." поставь, как надо - кодировка скосячила...
...
Рейтинг: 0 / 0
18.01.2010, 22:01
    #36416896
Gleod
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как модернизировать макрос для ввода дат
Hugo121,
К сожалению не работает, спотыкается на calstate =
...
Рейтинг: 0 / 0
18.01.2010, 22:20
    #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
19.01.2010, 01:20
    #36417038
Gleod
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как модернизировать макрос для ввода дат
Hugo121,
С датой словами справился. А вот сделать так чтобы правильно отображалась дата сегодня. Никак не могу. Поскольку из-за недостатка знаний по макросам, делаю все методом тыка и на догадках.
Поэтому прошу мне помочь и в этом вопросе.
Еще раз спасибо!
...
Рейтинг: 0 / 0
19.01.2010, 09:12
    #36417198
Hugo121
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как модернизировать макрос для ввода дат
Так, про какую версию говоришь? В 7-ой сегодняшняя дата отображается правильно (в заголовке календаря), и день выбирается правильно, но в другую форму передаётся на месяц больше - так было by design.
...
Рейтинг: 0 / 0
19.01.2010, 11:05
    #36417448
Gleod
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как модернизировать макрос для ввода дат
Hugo121,доброго вам дня!
Из последнего сообщения че то ничего не понял. О какой версии идет речь?
...
Рейтинг: 0 / 0
19.01.2010, 11:12
    #36417469
Hugo121
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как модернизировать макрос для ввода дат
Это я у Вас спрашивал
Моя последняя К сообщению приложен файл (Календарь на форме_v.7.rar - 48Kb) cкачать
Там уже правильно отображалась дата сегодня
...
Рейтинг: 0 / 0
19.01.2010, 11:28
    #36417517
Gleod
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как модернизировать макрос для ввода дат
Hugo121,да нет же!Посмотрел еще раз.И в шапке и в текстовом поле календаряч отображается лютий а сегодня на дворе січень
...
Рейтинг: 0 / 0
19.01.2010, 11:59
    #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
19.01.2010, 12:34
    #36417749
Hugo121
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как модернизировать макрос для ввода дат
Дальше копнул - всюду .ListIndex = Month(Date) надо заменить на .ListIndex = Month(Date) - 1
Потому что этот .ListIndex забит из массива месяцев данными с 1 по 12 в позиции с 0 по 11.
...
Рейтинг: 0 / 0
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Как модернизировать макрос для ввода дат / 22 сообщений из 22, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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