Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/функция TODAY() в VBA для календаря - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » функция TODAY() в VBA для календаря (устранение ошибки)
функция TODAY() в VBA для календаря
карандаш Дата: Пятница, 03.05.2013, 10:09 | Сообщение № 1
Группа: Проверенные
Ранг: Обитатель
Сообщений: 329
Репутация: 8 ±
Замечаний: 0% ±

2010
Здравствуйте
есть "календарь", у которого заведена кнопка "сегодня" для выставления текущей даты
Для упрощения сегодняшняя дата присваивается конечной ячейке
Но применение этой функции дает ошибку.

Подскажите как правильно применить эту функцию.

если не трудно, то подскажите, как получить отдельно год, месяц и день из функции TODAY для того, чтобы присвоить их значения определенным ячейкам в коде VBA
(например, N16, L16 и К16, соответственное)

код VBA:


2.
Подскажите, пожалуйста, так же правильный код для копирования результата (ячейка L2) в буфер обмена как значение даты.
Т.к. простое копирование не позволяет потом вставить просто результат из буфера без форматирования (ячейка является объединенной и форматированной)

спасибо
К сообщению приложен файл: kalendar.xls (48.0 Kb)


Сообщение отредактировал карандаш - Пятница, 03.05.2013, 10:42
 
Ответить
СообщениеЗдравствуйте
есть "календарь", у которого заведена кнопка "сегодня" для выставления текущей даты
Для упрощения сегодняшняя дата присваивается конечной ячейке
Но применение этой функции дает ошибку.

Подскажите как правильно применить эту функцию.

если не трудно, то подскажите, как получить отдельно год, месяц и день из функции TODAY для того, чтобы присвоить их значения определенным ячейкам в коде VBA
(например, N16, L16 и К16, соответственное)

код VBA:


2.
Подскажите, пожалуйста, так же правильный код для копирования результата (ячейка L2) в буфер обмена как значение даты.
Т.к. простое копирование не позволяет потом вставить просто результат из буфера без форматирования (ячейка является объединенной и форматированной)

спасибо

Автор - карандаш
Дата добавления - 03.05.2013 в 10:09
Матраскин Дата: Пятница, 03.05.2013, 10:44 | Сообщение № 2
Группа: Друзья
Ранг: Обитатель
Сообщений: 375
Репутация: 81 ±
Замечаний: 0% ±

20xx
по первому вопросу.... первое что бросилось в глаза
[vba]
Код
If Not Intersect(Target, Range("d4:j15,l4:l15,n5:n12,c3")) Is Nothing Then
[/vba]
в вашем диапазоне нет n15 biggrin
а чтобы узнать сегоднюшнуююую дату используйте Year(now) Mounth(now) e.c.t или просто Date

по второму вопросу...эм, честно говоря не понял)) но вот что думаю
[vba]
Код
    Dim Сегодня As Date
       Сегодня = Range("l2")
       Cells(21, 21) = Сегодня
[/vba]



в интернете опять кто-то не прав

Сообщение отредактировал Матраскин - Пятница, 03.05.2013, 11:19
 
Ответить
Сообщениепо первому вопросу.... первое что бросилось в глаза
[vba]
Код
If Not Intersect(Target, Range("d4:j15,l4:l15,n5:n12,c3")) Is Nothing Then
[/vba]
в вашем диапазоне нет n15 biggrin
а чтобы узнать сегоднюшнуююую дату используйте Year(now) Mounth(now) e.c.t или просто Date

по второму вопросу...эм, честно говоря не понял)) но вот что думаю
[vba]
Код
    Dim Сегодня As Date
       Сегодня = Range("l2")
       Cells(21, 21) = Сегодня
[/vba]


Автор - Матраскин
Дата добавления - 03.05.2013 в 10:44
Саня Дата: Пятница, 03.05.2013, 12:02 | Сообщение № 3
Группа: Друзья
Ранг: Ветеран
Сообщений: 1068
Репутация: 560 ±
Замечаний: 0% ±

XL 2016
чтобы получить 1-е воскресенье месяца, можно воспользоваться след. формулой:
Код
=ДАТА(N16;L16;1)+7-ДЕНЬНЕД(ДАТА(N16;L16;1);2)


