Создавайте ежемесячные вкладки в Excel с VBA - PullRequest
0 голосов
/ 01 июня 2018

Я пытаюсь написать код в VBA, который будет использовать конкретную дату в ячейке «B1» и создавать новые вкладки в Excel, которые будут датой в «B1» + один месяц.Я новичок в VBA, и по этой причине не знаю, как написать код, я буду признателен за вашу помощь.На данный момент у меня есть следующий код, но он создает только один лист, и для предыдущего месяца, а не для будущего, и я не знаю, как связать его с ячейкой B1 в существующей вкладке.Кроме того, я хотел бы иметь код, который будет создавать ежемесячные отчеты на следующие 5 лет.Вот то, что у меня сейчас есть:

Private Sub MonthlyUpdate2()
    Dim ws As Worksheet
    With ThisWorkbook
        Set ws = .Sheets.Add(After:=.Sheets(.Sheets.Count))
        ws.name = Format(DateAdd("m", -1, Date), "MMM-YY")
    End With
End Sub

Ответы [ 2 ]

0 голосов
/ 01 июня 2018

Попробуйте этот код и настройте var nb_month_to_create, как вы хотите.Я полагаю, что дата b1 находится на вашем 1-м листе, но вы можете изменить имя «sheet1»

Private Sub MonthlyUpdate2()
    Dim datestart As Date
    datestart = ThisWorkbook.Sheets("Sheet1").Range("B1").Value

    Dim nb_month_to_create As Integer
    nb_month_to_create = 5 * 12 '5 years

  For i = 1 To nb_month_to_create
    Dim ws As Worksheet
    With ThisWorkbook
        Set ws = .Sheets.Add(After:=.Sheets(.Sheets.Count))
        ws.Name = Format(DateAdd("m", i, datestart), "MMM-YY")
    End With
    Next i
End Sub
0 голосов
/ 01 июня 2018

Установите переменную на значение даты в B1 перед созданием нового листа, чтобы вы могли использовать его в процессе именования.

Private Sub MonthlyUpdate2()
    Dim ws As Worksheet, dt as long
    With ThisWorkbook
        dt = activesheet.range("B1").value2
        Set ws = .Sheets.Add(After:=.Sheets(.Sheets.Count))
        ws.name = Format(DateAdd("m", 1, dt), "MMM-YY")
    End With
End Sub

Дата - это просто число, представляющее количество дней с момента31-дек-одна тысяча восемьсот девяносто девять.Для этой цели длинное целое число также подходит, как и переменная даты.Также обратите внимание, что -1 стал 1 в DateAdd.

Существует некоторая путаница относительно того, где на самом деле находится ячейка B1, поэтому я использовал ActiveSheet (тот, который вы видите).Это не всегда лучший метод, и предпочтительнее правильно определить родительский лист.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...