Excel VBA: просмотр списка и создание отчетов - PullRequest
0 голосов
/ 10 октября 2018

Я борюсь с тем, что считаю проблемой петли.Я больше «механик на заднем дворе» с Excel VBA, поэтому, пожалуйста, извините за мой простой вопрос.

К сожалению, я не могу поделиться книгой из-за конфиденциальной информации, но у меня есть код, который я использую с некоторыми изменениями имени поля.

Справочная информация: У меня есть столбец, в котором я беру по 1 ячейке за раз, вставляю ее в поле сводной таблицы и запускаю отчеты.Теперь у меня есть способ удалить текущую строку, которая возвращает ссылку обратно в ячейку A2.Думайте об этом как о программировании дозатора Pez.Ужасная и очень грубая сила, которую я знаю.Операция удаления строки занимает много системных ресурсов, и я бы хотел ее оптимизировать.Я пытался прочитать здесь и несколько других сайтов за последние пару часов, но я не могу понять, с чем сталкиваюсь.

Любая помощь будет очень признательна!

Sub AutoReport()

Dim strPage As String



Worksheets("HomePage").Select

Beginning:
'Sets the name in Home Page to the name in Feederlist cell F2

With Sheet1
    strPage = Worksheets("FeederList").Range("A2")
    Worksheets("HomePage").PivotTables("PivotTable1").PivotFields("UNIQUE ID"). _
    CurrentPage = strPage
End With


**Do a Bunch of Stuff**



' Feeds the next input into the machine

MoveToNext:

Worksheets("FeederList").Activate
Worksheets("FeederList").Range("A2").EntireRow.Delete

If Worksheets("FeederList").Range("A2") = "" Then

MsgBox "All Reports have been created.", vbInformation + vbOKOnly

Exit Sub
Else

GoTo Beginning

End If


End Sub

1 Ответ

0 голосов
/ 10 октября 2018

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


Worksheets("HomePage").Select

Dim lstRow As Long
Dim rngCell As Range
Dim rngSelection As Range

'Let's find the last row with data in column A. 
'So that we only traverse the required range without the need of 
'deleting previous cells while using the For loop.
lstRow = Worksheets("FeederList").Range("A" & Application.Rows.Count).End(xlUp).Row
Set rngSelection = Worksheets("FeederList").Range("A2:A" & lstRow)

For Each rngCell In rngSelection.Cells
    'Ignore all the cells with blank value or else the pivot table will throw the error
    If Trim(rngCell.Value) <> vbNullString Then
        'Sets the name in Home Page to the name in Feederlist cell F2
            strPage = rngCell.Value
            Worksheets("HomePage").PivotTables("PivotTable1").PivotFields("UNIQUE ID"). _
            CurrentPage = strPage

        '   **Do a Bunch of Stuff**

    End If
Next
rngSelection.Clear ' Optional - if the range really needs to be cleared
MsgBox "All Reports have been created.", vbInformation + vbOKOnly

Вам необходимо понять изменения и задать любые дополнительные вопросы, которые могут у вас возникнуть.Ниже приведены изменения, внесенные в исходный код.

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