Remkomplekty.ru

IT Новости из мира ПК
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Vba excel дата

Урок 15 по VBA — функции работы с датой и временем

И так, в этой по своей природе унылой публикации я кратко рассмотрю vba функции даты и времени, которые позволяют получить или установить параметры даты и времени, задать таймер выполнения заданного блока кода или сценария в целом. Также в конце статьи будет затронута функция vba языка format. Которая отвечает за форматирование данных.

Функции VBA даты и времени

Date () – позволяет получить значение текущей даты, установленной в системе.

Time () – вернет установленное в системе время

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

DateAdd (интервал, число, дата) – позволяет прибавить к заданной дате (параметр “дата”) указанное количество лет, кварталов, месяцев или секунд. На выходе мы получим следующее значение: дата + (число * интервал).

DateDiff (интервал, дата, дата2) – позволяет получить разницу между заданными датами, например. В годах, месяцах и так далее, разница определяется параметром “интервал”.

DatePart (интервал, дата) – позволяет получить заданную часть даты, например, только значение года, месяца или дня недели. Результат возврата регулируется параметром “интервал”.

DateSerial (год, месяц, день) – данная функция vba принимает три числовые значения, по которым возвращается дата.

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

Day (дата) – позволяет получить значение текущего дня (если отсутствует параметр “дата”) или для заданной даты.

Year (дата) – позволяет получить значение текущего года (если отсутствует параметр “дата”) или для заданной даты.

Month (дата) – позволяет получить значение текущего месяца (если отсутствует параметр “дата”) или для заданной даты.

Weekday (дата) – позволяет получить значение текущей недели (если отсутствует параметр “дата”) или для заданной даты.

Hour (время) – позволяет получить текущее значение часов (если отсутствует параметр “время”) или для заданного времени, vba дата и время.

Minute (время) – позволяет получить текущее значение минут (если отсутствует параметр “время”) или для заданного времени.

Second (время) – позволяет получить текущее значение секунд (если отсутствует параметр “время”) или для заданного времени.

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

TimeSerial (часы, минуты, секунды) – позволяет получить время, заданное тремя параметрами

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

MonthName (числовое значение) – VBA функция позволяет получить название месяца, в качестве параметра указываем номер месяца.

WeekDay (дата) — задает возвращает имя месяца словами по его номеру. Возвращаемое значение зависит от региональных настроек. Если они русские, то вернется русское название месяца.

Помимо указанных выше vba функций даты и времени, можно использовать и такие вариации:

Date (дата) – позволяет задать системную дату

Time (время) – позволяет задать системное время.

В приведенных выше функциях даты и времени vba языка используется параметр “интервал”, который может принимать следующие значения:

VBA функции форматирование данных

Для форматирования данных в языке VBA используется функция Format , которая позволяет сформировать данные любого встроенного типа, используя заданный образец. Общий синтаксис функции format:

Format (Выражение, [“формат”, [первый день недели, [первая неделя года]]]) – тут параметр “выражение” является любым допустимым значением. Формат – необязательный параметр, который задает формат данных, должен заключаться в кавычки. Остальные два параметра также являются необязательными, и задают день недели, который нужно считать первым, и первую неделю года.

Параметр формат может принимать следующие значения:

  • General Number – числовое значение без выделения разрядов тысяч, например, 12150,2003
  • Currency – денежный формат, выделяются тысячные разряды и два знака после запятой, например, 255,33р.
  • Fixed – числовое значение без выделения разрядов тысяч и двумя знаками после запятой, например, 22439,12.
  • Standart – числовое значение, которое умножается на 100, при этом, остаются два знака после запятой и символ процента, например, 55,63%.
  • Scientific – числовой формат для научных вычисление, например, 5,23Е+03
  • Yes/No – данный параметр определяет, что функция вернет “Да” если форматированное выражение содержит строку Нет, или ненулевое значение и “Нет” в противном случае.
  • True/False – аналог предыдущего параметра, но для строк “Истина” и “Ложь”.
  • On/Off – для строк вида “Вкл” и “Выкл”.
  • General Date – форматирование выражения в соответствии с установленными в системе стандартами даты и времени, например, 10.11.02 12:25:50
  • Long Date – вывод полного формата даты, в зависимости от установок в системе, например, 10 октября 2013 г, vba функции даты.
  • Medium Date – средний формат дат, например, 10-Окт-13.
  • Short Date – короткий вывод формата даты, например, 10.10.13.
  • Long Time – вывод в формате времени (часы, минуты, секунды), например, 12:20:40.
  • Medium Time – 12 часовой формат времени (часы, минуты), например, 05:30.
  • Short Time — 24 часовой формат времени (часы, минуты), например, 17:30.

