Создание al oop с переменной IF - ошибка времени выполнения '1004' - PullRequest
0 голосов
/ 06 августа 2020

Я пытаюсь создать al oop на основе данных в столбце L. Данные в столбце L отформатированы как текст и содержат даты. Если совпадение найдено, вся строка должна быть выделена желтым цветом.

Sub Forn()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Worksheets(1)
    
    Dim strSearchText As String
    strSearchText = Format(DateAdd("m", 2, Now()), "yyyymm") 
    Dim rngSearchArea As Range
    Set rngSearchArea = ws.Range(Range("L10"), ws.Range("L" & ws.Range("L:L").Cells.Count).End(xlUp))
    
    Dim strFirstFound As String
    Dim rngCurrentFound As Range
    Set rngCurrentFound = ws.Range("L10")
    Set rngCurrentFound = rngSearchArea.Find(What:=strSearchText, After:=rngCurrentFound, LookIn:=xlFormulas, _
            LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, _
            MatchCase:=True, SearchFormat:=False)
            
             If rngCurrentFound Is Nothing Then
        MsgBox "INGEN TREFF"
        Exit Sub
    End If
    
    rngCurrentFound.Resize(1, 16).Offset(0, -11).Interior.ColorIndex = 6
    
    strFirstFound = rngCurrentFound.Address

Dim rngSource As Range
Dim rngNextFound As Range

Do
     Set rngNextFound = rngSearchArea.FindNext(rngCurrentFound)
     If rngNextFound.Row > rngCurrentFound.Row Then
        rngCurrentFound.Resize(1, 16).Offset(0, -11).Interior.ColorIndex = 6
    Else
         Set rngSource = ws.Range(rngCurrentFound, ws.UsedRange.Cells(ws.UsedRange.Cells.Count))
         
    End If

    Set rngCurrentFound = rngSearchArea.FindNext(rngCurrentFound)
    
Loop While rngCurrentFound.Address <> strFirstFound

End Sub

Я получаю ошибку времени выполнения «1004»: метод «Диапазон» объекта «_Worksheet» не выполнен .

Тот же самый код работал у меня вчера, и я совершенно не понимаю, что здесь нужно изменить.

UPD: ошибка вызвана запуском Макрос из PERSONAL.XLSB -

Set ws = ThisWorkbook.Worksheets(1)

больше не работает должным образом.

1 Ответ

3 голосов
/ 06 августа 2020

Использование ThisWorkbook в макросе сообщает VBA, что вы хотите получить доступ к книге, в которой хранится код. Если вы переместите свой код в Personal.xlsb, он получит доступ к Personal.xlsb и его листам - и это, вероятно, не то, что вы хотите.

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

Если вы хотите, чтобы код работал с видимой в данный момент рабочей книгой, замените ThisWorkbook просто на ActiveWorkbook - но вы должны убедиться, что имеет смысл запускать макрос в этой книге.

Если вы хотите выполнять его всегда в одной и той же книге, нет смысла хранить его в личной книге - просто сохраните его в самой книге.

Если вы хотите сначала выбрать книгу, добавьте в код диалоговое окно открытия файла, откройте книгу, используя Workbooks.Open, и используйте ссылку на книгу, возвращенную командой open.

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