Как автоматизировать открытие новых листов - PullRequest
0 голосов
/ 25 февраля 2020

У меня проблемы с автоматизацией Excel / VBA. На главном листе с именем «РЕЗЮМЕ» (в настоящий момент во всей книге только один лист) у меня есть несколько столбцов, таких как:

enter image description here

Я хочу рабочую книгу чтобы автоматически создать новый лист, когда в столбце F (ДАТА) будет добавлена ​​новая строка с новой, уникальной датой, и я хочу, чтобы эти новые листы обновлялись со всеми данными, имеющими эту дату (и эти новые листы должны иметь эту дату как имя). До сих пор, к счастью, vcoolio я нашел образец , который создает новые листы на основе столбца , но когда я переделываю код для своих нужд, что-то не так. Создаются новые листы, но в них копируются только заголовки без данных. Это, наверное, какой-то неправильный код с моей стороны.

Кроме того, этот код должен выполняться каждый раз сам, и моя цель - сделать так, чтобы код автоматически запускался, когда я просто набираю в столбце F какую-то новую дату (формат DATE - просто строка)

Вот как я переделал код:

Sub CreateNewShtsTransferData()



 Dim sht As Worksheet

 Dim lr As Long, i As Long

 Dim ID As Object

 Dim key As Variant

 Dim ws As Worksheet



Set sht = Arkusz1                                        '---here is the name of sheet, in English version it is sht = Sheet1---

Set ID = CreateObject("Scripting.Dictionary")            '---here is creating new place where the dates will be stored?---



 Application.ScreenUpdating = True

 Application.DisplayAlerts = True



lr = sht.Range("F" & Rows.Count).End(xlUp).Row           '---here is counting the dates?---



For i = 2 To lr

 If Not ID.Exists(sht.Range("F" & i).Value) Then         '---here is checking if the ID dictionary now contains the specific date, to avoid duplicates?---

 ID.Add sht.Range("F" & i).Value, 1                      '---here is added the new date to the ID dictionary? (which is next used to make new sheets)---

 End If

Next i

For Each key In ID.keys

 If Not Evaluate("ISREF('" & key & "'!F1)") Then         '---here is checking if there is a sheet named by a dates from ID dictionary?---

 Worksheets.Add(After:=Sheets(Sheets.Count)).Name = key  '---here is adding new sheet based on a name?---'

 End If



Set ws = Worksheets(CStr(key))

sht.Range("F1:F" & lr).AutoFilter 1, key                 '---here is filtering data? to copy then filtered data to new sheet? this is under above "For Each"?---

 sht.[F1].CurrentRegion.Copy ws.[A1]                     '---here is mention about starting copying in cell A1?---
 ws.Columns.AutoFit

 sht.[F1].AutoFilter

Next key



sht.Select

Application.CutCopyMode = False

Application.DisplayAlerts = True

Application.ScreenUpdating = True

MsgBox "All done!", vbExclamation



End Sub

Любая помощь приветствуется!

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