Переменная объекта или с переменной блока не установлена ​​ошибка для создания листов - PullRequest
0 голосов
/ 07 февраля 2020

Приведенный ниже код прекрасно работает сам по себе, но как только я добавляю опцию, явно заданную в начале, переменная объекта или с переменной блока, не установленной, появляется в sheetname = index3. Я видел другие потоки, где проблема решена set sheetname = ThisWorkbook.Worksheets(""), но есть три листа, которые будут созданы до того, как я использовал это утверждение, поэтому я не думаю, что это может работать таким образом. Любые идеи, чтобы решить это?

Option explicit
Private Sub createvramp()
        Static count As Long
        Dim iRow As Long
        Dim aRow As Long
        Dim a As Long
        Dim b As Long
        Dim selectRange As Range
        Dim lastline As Integer
        Dim sheetname As Worksheet
        Dim indexrowcount As Integer


        j = 2
        iRow = 1
        lastline = ActiveSheet.UsedRange.Rows.count
        While iRow < lastline + 1
            a = iRow + 1
            b = iRow + 99 ' Max Group Size with Same name in F to H column
            count = 1
            If Cells(iRow, "H").Value = "Vramp_M1" Then
                sheetname = "Index1"
            ElseIf Cells(iRow, "H").Value = "Vramp_M2" Then
                sheetname = "Index2"
            Else
                sheetname = "Index3" '<-------error occurs here
            End If
            For aRow = a To b
                If Cells(iRow, "H") = Cells(aRow, "H") And Cells(iRow, "I") = Cells(aRow, "I") And Cells(iRow, "J") = Cells(aRow, "J") Then
                    count = count + 1
                Else
                    Set selectRange = Range("A" & iRow & ":AP" & aRow - 1)
                    selectRange.Copy
                    indexrowcount = Sheets(sheetname).UsedRange.Rows.count + 1
                    Sheets(sheetname).Range("A" & indexrowcount).PasteSpecial xlPasteAll
                    iRow = iRow + count
                    Exit For
               End If
            Next aRow
        Wend

1 Ответ

1 голос
/ 07 февраля 2020

Если вы просто хотите установить имя листа в своем коде, используйте Dim sheetname As String. Option Explicit очень помогает, но вы должны быть очень осторожны при объявлении переменных ...

Случилось так, что ошибка появилась в этой строке только потому, что первые два условия были False ...

Также хорошо избегать использования ActiveSheet, Sheets(...), Range("A" ...), Cells(aRow,...).

Все выраженное таким образом относится к ActiveSheet . Когда вы будете работать с другим листом, возможно, с другой книгой, и вам потребуется обработать определенный лист c (Sheets(sheetname).Range...), вы можете столкнуться с большим беспорядком. Попробуйте определить лист со ссылкой на его рабочую книгу. Каждый диапазон для ссылки на лист, где он принадлежит ...

Как минимум Dim Sh as Worksheet, за которым следует Set Sh = ActiveSheet (используйте свой рабочий лист). А затем используйте Sh.Range("A...), Sh.Cells(aRow,...) и так далее ...

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

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