У меня есть две основные функции, первая — search_bank. Он просматривает столбцы Credits, Type и store, ячейка за ячейкой и выясняет, есть ли у нас совпадение или нет. Если есть совпадение, он возвращает True и в качестве побочного эффекта изменяет цвет соответствующей ячейки.
Второй sub я использую для тестирования первой функции. Проблема, с которой я столкнулся, заключается в том, что я получаю сообщение Ошибка выполнения "424": требуется объект без указания места возникновения проблемы.
Вот первая функция:
Function search_bank(Store As String, amount As Double, Amex As Boolean) As Boolean
Dim m_store As Range
Dim m_type As Range
Dim Credit_Amt_Col As Range
Set m_store = bank_sheet.Range("1:1").Find("M_STORE")
Set m_type = bank_sheet.Range("1:1").Find("M_TYPE")
Set Credit_Amt_Col = bank_sheet.Range("1:1").Find("Credit Amt")
search_bank = False
Dim i As Long
For i = 1 To 9000
If Not search_bank Then
Dim store_cell As Range
Dim type_cell As Range
Dim credit_cell As Range
Set store_cell = Worksheets(2).Cells(i, m_store.Column)
Set type_cell = Worksheets(2).Cells(i, m_type.Column)
Set credit_cell = Worksheets(2).Cells(i, Credit_Amt_Col.Column)
If InStr(UCase(store_cell.Value), UCase(Store)) > 0 And credit_cell.Value = amount Then
If store_cell.Interior.ColorIndex <> 46 Then
If Amex And InStr(UCase(type_cell.Value), UCase("amex deposit")) Then
store_cell.Interior.ColorIndex = 46
search_bank = True
End If
If Not Amex And InStr(UCase(type_cell.Value), UCase("Credit Card Deposit")) Then
store_cell.Interior.ColorIndex = 46
search_bank = True
End If
End If
End If
End If
Next i
End Function
а вот тестер:
Sub Tester()
Dim x As Boolean
x = search_bank("ctc", 38.4, True)
Debug.Print (x)
End Sub
Я попытался использовать «набор» на тестере:
Sub Tester()
Dim x As Boolean
Set x = search_bank("ctc", 38.4, True)
Debug.Print (x)
End Sub
И даже объявление переменной перед ее передачей в тестер (я не очень привык к VBA, но на мгновение я подумал, что это настолько древнее, что нужно было объявить вещи до того, как они будут переданы)
Sub Tester()
Dim x As Boolean
Dim store As String
Dim Amount As Double
Dim amex As Boolean
store = "ctc"
Amount = 38.4
amex = True
x = search_bank(store, Amount, amex)
Debug.Print (x)
End Sub
bank_sheet
? - person BruceWayne   schedule 16.03.2017Find
возвращает допустимые объекты. Если значения не найдены в строке 1, они вернутNothing
, что вызовет эту ошибку позже в вашем коде. - person David Zemens   schedule 16.03.2017Range.Find
может вернутьNothing
. Вы должны проверить возвращаемые значения. - person Comintern   schedule 16.03.2017Sheet1 (Sheet1)
— этоCodeName (WorksheetName)
, гдеCodeName
— это объектная переменнаяWorksheet
глобальной области видимости, которую вы получаете бесплатно. Вы можете изменить его имя в окне инструментов properties (F4), изменив свойство(Name)
. - person Mathieu Guindon   schedule 16.03.2017