Спасибо за внимание. Автор блога Владимир Баталий

Работа с датой

Привет Эт снова я.. по сути программа написанна, но в ней один косяк.

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

Вот текст программы

Работа с датой на VBA
Здравствуйте! Есть книга, состоящая из 12 листов (названия месяцев). Содержание каждого листа.

VBA в Excel: работа с датой
Вот несколько вопросов начинающего: — есть ли в VBA (используется в Excel от MSOffice 2000).

Работа с датой. Как записать только квартал и год?
Вопрос такой: В таблице сохраняю дату Формат поля — Краткий формат даты Маска ввода -.

Операции с датой
программа спрашевает имя и дату раждения. после того как мы это вывели программа показывает сколько.

Понимаю, что коряво, но красоту лень наводить

тож самое.. сам попробуй.. введи в дату рождения 1.125 или подобное.

Добавлено через 3 минуты

Понимаю, что коряво, но красоту лень наводить

Да согласен. Я так подумал и решил, что нафига делать так, если можно создать форму, а в ней три комбобокса, в которых можно загрузить только то что нужно и не надо будет заморачиваться на счёт всяких там условий по поводу ввода некоректных данных. Пользователь сможет выбрать только то, что есть на самом деле!

Читать еще:  Как очистить историю видео в одноклассниках

Добавлено через 15 минут
Да, как на счёт такого кода?

Добавлено через 15 минут
Да, как на счёт такого кода?

не вариант..))) не работает.

Добавлено через 2 минуты
Пользователю конечно можно написать, но кто сказал, что он будет соблюдать это «условие»?

И потом, как сказал Toxa33rus, сверяйте попадает ли она в диапазон ((сейчас — 100 лет) < userDay < (сейчас - 3 года). Всего три вложенных условия!

P.S. ИМХО, можно цифру 100 увеличить, чтоб не выглядеть совсем пессимистом.

не вариант..))) не работает.

Добавлено через 2 минуты
Пользователю конечно можно написать, но кто сказал, что он будет соблюдать это «условие»?

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Счетчик с датой
Добрый день! Веду таблицу в Excel и решил автоматизировать процесс внесения данных в таблицу. Но.

Формула с датой
Дорогие форумяне! помогите с формулой нужно высчитывать разницу между текущим днем и прошлым .

Колонтитул с динамической датой
Задача: колонтитул в правом верхнем углу рабочего листа имеет заголовок "Неделя от: ". после.

Добавление столбца с датой в цикле
Всем доброго времени суток! Я, как обычно, нуждаюсь в вашей помощи..потому что спустя сутки я не.

Excel vba работа с датами

Работа с датой