по 2 вопросу не понял. Тебе нужно именно буфер задействовать?
или range.copy подойдет? у тебя же есть K2 - дубль ячейки L2, она не объедененная.
 
Ответить
Сообщениечтобы получить 1-е воскресенье месяца, можно воспользоваться след. формулой:
Код
=ДАТА(N16;L16;1)+7-ДЕНЬНЕД(ДАТА(N16;L16;1);2)


по 2 вопросу не понял. Тебе нужно именно буфер задействовать?
или range.copy подойдет? у тебя же есть K2 - дубль ячейки L2, она не объедененная.

Автор - Саня
Дата добавления - 03.05.2013 в 12:02
карандаш Дата: Пятница, 03.05.2013, 12:06 | Сообщение № 4
Группа: Проверенные
Ранг: Обитатель
Сообщений: 329
Репутация: 8 ±
Замечаний: 0% ±

2010
модераторам извинения (за неверное расположение по темам)

Матраскин, спасибо

причесал.
Получилось следующее:

теперь работает почти как надо
спасибо

один из вопросов преобразовался в следующий
1. как выделить текущую дату (образованную ячеками год, месяц и день - N16, L16, K16) в диапазоне дат (d4:j15)
если кликать на ячейки - они выделяются
если кликать на месяц или год, то выделенными остаются выбираемые ячейки, а полученная дата не имеет фокуса в указанном диапазоне (не понятно, рабочий это день или выходной)
это не критично, но наглядности добавило бы

наверное, нужен цикл и сравнение? или есть функция для диапазона?

Саня, уточню вопрос:
2. второй вопрос - получить в буфер обмена выбранную дату (т.е. в конце подпрограммы код, который бы копировал в буфер обмена выбранную дату, т.е. DATE(N16, L16, K16)

суть - в минимизации кликов
т.е. открыл лист с календарем, выбрал год, месяц дату - и уже имеешь в буфере дату
вернулся к своему файлу и Ctrl+С вставил дату как данные без форматов без всяких ухищрений (чтобы не копировать в Блокнот и обратно для избавления от форматов или не искать в выпадающем меню картинку копирования только значения)
т.е. за три клика имеешь в буфере "чистую" (от форматирования) дату

не знаю, что может подойти в данном случае
К сообщению приложен файл: kalendar_.xls (46.5 Kb)


Сообщение отредактировал карандаш - Пятница, 03.05.2013, 12:27
 
Ответить
Сообщениемодераторам извинения (за неверное расположение по темам)

Матраскин, спасибо

причесал.
Получилось следующее:

теперь работает почти как надо
спасибо

один из вопросов преобразовался в следующий
1. как выделить текущую дату (образованную ячеками год, месяц и день - N16, L16, K16) в диапазоне дат (d4:j15)
если кликать на ячейки - они выделяются
если кликать на месяц или год, то выделенными остаются выбираемые ячейки, а полученная дата не имеет фокуса в указанном диапазоне (не понятно, рабочий это день или выходной)
это не критично, но наглядности добавило бы

наверное, нужен цикл и сравнение? или есть функция для диапазона?

Саня, уточню вопрос:
2. второй вопрос - получить в буфер обмена выбранную дату (т.е. в конце подпрограммы код, который бы копировал в буфер обмена выбранную дату, т.е. DATE(N16, L16, K16)

суть - в минимизации кликов
т.е. открыл лист с календарем, выбрал год, месяц дату - и уже имеешь в буфере дату
вернулся к своему файлу и Ctrl+С вставил дату как данные без форматов без всяких ухищрений (чтобы не копировать в Блокнот и обратно для избавления от форматов или не искать в выпадающем меню картинку копирования только значения)
т.е. за три клика имеешь в буфере "чистую" (от форматирования) дату

не знаю, что может подойти в данном случае

Автор - карандаш
Дата добавления - 03.05.2013 в 12:06
карандаш Дата: Пятница, 03.05.2013, 12:16 | Сообщение № 5
Группа: Проверенные
Ранг: Обитатель
Сообщений: 329
Репутация: 8 ±
Замечаний: 0% ±

2010
Саня, спасибо, да
предложенный метод работает )))
коротко и красиво, без всяких извращений с кучей дополнительных ячеек)))
про первое воскресение месяца
 
