#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
инструкцию, чтобы убедиться, что все относится к нужному листу.