​Смотрите также​​ «01 Янв 2007″​PureBasic if mS​ смотрится​: Private Sub CommandButton1_Click()​Оксана33​
​ указанной ячейке введён​ A1=»21.01.2012″, как прибавить​ флаг типа Boolean,​Функция​
​1​
​ExpressionОбязательный аргумент -​ системную дату. Формат​ Dim date1 As​ не получится ввести​больше похоже на​ не стандартна. Вдруг​cooler_92​ это совсем другое​ = «Jan» then​кстати можно еще​ Dim x As​: я не пойму. ​ не прошлый день,​ к нему календарный​ указывающий на вид​Now​Воскресенье (по умолчанию)​ выражение типа Variant,​ даты, возвращаемый функцией,​ Date Dim date2​ дату в неправильном​ правду.. только я​ это пользователь забыл​: Привет Эт снова​ дело.​ mI=1 if mS​ так​ String x =​ cdbl для того,​ то ввести формулу,​ месяц(2,3,4,5. ) по средствам​ возвращаемого дня недели.​позволяет быстро узнать​vbMonday​ содержащее выражение даты​ определяется национальными системными​ As String Dim​ формате.​ что то не​ точку поставить, а​ я.. по сути​MsgBox CDate(«01 Jan​ = «Feb» then​Dim x As​ MonthName(Month(Date), False) If​ чтобы преобразовать в​ возвращающую их разницу,​ VBA и сравнить​ По умолчанию установлен​ текущую дату и​2​ или строковое выражение,​ установками​ date3 As String​analyst​ сообразил, где какое​ программа такая плохая​ программа написанна, но​ 2007″) MsgBox CDate(«01​ mI=2. ​ String x=Choose(Month(Date),»Января»,»Февраля»,»Марта». «Декабря») msgbox​ (Right(x, 1) =​ число? я думала,​ можно, например, так​ с сегодняшним числом?​ в False, что​ время по системному​Понедельник​

​ распознаваемое как значение​​Параметры​ Dim date4 As​
​: Эта запись вообще​ сообщение должно вываливаться..​ посчитала ему, и​ в ней один​ Янв 2007″)Кроме того,​pashulka​ x​ «ь») Or (Right(x,​ что он для​ :​Формулами это сделать​

​ означает вывод полного​​ календарю и часам​vbTuesday​ даты или времени​
​Функция не имеет аргументов​ Date date3 =​ касалась кода, который​ напиши плз​ вывела результат почти​ косяк.​ если внимательно прочитать​:​MU-GK​ 1) = «й»)​ другого служит​ActiveCell = «=TODAY()-«​ вообще не проблема,​ дня недели FirstDayOfWeekНеобязательный​ компьютера. Чтобы получить​3​Пример​Пример​ InputBox(«Введите дату рождения:»)​ написан до неё.​analyst​ 700000 тысяч дней..​Надо написать программу,​ моё сообщение, то​MU-GK​: Смотрится. Mid в​ Then Mid(x, Len(x))​тогда почему не​

​ & CDbl(Cells(2, 1))или​​ но по ячейкам​ аргумент — числовая​ только системную дату​Вторник​
​’ Используем функцию IsDate​’ Выводим текущую системную​ If date3 =​ Читайте внимательнее!​: Да согласен. Я​ Ну эт размышления​

​ определяющую сколько дней​​ там говорится, что​, Все три вышеперечисленные​ данном случае не​ = «я» Else​ CLng или CSng,​ActiveCell = «=TODAY()-«​ бить лишнюю инфу​ константа, указывающая, какой​ без времени, используйте​vbWednesday​ ‘ для проверки,​ дату в заголовке​ Format(date3, «dd.mm.yyyy») Then​А на счёт​ так подумал и​ моего препода. Короч,​ прошло со дня​ англ.месяц можно заменить​
​ функции, локально-зависимые. поэтому​ функция, а оператор.​
​ Mid(x, Len(x)+1) =​ что для меня​ & Cells(2, 1).Value2​ не хочется вообще.​ день недели считать​ функцию Date​4​ является ли год​

​ формы Dim Today​​ ‘Стандартная ф-я, которая​ календаря согласен.​ решил, что нафига​ помогите с этим​ вашего рождения.​ на русск.аналог​ у нас, названия​

​pashulka​​ «а» End If​
​ более логично бы​Оксана33​
​Спасибо.​ первым: vbUseSystem=0Используется системная​Примечание: Не забывайте,​
​Среда​ высокосным ‘ Для​ Today=​ выводит диалоговое окно​cooler_92​ делать так, если​ разобраться.. Знаю, что​Вот текст программы​или его номер​ месяцев должны указываться​
​: о как​ ActiveCell = x​ звучало или даже​:​Юрий М​ информация vbFirstJan1=1Неделя, содержащая​ что пользователь может​vbThursday​

​ этого проверяем, существует​​Date​ с сообщением и​: Про форму я​ можно создать форму,​
​ нужно ф-ей Format​Option Explicit Sub​

​Да это понятно, что​​ как Январь/Января или​ни разу не​ End Sub​ CInt, но только​pashulka​

​: Sub PlusOneMonth()​​ 1 января vbFirstFourDays=2Первая​ самостоятельно устанавливать системное​