Ответить
СообщениеСаня, спасибо, да
предложенный метод работает )))
коротко и красиво, без всяких извращений с кучей дополнительных ячеек)))
про первое воскресение месяца

Автор - карандаш
Дата добавления - 03.05.2013 в 12:16
Саня Дата: Пятница, 03.05.2013, 12:40 | Сообщение № 6
Группа: Друзья
Ранг: Ветеран
Сообщений: 1068
Репутация: 560 ±
Замечаний: 0% ±

XL 2016
1. для наглядности текущей даты добавь еще один условный формат
если надо именно выделение, то либо циклом полностью по календарю, либо оттолкнуться опять же от 1-го воскресенья

2.
Цитата (карандаш)
имеешь в буфере "чистую" (от форматирования) дату


41397 - это 3-е мая сего года в чистом виде, так надо?
дата - есть отформатированное число, так что думай, в каком виде нужно.
 
Ответить
Сообщение1. для наглядности текущей даты добавь еще один условный формат
если надо именно выделение, то либо циклом полностью по календарю, либо оттолкнуться опять же от 1-го воскресенья

2.
Цитата (карандаш)
имеешь в буфере "чистую" (от форматирования) дату


41397 - это 3-е мая сего года в чистом виде, так надо?
дата - есть отформатированное число, так что думай, в каком виде нужно.

Автор - Саня
Дата добавления - 03.05.2013 в 12:40
карандаш Дата: Пятница, 03.05.2013, 13:00 | Сообщение № 7
Группа: Проверенные
Ранг: Обитатель
Сообщений: 329
Репутация: 8 ±
Замечаний: 0% ±

2010
Саня,
Цитата (Саня)
41397 - это 3-е мая сего года в чистом виде, так надо?


думаю, что да,
ведь при вставке в ячейку, отформатированную как дата, получим дату
но без размера и цвета шрифта, цвета заливки, границ и прочего
формат будет местный

с дополнительным УФ попробовал
это именно то, что нужно
спасибо!


Сообщение отредактировал карандаш - Пятница, 03.05.2013, 13:06
 
Ответить
СообщениеСаня,
Цитата (Саня)
41397 - это 3-е мая сего года в чистом виде, так надо?


думаю, что да,
ведь при вставке в ячейку, отформатированную как дата, получим дату
но без размера и цвета шрифта, цвета заливки, границ и прочего
формат будет местный

с дополнительным УФ попробовал
это именно то, что нужно
спасибо!

Автор - карандаш
Дата добавления - 03.05.2013 в 13:00
Саня Дата: Пятница, 03.05.2013, 13:32 | Сообщение № 8
Группа: Друзья
Ранг: Ветеран
Сообщений: 1068
Репутация: 560 ±
Замечаний: 0% ±

XL 2016
[vba]
Код
Sub Now2Clipboard()
     With GetObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
         .SetText CLng(Date)
         .PutInClipboard
     End With
End Sub
[/vba]

не сегодня додумаешь сам как вставлять.
 
Ответить
Сообщение[vba]
Код
Sub Now2Clipboard()
     With GetObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
         .SetText CLng(Date)
         .PutInClipboard
     End With
End Sub
[/vba]

не сегодня додумаешь сам как вставлять.

Автор - Саня
Дата добавления - 03.05.2013 в 13:32
карандаш Дата: Пятница, 03.05.2013, 16:49 | Сообщение № 9
Группа: Проверенные
Ранг: Обитатель
Сообщений: 329
Репутация: 8 ±
Замечаний: 0% ±

2010
Саня, сделал так
[vba]
Код
Sub Now2Clipboard()
     With GetObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
         .SetText CLng(Cells(2, 11))
         .PutInClipboard
     End With
End Sub
[/vba]
1. а без странного набора цифр в фигурных скобках можно обойтись?
2. набор цифр в фигурных скобках может быть любым?
3. GetObject порождает объект или использует готовый?
3.1. если порождает, то потом убивает или каждый клик множит кол-во объектов и они пожирают память?

спасибо
работает именно так как надо
 
Ответить
СообщениеСаня, сделал так
[vba]
Код
Sub Now2Clipboard()
     With GetObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
         .SetText CLng(Cells(2, 11))
         .PutInClipboard
     End With
