Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - VBA

Страница: 1 | 2 |

 

  Вопрос: Как проще отнять от текущей даты 1 день? Добавлено: 23.04.09 12:10  

Автор вопроса:  oleg
Всем добрый день!
Подскажите как проще открыть файл, находящийся в определенном месте, который имеет имя вчерашней даты, то есть отнять от текущей даты 1 день.
 
Sub откр()
Dim strDate As String
strDate = Format(Now(), "dd.mm.yy") & ".xls"
Application.Workbooks.Open "\путь\" & strDate
End Sub

Если пойти дальше, то еще вопрос как можно показать, что если текущий день недели понедельник, то минусовать нужно 3 дня, то есть открывать файл за пятницу.

Спасибо.

Ответить

  Ответы Всего ответов: 17  

Номер ответа: 1
Автор ответа:
 User Unknown



Вечный Юзер!

ICQ: uu@jabber.cz 

Вопросов: 120
Ответов: 3302
 Профиль | | #1 Добавлено: 23.04.09 13:51
Что-то вроде такого наверное:
  1. Yesterday = Now() - 1


http://support.microsoft.com/kb/116281

Ответить

Номер ответа: 2
Автор ответа:
 oleg



Вопросов: 12
Ответов: 23
 Профиль | | #2 Добавлено: 23.04.09 16:25
Спасибо. Результат будет получен и при strDate = Format(Now() - 1, "dd.mm.yy";) & ".xls" без оператора "сегодня", а если к дням недели привязаться?

Ответить

Номер ответа: 3
Автор ответа:
 Jasmin



Вопросов: 23
Ответов: 417
 Профиль | | #3 Добавлено: 23.04.09 19:06
Есть такое выражение
MySum = Excel.WorksheetFunction.Sum(Range("B5:B10";))
, но там как-то с датами не очень. С суммой у меня получалось, а с датой не знаю, как получится.

Ответить

Номер ответа: 4
Автор ответа:
 Jasmin



Вопросов: 23
Ответов: 417
 Профиль | | #4 Добавлено: 23.04.09 19:07
В Excel есть функция определения дня недели WorkDay(Date,2). Можно как-то использовать. :-)

Ответить

Номер ответа: 5
Автор ответа:
 fAndOrIn



Вопросов: 5
Ответов: 344
 Профиль | | #5 Добавлено: 23.04.09 21:24
oleg, попробуй так - всё включено:
  1. Sub mOpen()
  2. Application.Workbooks.Open mPath & Format(DateAdd("d", IIf(Weekday(Date, 2) = 1, -3, -1), Date), "dd.mm.yy") & ".xls"
  3. End Sub

Ответить

Номер ответа: 6
Автор ответа:
 mai



Вопросов: 0
Ответов: 24
 Профиль | | #6 Добавлено: 24.04.09 03:14
Извиняюсь, можно немного сократить.
  1. Workbooks.Open mPath & Date - IIf(Weekday(Date, 2) = 1, 3, 1) & ".xls"

Ответить

Номер ответа: 7
Автор ответа:
 oleg



Вопросов: 12
Ответов: 23
 Профиль | | #7 Добавлено: 24.04.09 09:09
Спасибо. Попробовал, ругается, что не может найти файл с именем. Само имя, которое нужно найти пишет верно, место верно и файл такой есть, а открыавть не хочет. При вычитании от даты находит, а так нет. Че за фигня не пойму.

Ответить

Номер ответа: 8
Автор ответа:
 Jasmin



Вопросов: 23
Ответов: 417
 Профиль | | #8 Добавлено: 24.04.09 09:25
Может нужно явно преобразовать дату в строку, а потом делать слияние строк.
Хотя обычно этого не нужно.

Ответить

Номер ответа: 9
Автор ответа:
 fAndOrIn



Вопросов: 5
Ответов: 344
 Профиль | | #9 Добавлено: 24.04.09 11:46
oleg, пример из поста 5 у меня работает.
В посте 6 укороченный код требует 4-хзначное указание года (у меня по крайней мере),
к тому же есть вероятность глюков при изменении настроек системы или при переносе проги с базами на другой комп,
т.к. Date при выводе использует системные настройки отображения даты (по-моему).

Ответить

Номер ответа: 10
Автор ответа:
 mai



Вопросов: 0
Ответов: 24
 Профиль | | #10 Добавлено: 24.04.09 14:03
oleg, извините. Упустил из вида, что год надо обозначать двумя знаками. Тогда получается не на много короче.
  1. Sub OpenWorkbook()
  2.     mPath = "E:\Proba\"
  3.     Workbooks.Open mPath & Format(Date - IIf(Weekday(Date, 2) = 1, 3, 1), "dd.mm.yy") & ".xls"
  4. End Sub


Работают оба варианта. Вероятность глюков одинакова. Системные настройки отображения даты одинаковы для всех дат.
Может, быть не правильно указываете путь.

Ответить

Номер ответа: 11
Автор ответа:
 fAndOrIn



Вопросов: 5
Ответов: 344
 Профиль | | #11 Добавлено: 24.04.09 14:52
Вероятность глюков одинакова
, сейчас похоже на правду!
А для любителей "посокращать" код нате ещё 3 "копейки" -
  1. mPath & Format(Date - IIf((Date - 2) Mod 7, 1, 3), "dd.mm.yy") & ".xls"

Ответить

Номер ответа: 12
Автор ответа:
 mai



Вопросов: 0
Ответов: 24
 Профиль | | #12 Добавлено: 24.04.09 16:47
fAndOrIn, стоимость Вашего сокращения вычислите сами, читаемость значительно ухудшилась. Основная идея была в том, что можно от даты отнять некоторое количество дней.

Ответить

Номер ответа: 13
Автор ответа:
 oleg



Вопросов: 12
Ответов: 23
 Профиль | | #13 Добавлено: 24.04.09 17:12
Всем большое СПАСИБО! Все работает.

Ответить

Номер ответа: 14
Автор ответа:
 fAndOrIn



Вопросов: 5
Ответов: 344
 Профиль | | #14 Добавлено: 25.04.09 09:44
mai, вовсе не хочу чего-то вычислять сам!(потому и занимаюсь этой х....й)
А что бы
от даты отнять некоторое количество дней
нужно знать, что Date есть целое число, а не какое-то Variant, как пишут все справки.
Причем неизвестно кем сказано, что единица в этом числе - один день (и не понятно, от какого Рождества). А потому буду считать решение из поста 5 оптимальным.

Ответить

Номер ответа: 15
Автор ответа:
 mai



Вопросов: 0
Ответов: 24
 Профиль | | #15 Добавлено: 25.04.09 13:25
fAndOrIn. DateAdd то же чего-то вычисляет, у даты вообще-то тип Date. Пожалуйста, внимательнее читайте справки.
Если Date есть целое число, то почему от одного числа нельзя отнять другое число. Причем здесь Рождество действительно непонятно.
Считать что-то оптимальным или не оптимальным – Ваше право.

Ради интереса запустите в пошаговом режиме процедуру:
  1.  
  2. Sub Test()
  3. Dim дата1 As Date
  4. Dim дата2 As Date
  5.     дата1 = 1
  6.     дата2 = дата1 + 1.5
  7.     дата3 = дата2 + 1000
  8. End Sub


В окне Locals посмотрите что происходит.

Ответить

Страница: 1 | 2 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам