Обратный порядок дней, автоматически заполняемый макросом, который создает новый лист с именем 06/01, 06/02 и т. Д. - PullRequest
1 голос
/ 31 мая 2019

Я пытаюсь настроить макрос, который при запуске автоматически создает новые листы с именами дат в хронологическом порядке.Пример: 06/01, 06/02 и заполните ячейки данными из листа «Шаблон».Макрос в настоящее время будет создавать эти листы в обратном порядке, например, 06/30, 06 / 29..etc.Как начать с 06/01 ... 06/30 вместо 06/30 ... 06/01 с созданием новых именованных листов?

Я пробовал код, указанный ниже.Наряду с изменением

Sheets("Temp").Range("d5").Value = Sheets("Temp").Range("a5") - X

на

Sheets("Temp").Range("d5").Value = Sheets("Temp").Range("a5") + X

Настройка кода в VB для Temp Sheet:

- Начало -

Sub Dtpopulate()

Dim S As Integer
Dim X As Integer
S = Sheets("Temp").Range("c5").Value

For X = 1 To S

newname = Sheets("Temp").Range("a6").Value

Worksheets("Template").Activate
       Sheets("Template").Cells.Select
    Selection.Copy


Sheets.Add.Name = newname
        Sheets(newname).Cells.Select
    Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, 
Operation:= _
        xlNone, SkipBlanks:=False, Transpose:=False

    Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=False


Sheets("Temp").Range("d5").Value = Sheets("Temp").Range("a5") - X

Next X


End Sub

- Окончание -

Я ожидал, что листы будут созданы и автоматически заполнены данными из «Шаблонов» и каждый лист будет назван06/01 ... 06/30, но на выходе будут листы с именами с 06/30 по 01/01.

Ответы [ 2 ]

2 голосов
/ 01 июня 2019

Если вы пройдете по своему коду, вы заметите, что листы созданы в правильном порядке: они просто не упорядочены по порядку.

Вы захотите, чтобы каждый новый лист былрасположен позади самого последнего созданного.О создании нового листа вы можете прочитать здесь .Бит кода этой ссылки, которая отвечает на ваш вопрос:

Sheets.Add(After:=Worksheets(Worksheets.Count))

0 голосов
/ 10 июня 2019

Я нашел решение для автоматического заполнения каждого листа соответствующими данными на листе шаблонов, а также создания нового листа по порядку для каждого дня месяца (т. Е. 6.1-6.30)

Sub Dtpopulate()

Dim S As Integer
Dim X As Integer
S = Sheets("Temp").Range("c5").Value

For X = 1 To S

newname = Sheets("Temp").Range("a6").Value



 Worksheets("Template").Activate
       Sheets("Template").Cells.Select
    Selection.Copy

Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets.Add(After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count))
ws.Name = newname
        Sheets(newname).Cells.Select
    Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
        xlNone, SkipBlanks:=False, Transpose:=False

    Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=False


Sheets("Temp").Range("d5").Value = Sheets("Temp").Range("a5") + X

Next X



End Sub

Электронная таблица Excel, в которой макрос - один, настроена со следующими ячейками:

-Enter Start Date in cell A5 ex. 6/1
-Enter End Date in B5 ex. 6/30
-Enter the numbers of days in that month in C5 ex. 30
-Type "=A5" in cell D5
-In cell A6 enter "=TEXT(D5,"dd-mmm")"

После ввода всей информации запустите макрос, и у вас будет 28-31 новая рабочая таблица с данными рабочей таблицы шаблона.копируется в каждый новый лист.

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