End Sub
[/vba]
1. а без странного набора цифр в фигурных скобках можно обойтись?
2. набор цифр в фигурных скобках может быть любым?
3. GetObject порождает объект или использует готовый?
3.1. если порождает, то потом убивает или каждый клик множит кол-во объектов и они пожирают память?

спасибо
работает именно так как надо

Автор - карандаш
Дата добавления - 03.05.2013 в 16:49
Саня Дата: Пятница, 03.05.2013, 17:11 | Сообщение № 10
Группа: Друзья
Ранг: Ветеран
Сообщений: 1068
Репутация: 560 ±
Замечаний: 0% ±

XL 2016
Цитата (карандаш)
1. а без странного набора цифр в фигурных скобках можно обойтись?
2. набор цифр в фигурных скобках может быть любым?

нет, нет
это guid класса DataObject, который частично может работать с буфером

Цитата (карандаш)
3. GetObject порождает объект или использует готовый?
3.1. если порождает, то потом убивает или каждый клик множит кол-во объектов и они пожирают память?

VBA очищает память при выходе из процедуры (как я знаю)
 
Ответить
Сообщение
Цитата (карандаш)
1. а без странного набора цифр в фигурных скобках можно обойтись?
2. набор цифр в фигурных скобках может быть любым?

нет, нет
это guid класса DataObject, который частично может работать с буфером

Цитата (карандаш)
3. GetObject порождает объект или использует готовый?
3.1. если порождает, то потом убивает или каждый клик множит кол-во объектов и они пожирают память?

VBA очищает память при выходе из процедуры (как я знаю)

Автор - Саня
Дата добавления - 03.05.2013 в 17:11
карандаш Дата: Суббота, 04.05.2013, 14:46 | Сообщение № 11
Группа: Проверенные
Ранг: Обитатель
Сообщений: 329
Репутация: 8 ±
Замечаний: 0% ±

2010
Саня, спасибо

согласно пункту 6 Правил Форума отписываюсь

в результате поставленные задачи решены
результат прикрепил (второй файл для тех у кого 2010 - надеюсь, что дубль не нарушает правил)

Возник вопрос дилетанта: возможно ли в exel'e полученный результат преобразовать во "всплывающее окно" или нечто подобное?
К сообщению приложен файл: 2444885.xls (49.5 Kb) · kalendar.xlsm (20.6 Kb)
 
Ответить
СообщениеСаня, спасибо

согласно пункту 6 Правил Форума отписываюсь

в результате поставленные задачи решены
результат прикрепил (второй файл для тех у кого 2010 - надеюсь, что дубль не нарушает правил)

Возник вопрос дилетанта: возможно ли в exel'e полученный результат преобразовать во "всплывающее окно" или нечто подобное?

Автор - карандаш
Дата добавления - 04.05.2013 в 14:46
Саня Дата: Суббота, 04.05.2013, 16:09 | Сообщение № 12
Группа: Друзья
Ранг: Ветеран
Сообщений: 1068
Репутация: 560 ±
Замечаний: 0% ±

XL 2016
Цитата (карандаш)
согласно пункту 6 Правил Форума отписываюсь

молодец!!!

Цитата (карандаш)
возможно ли в exel'e полученный результат преобразовать во "всплывающее окно" или нечто подобное?

что такое полученный результат?
особенно понравилось про преобразование результата в окно biggrin
[vba]
Код
msgbox "результат"   ' так?
[/vba]
 
Ответить
Сообщение
Цитата (карандаш)
согласно пункту 6 Правил Форума отписываюсь

молодец!!!

Цитата (карандаш)
возможно ли в exel'e полученный результат преобразовать во "всплывающее окно" или нечто подобное?

что такое полученный результат?
особенно понравилось про преобразование результата в окно biggrin
[vba]
Код
msgbox "результат"   ' так?
[/vba]

Автор - Саня
Дата добавления - 04.05.2013 в 16:09
ikki Дата: Суббота, 04.05.2013, 19:23 | Сообщение № 13
Группа: Друзья
Ранг: Старожил
Сообщений: 1906
Репутация: 504 ±
Замечаний: 0% ±

Excel 2003, 2010
был результат, а стало окно.
чё непонятного?


помощь по Excel и VBA
ikki@fxmail.ru, icq 592842413, skype alex.ikki
 
