Страницы: 1
RSS
VBA. Открыть лист по текущей дате
 
Всем добрый день!Очень прошу вашей помощи в написании кода. Есть книга Эксель, с листами, которые называются, соответственно названиям месяцев: ЯНВ, ФЕВ, МАР, АПР и т.д. Нужно, чтобы VBA опрелял текущий месяц и открывал нужный лист, соответствующий этому месяцу.
Заранее спасибо за помощь!
 
Цитата
Есть книга Эксель, с листами
А у нас их нет
 
Как вариант
Код
dim dt as string
dt = format(Now(), "mmm")

dt = switch( dt = "Январь", "ЯНВ", dt = "Февраль", "ФЕВ" и т.п. и т.д.)
 
Lex4990,
А, если, какого-то листа не будет в книге?
 
Автор просил открывать лист по дате, а не проверять есть ли он.
Но пусть я и не делал этого, в теории можно перебирать коллекцию листов циклом и проверять есть ли лист с искомым названием.  
 
Lex4990, спасибо большое, что откликнулись! Но, к сожалению, макрос не сработал.
Возможно я не достаточно четко указала, что именно я хочу получить на выходе. Из рабочего файла я запускаю макрос на открытие другой книги с данными, где и находятся листы, именованные как месяцы: ЯНВ, ФЕВ, МАР, ... НОЯ, ДЕК.  Нужно, чтобы эта книга открылась именно на актуальном листе. То есть, сейсас август, значит она должна открыть лист АВГ. А дальше уже идет следующи цикл операций по копированию информации с этого листа.
Вот начало кода, который мне удалось написать:
Код
Sub OpenF()
Dim a As String 'путь к родительской папке
Dim b As String 'путь к папке, где находится файл
Dim c As String 'имя файла, который нужно открыть

a = Sheets("Адрес").Range("B1") 'указываем значение переменной а, которое является путем к родительской папке
b = Sheets("Адрес").Range("B2") 'указываем значение переменной b, которое является путем к папке, где находится файл
c = Sheets("Адрес").Range("B3") 'указываем значение переменной c, которое является названием файла

Application.Workbooks.Open a & b & c 'открываем файл

End Sub
Изменено: Gina - 18.08.2017 15:39:53
 
Код
Sub OpenF()
Dim a As String 'путь к родительской папке
Dim b As String 'путь к папке, где находится файл
Dim c As String 'имя файла, который нужно открыть
Dim dt as string
 
a = Sheets("Адрес").Range("B1") 'указываем значение переменной а, которое является путем к родительской папке
b = Sheets("Адрес").Range("B2") 'указываем значение переменной b, которое является путем к папке, где находится файл
c = Sheets("Адрес").Range("B3") 'указываем значение переменной c, которое является названием файла

dt = format(Now(), "mmm")
dt = switch( dt = "Январь", "ЯНВ", dt = "Февраль", "ФЕВ" и т.п. и т.д.)
 
Application.Workbooks.Open a & b & c 'открываем файл
Sheets(dt).Activate
 
End Sub
Изменено: Lex4990 - 18.08.2017 15:44:11
 
Lex4990, к сожалению, выдается ошибка "Run time error '94': Invalid use of Null" на этапе после выполнения этой строки:
Код
dt = switch( dt = "Январь.....
и перед выполнением следующей:
Код
Application.Workbooks.Open a & b &
 
Здравствуйте! У меня похожая ситуация, Листы в книге названы по месяцам, можно ли сделать так что бы при открытии книги открывался лист с актуальным месяцем!?  
 
И ни одного файла-примера....
Код
Private Sub Workbook_Open()
On Error Resume Next
Sheets(Left(MonthName(Month(Now)), 3)).Activate
End Sub
 
Если листы  отсортированы по месяцам то можно так
Код
dt = Format(Now(), "m")
dt = dt * 1
Worksheets(dt).Select
Изменено: skiv17 - 19.04.2018 19:05:16
 
Цитата
Алексей Афанфсьев написал:
актуальным месяцем!?
Просто любопытство заело, а не актуальный это как?
По вопросам из тем форума, личку не читаю.
 
Цитата
БМВ написал:
а не актуальный это как?
Лист другого месяца.
 
Цитата
skiv17 написал:
Если листы  отсортированы
А что значит отсортированы? Вы имеете ввиду название листов?
 
Алексей Афанфсьев, Я чуть глумлюсь, но точность формулировки порой сильно влияет на результат. Другой месяц по отношению к чему? Если к текущему, то и надо называть не актуальный, а текущим. Actual конечно имеет синоним Current, но всеж тяготеет к Real.  
По вопросам из тем форума, личку не читаю.
 
Вот файл в котором бы хотелось реализовать данную функцию! Если можно подробно объясните дилетанту как это сделать :oops:  
Изменено: Алексей Афанфсьев - 20.04.2018 10:44:57
 
Цитата
БМВ написал:
Если к текущему, то и надо называть не актуальный, а текущим
Согласен:), неправильно выразился)))
 
Алексей Афанфсьев,
 
Если не трудно объясните как это сделано, потому что мне это нужно реализовать в боевом графике!
 
Уважаемый Алексей Афанфсьев,

Anchoret, написал корректное и простое решение:

Чем оно Вам не подходит?
Вся проблема сложных программ, целых томов кодов и состоит в несоблюдении принципа лезвия Оккама: «Не следует множить сущее без необходимости». Вся гениальность в простоте.
 
Цитата
ProFessor написал:
Чем оно Вам не подходит?
Я не понимаю как это сделать, куда и как записать скрипт!
Изменено: Алексей Афанфсьев - 20.04.2018 12:20:09
 
Код
Private Sub Workbook_Open()
   thisworkbook.Sheets(MonthName(Month(Now))).Activate
End Sub


1) Нажмите alt+11
2) Скопируйте это в "ЭтаКнига"
3) Нажмите ctrl + s

P.S. Решение - Anchoret,  я всего лишь доработал
Вся проблема сложных программ, целых томов кодов и состоит в несоблюдении принципа лезвия Оккама: «Не следует множить сущее без необходимости». Вся гениальность в простоте.
 
Цитата
ProFessor написал:
2) Скопируйте это в "ЭтаКнига"
Открылось просто серое окно, не понял куда нужно скопировать?
 
См. скриншот
Двойной клик на "Эта книга"
И вставьте туда
Вся проблема сложных программ, целых томов кодов и состоит в несоблюдении принципа лезвия Оккама: «Не следует множить сущее без необходимости». Вся гениальность в простоте.
 
Цитата
ProFessor написал:
Двойной клик на "Эта книга" И вставьте туда
Я что то делаю не так? Или разные версии?
 
Вызов окна проектов
Ctrl+R
 
Ctrl+R
По вопросам из тем форума, личку не читаю.
 
Спасибо всем огромное, все получилось, все заработало!  :)  
Страницы: 1
Читают тему
Наверх