​5​​ ли 29 февраля​’ узнаем текущую​
​ полем ввода If​ в курсе, но​ а в ней​ пользоваться, но не​ date_rozhd() ‘Программа, считающая​

​ на территории РФ​​ Янв/Янва и т.п.​ встречал​snipe​ с ним какая​, объясни пожалуйста почему​Dim x​ неделя, содержащая как​

​ время и дату​​Четверг​
​ Dim MyYear is​ системную дату ‘​ date3 = «»​ работать можно только​ три комбобокса, в​
​ знаю как..​ кол-во дней, прошедших​ действительны только Январь/Февраль,​​По поводу утилиты​​пойду ликбезом заниматься​: Благодарю, вы мне​ то засада -​ CDbl — он​x = «21.01.2012»​ минимум 4 дня​ на своем компьютере,​
​vbFriday​ String If​ Преобразуем в строку​ Then MsgBox «Дата​

​ в модуле, без​​ которых можно загрузить​analyst​
​ со дня рождения,​ а не Jan/Feb.​ — в Вашем​спасибо за наводку​ очень помогли!​ в экселе преобразовует,​ конвертирует его в​MsgBox DateSerial(Year(x), Month(x)​ нового года vbFirstFullWeek=3Первая​ поэтому эти значения​6​IsDate​ и выводим в​ рождения не введена!»​ использования визуальных компонентов.​ только то что​: Как на счёт​ до сегодняшней даты​Именно это я​ посте нет информации,​MU-GK​snipe​ а вот в​ число, которое Эксель​ + 1, Day(x))​ полная неделя года​ могут не иметь​Пятница​(«02/29/» & myYear) Then​ заголовке формы Form1.Caption​ Else date1 =​analyst​ нужно и не​ такого варианта?​ Dim date1 As​ и имел в​ куда выдаётся такая​: Индуцировано:​: Dim x As​ vba — нет​ интерпретирует как дату?​End Sub​Пример​ ничего общего с​vbSaturday​ MsgBox myYear &​ = CStr(Today)​ Date ‘ф-я определения​: Я же написал​ надо будет заморачиваться​Option Explicit Sub​

Читать еще:  Функция линейн в excel пример

​ Date Dim date2​​ виду, что невозможно​ информация. если это​Есть функция​ String x =​

Функция Date

​Казанский​​’ Выводим сокращенное название​​ реальной датой и​7​ «- высокосный год»​

​ сегодняшней даты If​​ вариант без формы.​ на счёт всяких​​ date_rozhd() Dim a​​ As String Dim​ напрямую прочитать «01​ ячейки рабочего листа​Monthname​ MonthName(Month(Date), False) if​: В Excel нет​

​ седьмого месяца Form1.Caption​ ​ временем!​Суббота​ Else MsgBox myYear​Now​​ IsDate(date3) = False​​cooler_92​ там условий по​ As String Dim​ date3 As String​ Jan 2012″.​ (Excel), то можно​ ​, возвращающая имя месяца​
​ Month(Date)=3 or Month(Date)=8​
​ стандартной функции рабочего​
​ это всего лишь​Второй аргумент -​

Функция IsDate

​Возвращаемое значение​​Возвращаемые значения​​ & «- невысокосный​Категория​ Then ‘ф-я проверки​: не вариант..))) не​ поводу ввода некоректных​ date1 As Date​ Dim date4 As​Поскольку прочитать надо,​ просто заменить англ.​ по номеру, а​ Then x=x &​ листа CInt, а​ количество(читайте число) дней,​ число м-цев.​

​Возвращает значение типа Variant(Date),​Ниже перечислены значения, возвращаемые​ год» End If​Функции дат и​ корректности ввода двты​​ работает. ​​ данных. Пользователь сможет​​ Dim date2 As​​ Date date3 =​ то здесь два​ месяц на наш​ вот функции, возвращающей​ «а» Else Left(x,​ есть Int(Целое)​​ прошедших с 1​​ivan-msk77​(7, True)​ содержащее текущую дату​ функцией​Категория​ времени​ MsgBox «Дата введена​Пользователю конечно можно​

​ выбрать только то,​​ String Dim date3​ InputBox(«Введите дату рождения:»)​ выхода:​ отечественный или его​ ноимер месяца по​ len(x)-1) & «я»​​А что касается​

​ января 1900 года​: пошел пробовать, благодарю​Смотри также​ и время​Weekday​Функции дат и​IsDate(Expression)​ некорректно.» & Chr(13)​​ написать, но кто​​ что есть на​ As String Dim​ ‘Стандартная ф-я, которая​1. Менять сразу​ номер. а для​ имени кажется нет.​

​ msgbox x​
​ VB(A), то функция​ (или 2 января​

Функция Weekday

​ & «Формат даты​ сказал, что он​ самом деле!​ date4 As Date​

​ выводит диалоговое окно​
​ к числовому формату,​ этого можно использовать,​

Форматы даты VBA Excel

у меня есть таблица, которая содержит количество времени. Они обычно появляются в любом mm/dd/yyyy или mm/dd/yyyy hh:mm .

проблема в том, что времени не всегда правильно и я хочу иметь чеки, чтобы убедиться, что они нужные в коде.

моей первоначальной мыслью было использовать IsDate чтобы проверить или CDate но это, похоже, не сработало: он все еще возвращал строки вместо дат.

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

  1. в ячейке A1 я ввожу формулу =DATE(2013,10,28)
  2. Формула ячейки B1 =A1*1 который должен равняться числу (41575)

при запуске скрипта ячейка имеет тип date и IsDate возвращает true. После запуска через Format он имеет тип string, но IsDate по-прежнему возвращает true. CDate также преобразует ячейку в строку. Ячейка B1 также теперь вернет 0 (так как ее строка*1).

Итак, я думаю, чтобы подвести итог вопросам:

  1. почему Format и CDate изменение моих ячеек на строки?
  2. как я могу гарантировать, что ячейка возвращает значение даты, а не только строку, которая выглядит как свидание?

4 ответов

важно различать контент клеток, их формат отображения, the тип данных read из ячеек VBA и тип данных написано в ячейки из VBA и как Excel автоматически интерпретирует это. (См., например,этот предыдущий ответ.) Связь между ними может быть немного сложной, потому что Excel будет делать такие вещи, как интерпретировать значения одного типа (например, string) как определенные другие данные введите (например, дату), а затем автоматически измените формат отображения исходя из этого. Ваша самая безопасная ставка делает все явно и не полагаться на этот автоматический материал.

Я провел ваш эксперимент, и я не получаю те же результаты, что и вы. Моя ячейка A1 остается датой все время, А B1 остается 41575. Поэтому я не могу ответить на ваш вопрос #1. Результаты, вероятно, зависят от того, как ваша версия/настройки Excel автоматически определяет / изменяет формат номера ячейки на основе его содержание.

Вопрос №2, «Как я могу гарантировать, что ячейка вернет значение даты»: ну, не уверен, что вы подразумеваете под» возвращением » значения даты, но если вы хотите, чтобы содержат числовое значение отображается в качестве даты, основываясь на том, что вы пишете ему из VBA, вы можете либо:

напишите в ячейку строковое значение, которое, как вы надеетесь, Excel автоматически интерпретирует как дату и формат как таковой. Скрестите пальцы. Очевидно это не очень надежно. Или,

напишите числовое значение в ячейку из VBA (очевидно, тип даты-это предполагаемый тип, но целочисленный, длинный, одиночный или двойной может сделать то же самое) и явно установите числовой формат ячеек в нужный формат даты, используя .NumberFormat свойства (или вручную в Excel). Это гораздо надежнее.

Если вы хотите проверить, что содержимое ячейки может отображаться как даты, то вот функция, которая поможет:

Format преобразует значения в строках. IsDate по-прежнему возвращает true, потому что он может разобрать эту строку и получить действительную дату.

если вы не хотите изменять ячейки на строку, не используйте Format . (IOW, не преобразуйте их в строки в первую очередь.) Используйте Cell.NumberFormat , и установите его в формат даты, который вы хотите отобразить.

Спасибо за вход. Я, очевидно, вижу некоторые проблемы, которые не реплицируются на других машинах. Основываясь на ответе Джин, я придумал менее элегантное решение, которое, похоже, работает.

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

использовать value(cellref) сбоку, чтобы оценить ячейки. Строки будут вызывать ошибку «#Value» , но даты разрешаются числом (например, 43173 ).

VBA-Excel: Date-Time Functions – DateAdd()

by SJ · Published December 13, 2013 · Updated January 30, 2015

The DateAdd () function adds the specified time interval to the date and returns a Variant (Date)

DateAdd(interval,number,date)

    • interval
      • Manda­tory
      • Type: String expression
      • The time interval you want to add
  • number
    • Manda­tory
    • Type: Numeric
    • The number of intervals you want to add
  • date
    • Manda­tory
    • Type : Date
    • Date in which the interval will be added

Example:

Share this:

Like this:

You may also like.

VBA-Excel: Date-Time Functions – IsDate()

December 8, 2013

by SJ · Published December 8, 2013 · Last modified January 30, 2015

VBA-Excel: Date-Time Functions – Timer()

by SJ · Published June 30, 2014 · Last modified January 30, 2015

VBA-Excel: Date-Time Functions – WeekDay() and WeekDayName()

by SJ · Published June 19, 2014 · Last modified January 30, 2015

10 Responses

Using Excel 2013, I have not been able to get the Weekday interval (“W”) to work as advertised. It does not appear to behave any differently than Day (“D”).

Have you experienced different results?

Cud you please provide me the code you hv written? i will check it out.
does you code works for DatePart() function?
http://excel-macro.tutorialhorizon.com/vba-excel-date-time-functions-datepart/

I used a slightly modified version of your code:
Function FnDateAdd()

strDate = CDate(“January 8, 2014”)

strNewDate = DateAdd(“w”, -5, strDate)

I expected to see a result of “1/1/2013”, which is 5 weekdays (work days) before today. But I got “1/3/2013” as a result.

My end goal is to set several different variables as different date values, relative to the current date. The challenge I’m facing is accounting for weekends and holidays. There doesn’t seem to be an easy way to do this. I can send you all of my code, if you like.

Yes, i checked both “W” and “D” are working in same manner.
but still we can do something about the objective you want to achieve..

Here is my understanding abt ur problem
– from the current date, you want to do a task on each day, till the specified period (excluding weekends) ..
i just came up with the small piece of code for this…

Dim strDate
Dim mainWorkBook As Workbook
Dim intCounter

intCounter = 1
Set mainWorkBook = ActiveWorkbook

For i = Date To DateAdd(“m”, 1, Date) ‘ your specific period
strDay = Format(i, “dddd”)
If strDay “Saturday” And strDay “Sunday” Then
mainWorkBook.Sheets(“Sheet1”).Range(“A” & intCounter) = i
mainWorkBook.Sheets(“Sheet1”).Range(“B” & intCounter) = strDay
intCounter = intCounter + 1
End If
Next

Result :
08-01-2014 Wednesday
09-01-2014 Thursday
10-01-2014 Friday
13-01-2014 Monday
14-01-2014 Tuesday
15-01-2014 Wednesday
16-01-2014 Thursday
17-01-2014 Friday
20-01-2014 Monday
21-01-2014 Tuesday
22-01-2014 Wednesday
23-01-2014 Thursday
24-01-2014 Friday
27-01-2014 Monday
28-01-2014 Tuesday
and so on.

I am not saying this a best solution but still can be used as a work around.
Please correct me if my understanding is correct

Each day I’m trying to copy data from an existing spreadsheet (2014-Jan-06_Outages.xlsx) into a new version of the existing spreadsheet (2014-Jan-07_Outages.xlsx). There are several tabs within the spreadsheet – I copy the most recent, delete the prior day’s tab (2014-Jan-03), and create a new tab with all of the formulas I need to process today’s work (today is really yesterday, as we’re reconciling data posted yesterday).

Here’s what I’ve been trying:
Version 1 (does not account for weekends):
Dim CurrDate, LastDate, PrevDate, PriorDate
Dim FilePath, ExtractFile As String
CurrDate = Format(Date, “dd-mmm-yyyy”)
LastDate = Format(DateAdd(“w”, -1, CurrDate), “yyyy-mmm-dd”)
PrevDate = Format(DateAdd(“w”, -2, CurrDate), “yyyy-mmm-dd”)
PriorDate = Format(DateAdd(“w”, -3, CurrDate), “yyyy-mmm-dd”)
FilePath = “Q:TransferJuneVBA”
ExtractFile = “unrecon.csv”

‘ Open spreadsheet
Workbooks.Open Filename:=FilePath & PrevDate & “_Outages.xlsx”
‘ Save as new file name
Application.DisplayAlerts = False
ActiveWorkbook.SaveAs Filename:=FilePath & LastDate & “_Outages.xlsx”
Application.DisplayAlerts = True

Version 2 (accounts for weekends, but won’t open the spreadsheet – I get the following error message: “Sorry, we couldn’t find ‘Q:TransferJuneVBA2014-01-06_Outages.xlsx”. Is it possible it was moved, renamed or deleted?” – even though the file does exist, and version 1 can successfully open the file):
Dim CurrDate, LastDate, PrevDate, PriorDate As String
Dim FilePath As String

Application.DisplayAlerts = False
Sheets(“Dates”).Delete
Application.DisplayAlerts = True
Sheets.Add After:=Worksheets(“sheet1”)
Sheets(“Sheet2”).Name = “Dates”
Range(“A3”) = “TODAY”
Range(“B3”).FormulaR1C1 = “=today()”
Range(“A4”) = “
Range(“B4”).FormulaR1C1 = “=workday(R[-1]C,-1,R9C2:R17C2)”
Range(“A5”) = “
Range(“B5”).FormulaR1C1 = “=workday(R[-2]C,-2,R9C2:R17C2)”
Range(“A6”) = “-1”
Range(“B6”).FormulaR1C1 = “=workday(R[-3]C,-3,R9C2:R17C2)”
Range(“A8”) = “Holidays”
Range(“A9”) = “New Years Day”
Range(“B9”) = “1/1/2014”
Range(“A10”) = “MLK Day”
Range(“B10”) = “1/20/2014”
Range(“A11”) = “Washington’s Birthday”
Range(“B11”) = “2/17/2014”
Range(“A12”) = “Good Friday”
Range(“B12”) = “4/18/2014”
Range(“A13”) = “Memorial Day”
Range(“B13”) = “5/26/2014”
Range(“A14”) = “Independence Day”
Range(“B14”) = “7/4/2014”
Range(“A15”) = “Labor Day”
Range(“B15”) = “9/1/2014”
Range(“A16”) = “Thanksgiving Day”
Range(“B16”) = “11/27/2014”
Range(“A17”) = “Christmas”
Range(“B17”) = “12/25/2014”
Columns(“A:A”).Font.Bold = True
Columns(“B:B”).NumberFormat = “yyyy-mmm-dd”

‘Identify source for dates
Sheets(“Dates”).Select
CurrDate = Format(Range(“B3”), “yyyy-mmm-dd”)
LastDate = Format(Range(“B4”), “yyyy-mm-dd”)
PrevDate = Format(Range(“B5”), “yyyy-mm-dd”)
PriorDate = Format(Range(“B6”), “yyyy-mm-dd”)
FilePath = “Q:TransferJuneVBA”
ExtractFile = “unrecon.csv”

‘ Open spreadsheet
Workbooks.Open Filename:=FilePath & PrevDate & “_Outages.xlsx”
‘ Save as new file name
Application.DisplayAlerts = False
ActiveWorkbook.SaveAs Filename:=FilePath & LastDate & “_Outages.xlsx”
Application.DisplayAlerts = True

My goodness. A conference call with some colleagues helped me identify my error.

My date format was not consistent in the last section:

Cur­rDate = Format(Range(“B3”), “yyyy-mmm-dd”)
Last­Date = Format(Range(“B4”), “yyyy-mm-dd”) sumitjain says:

Glad you found out, i was breaking my head into it, even i missed it.

my requirement is:

i need to extract todays’ date and add 3 days to it and post it to a VBA form in below format:

Todays date: 2014-03-28
Output: 2014-03-31

Its critical to note that , say if todays date was 30th. then if you add three days it rolls over to next month. how do we handle this?

Dateadd() Function will handle itself. Use Now () function to get the today’s date and time. Change it ur format u need. Then add 3 days. Clear?

how do i use a variable in the number part of the function?

Ссылка на основную публикацию
Adblock
detector