Ответить
Сообщениебыл результат, а стало окно.
чё непонятного?

Автор - ikki
Дата добавления - 04.05.2013 в 19:23
RAN Дата: Суббота, 04.05.2013, 20:20 | Сообщение № 14
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Ты, Саня, не прав!
Получили результат. Не глянулся. Ну, и в окно его! biggrin


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеТы, Саня, не прав!
Получили результат. Не глянулся. Ну, и в окно его! biggrin

Автор - RAN
Дата добавления - 04.05.2013 в 20:20
ikki Дата: Суббота, 04.05.2013, 20:38 | Сообщение № 15
Группа: Друзья
Ранг: Старожил
Сообщений: 1906
Репутация: 504 ±
Замечаний: 0% ±

Excel 2003, 2010
мммм... ну тогда автор так бы и сказал?
мол, помогите выкинуть полученный результат в окно.
а тут преобразование требуется.
и чтобы полученное окно всплыло потом ещё.
и не утонуло...

так что - не всё так просто.
мне кажется.


помощь по Excel и VBA
ikki@fxmail.ru, icq 592842413, skype alex.ikki
 
Ответить
Сообщениемммм... ну тогда автор так бы и сказал?
мол, помогите выкинуть полученный результат в окно.
а тут преобразование требуется.
и чтобы полученное окно всплыло потом ещё.
и не утонуло...

так что - не всё так просто.
мне кажется.

Автор - ikki
Дата добавления - 04.05.2013 в 20:38
карандаш Дата: Понедельник, 06.05.2013, 06:50 | Сообщение № 16
Группа: Проверенные
Ранг: Обитатель
Сообщений: 329
Репутация: 8 ±
Замечаний: 0% ±

2010
да ладно вам

имелось в виду следующее
заводишь на листе кнопку и когда кликаешь по ней, то появляется окно с календарем, который получился в результате обсуждения

в нем кликаешь три раза (год, месяц, день) или меньше (если год уже совпадает с нужным) и оно исчезает, оставляя в буфере обмена результат, который вставляешь в нужное место.

а еще лучше кнопку не на листе, а на панели быстрого доступа (где можно располагать свои кнопки от самописных (и обычных) макросов)


Сообщение отредактировал карандаш - Понедельник, 06.05.2013, 06:51
 
Ответить
Сообщениеда ладно вам

имелось в виду следующее
заводишь на листе кнопку и когда кликаешь по ней, то появляется окно с календарем, который получился в результате обсуждения

в нем кликаешь три раза (год, месяц, день) или меньше (если год уже совпадает с нужным) и оно исчезает, оставляя в буфере обмена результат, который вставляешь в нужное место.

а еще лучше кнопку не на листе, а на панели быстрого доступа (где можно располагать свои кнопки от самописных (и обычных) макросов)

Автор - карандаш
Дата добавления - 06.05.2013 в 06:50
Матраскин Дата: Понедельник, 06.05.2013, 10:09 | Сообщение № 17
Группа: Друзья
Ранг: Обитатель
Сообщений: 375
Репутация: 81 ±
Замечаний: 0% ±

20xx
карандаш, да...можно и кнопку, см вложение. Естественно это самый черновой вариант, форма+календарь без всяких плюшек, но их легко подобавлять. кнопка сегодня например...или появление по 2 щелчку вместо кнопки и добавление даты...заказ пиццы на офис и отдых на море

P.s. а лучше кнопку забросить в ленту
К сообщению приложен файл: 0522979.xls (60.0 Kb) · 2077085.png (9.5 Kb)


в интернете опять кто-то не прав

Сообщение отредактировал Матраскин - Понедельник, 06.05.2013, 10:45
 
Ответить
Сообщениекарандаш, да...можно и кнопку, см вложение. Естественно это самый черновой вариант, форма+календарь без всяких плюшек, но их легко подобавлять. кнопка сегодня например...или появление по 2 щелчку вместо кнопки и добавление даты...заказ пиццы на офис и отдых на море

P.s. а лучше кнопку забросить в ленту

Автор - Матраскин
Дата добавления - 06.05.2013 в 10:09
Мир MS Excel » Вопросы и решения » Вопросы по VBA » функция TODAY() в VBA для календаря (устранение ошибки)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!