Excel, добавляя новые листы каждый день

Поэтому я пытаюсь создать своего рода ежедневный дневник продуктов питания в Excel, и я знаю, что я хочу, чтобы это сделать, я просто борюсь за реализацию упомянутых идей …
Я создал шаблон, который я хочу, чтобы пользователь входил каждый день, но я не хочу, чтобы пользователь каждый день создавал новый рабочий лист, чтобы создать его, я хочу создать макрос, который будет запускаться после того, как Excel был откроется и будет проверять дату заполнения последней записи, а если она меньше текущей даты, создайте новый лист и покажите тот, который будет заполнен!

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

Private Sub Workbook_Open() Dim sh As Worksheet Dim shName As String 'name of the sheet template shName = "Food Diary.xltm" 'Insert sheet template With ThisWorkbook If .Range("A1") < Date Then .Range("A1") = Date Set sh = Sheets.Add(Type:=Application.TemplatesPath & shName, _ after:=.Sheets(.Sheets.Count)) 'Give the sheet a name, today's date in this example On Error Resume Next sh.Name = "Day" & " " & Worksheets.Count If Err.Number > 0 Then MsgBox "Change the name of Sheet : " & sh.Name & " manually" Err.Clear End If On Error GoTo 0 End If End With End Sub 

Надеюсь, вы увидите, чего я пытаюсь достичь с этим.
Если сегодняшняя дата больше, чем последняя дата на листе, создайте новую, названную «День» [количество листов], я не уверен в отношении даты, так как дата вводится в «А1», а дневные проходы будут не обновляется при открытии книги?

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

Проблема в том, что вы назначаете A1 перед добавлением нового листа. Итак, вы пишете на ActiveSheet , а не на листе, который вы хотите создать (который еще не создан!).

Что-то вроде этого, если я правильно понимаю. Должен запросить активный лист Range A1, сравнить с сегодняшней датой и добавить новый лист, скрыть старый лист и т. Д.

 Private Sub Workbook_Open() Dim thisSheet as Sheet Dim sh As Worksheet Dim shName As String 'name of the sheet template shName = "Food Diary.xltm" '#### I like to use variables for worksheets: Set thisSheet = ThisWorkbook.ActiveSheet 'Insert sheet template With thisSheet If .Range("A1") < Date Then Set sh = Sheets.Add(Type:=Application.TemplatesPath & shName, _ after:=.Sheets(.Sheets.Count)) '#### Put today's date in the new sheet: sh.Range("A1") = Date 'Give the sheet a name, today's date in this example On Error Resume Next sh.Name = "Day " & Worksheets.Count If Err.Number > 0 Then MsgBox "Change the name of Sheet : " & sh.Name & " manually" Err.Clear End If On Error GoTo 0 '#### Hide the old sheet .Visible = xlSheetHidden End If End With End Sub 
  • Объект Countifs не найден Ошибка 424
  • Названия листов вкладки Excel против имен таблиц Visual Basic
  • Проверка данных Excel
  • EPPlus - копия листа из шаблона в другой excelpackage не работает (C #)
  • Определение того, когда строка / ячейка вставлена ​​или удалена в Excel VBA
  • Петля для прохождения каждого рабочего листа в рабочей книге
  • Извлекать данные из листа, который меняет имя каждый месяц
  • OleDB и знак доллара
  • используя косвенное .ext как значение, если true при IF-функции
  • C # - Как добавить рабочий лист Excel программно - Office XP / 2003
  • Как вставить изображение из файла на несколько листов с помощью VBA
  • Давайте будем гением компьютера.