Ошибка времени выполнения ‘1004’. Ошибка, определяемая приложением или объектом

#excel #vba #runtime-error

#excel #vba #время выполнения — ошибка

Вопрос:

Я продолжаю получать ошибку времени выполнения 1004 при попытке запустить этот код. Я попытался выполнить отладку, запустив курсор, и кажется, что ошибка возникает, когда первая строка смещает активную ячейку и вводит значение в столбец D. Я новичок в VBA, и я не уверен, как полностью отладить эту ошибку. Любая помощь будет принята с благодарностью!

 Sub Categorize()

Dim RN As Integer

'Find the number of used rows in the sheet
 RN = Sheets(2).UsedRange.Rows.Count

   'Loop for all the cells in the column

   For Each Cell In Range("B2", "B" amp; RN)

      'If value in column B = "VIRGIN MOBILE", categorize expense as phone bill
      If Cell.Value = "TS-VIRGIN" amp; " " amp; "MOBILE" amp; " " amp; "CLIENT" amp; " " amp; "ID" amp; " " amp; "14" amp; " " amp; "DIG" Then

         'Write in category into column D
         Cell.Offset(0, 2).Value = "Phone" amp; " " amp; "Bill"
         
    ElseIf Range("B" amp; CStr(LSearchRow)).Value = "WALMART" amp; " " amp; "STORE" amp; " " amp; "#1097" amp; "      " amp; "CALGA" Then
    
        'Write in category into column D
         Cell.Offset(0, 2).Value = "Groceries"
         
    ElseIf Range("B" amp; CStr(LSearchRow)).Value = "INTERAC" amp; " " amp; "E-TRANSFER" Then
    
        'Write in category into column D
         Cell.Offset(0, 2).Value = "Income"
         
    ElseIf Range("B" amp; CStr(LSearchRow)).Value = "FPOS" amp; " " amp; "LOBLAWS" amp; " " amp; "CITY" amp; " " amp; "MARKET" amp; " " amp; "CALGA" Then
    
        'Write in category into column D
         Cell.Offset(0, 2).Value = "Groceries"
         
    ElseIf Range("B" amp; CStr(LSearchRow)).Value = "INVESTMENT" amp; " " amp; "PURCHASE" Then
    
        'Write in category into column D
         Cell.Offset(0, 2).Value = "Investments"
         
    ElseIf Range("B" amp; CStr(LSearchRow)).Value = "OPOS" amp; " " amp; "AMZN" amp; " " amp; "Mktp" amp; " " amp; "CA" amp; "        " amp; "WWW.A" Then
    
        'Write in category into column D
         Cell.Offset(0, 2).Value = "Personal" amp; " " amp; "Shopping"
    
    ElseIf Range("B" amp; CStr(LSearchRow)).Value = "FPOS" amp; " " amp; "ZEE" amp; " " amp; "CUTS" amp; " " amp; "LTD." amp; "       " amp; "CALGA" Then
    
        'Write in category into column D
        Cell.Offset(0, 2).Value = "Personal" amp; " " amp; "Shopping"

                
    ElseIf Range("B" amp; CStr(LSearchRow)).Value = " " Then
    
        'Write in category into column D
         Cell.Offset(0, 2).Value = "Income"
         
    ElseIf Range("B" amp; CStr(LSearchRow)).Value = "MB-EMAIL" amp; " " amp; "MONEY" amp; " " amp; "TRF" Then
    
        'Write in category into column D
         Cell.Offset(0, 2).Value = "Income"
         
    Else
    
        'Write in category into column D
       Cell.Offset(0, 2).Value = "Miscellaneous"
    

      End If

   Next Cell

End Sub
 

Комментарии:

1. Сколько строк у вас есть, я бы изменил Dim RN as Integer на ...as Long FYI.

2. Предполагается, что функция UsedRange найдет это, но в настоящее время это 31, и я попробую это сделать! Спасибо

3. О, также, какой лист является активным листом при запуске? Sheets (2) предоставляет количество последних строк, но все остальные диапазоны выполняются на любом активном листе. Кроме того, что такое LSearchRow

4. О, я понимаю. Все должно выполняться на листах (2). Должен ли я вводить листы (2) в инструкции For перед ячейкой?

5. Посмотрите, как использовать With инструкцию, чтобы убедиться, что все относится к нужному листу.