Почему я продолжаю получать сообщение об ошибке в моем коде? - PullRequest
0 голосов
/ 01 декабря 2018

Я пытаюсь ввести свой первый код VBA и получаю сообщение об ошибке времени выполнения в этом конкретном месте в моем коде:

lastrow = ws.Cells(Rows.Count, 1).End(xlUp).Row

Вот фактический код:

Sub Test_loop()

' Testing loop for highlighting

Dim lastrow As Long
Dim datevar As String

lastrow = ws.Cells(Rows.Count, 1).End(xlUp).Row

For i = 2 To lastrow
    datevar = Format(ws.Cells(i, 2), "mm/dd")
    If ws.Cells(i, 3) = "Received" And datevar = "11/24" Then
        Cells(i, 1).Interior.Color = RGB(rrr, ggg, bbb)
    End If
Next i

End Sub

Моя цель - пройти через последнюю ячейку моей строки и найти ячейку с определенной датой, которая имеет ячейку справа с определенным текстом.Затем он выделит первую ячейку в этом ряду и перейдет к следующему ряду.Я не очень уверен, где я ошибся и почему я получаю ошибку.

был бы признателен за помощь

1 Ответ

0 голосов
/ 01 декабря 2018

Код выдает ошибку, потому что ws не установлен ни на какой фактический рабочий лист.Вот как это исправить:

  • добавьте Option Explicit в качестве первой строки в модуле.Это позволит Excel перехватывать любые необъявленные переменные
  • , объявлять ws как переменную типа Worksheet, используя оператор Dim.Также добавьте объявления для любых других переменных, которые мы будем использовать позже - i, rrr, ggg, bbb
  • make ws указывают на фактический рабочий лист, используя оператор Set

Соединение этого дает нам:

Option Explicit

Sub Test_loop()

' Testing loop for highlighting

Dim lastrow As Long
Dim datevar As String
' These variables weren't declared in the original code
Dim ws As Worksheet
Dim i As Integer
Dim rrr As Integer
Dim ggg As Integer
Dim bbb As Integer

' ws needs to be set to an actual sheet - Sheet1 is used here
' but replace this with the name of the actual sheet you need
'
' ws will be set to the worksheet called Sheet1 in whichever
' workbook is active when the code runs - this might not be
' the same workbook that the code is stored in
Set ws = Worksheets("Sheet1")

' For consistency, need to qualify Rows.Count with
' a worksheet
lastrow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row

For i = 2 To lastrow
    datevar = Format(ws.Cells(i, 2), "mm/dd")
    If ws.Cells(i, 3) = "Received" And datevar = "11/24" Then
        Cells(i, 1).Interior.Color = RGB(rrr, ggg, bbb)
    End If
Next i

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