Итак, я пытаюсь получить ListRow
от Target
, но я, кажется, получаю ошибки без остановок. Цель состоит в том, чтобы загрузить изменения, сделанные в документе, на сервер. Первоначально я зациклился на ListRows
, чтобы загрузить изменения, когда документ был закрыт, но теперь ListObjects
стали настолько большими, что требуется слишком много времени для загрузки массивов на сервер. Более быстрый способ - просто загружать изменения по мере их возникновения.У вас возникли проблемы с получением списка TargetRow на Worsheet_Change в VBA
Я написал код ниже, и я получаю ошибку: недействительная или неквалифицированная ссылка. Есть несколько функций, которые я пропустил, так как они работают, и они не имеют отношения к проблеме.
Private Sub Worksheet_Change(ByVal Target As Range)
Application.Calculation = xlCalculationManual
Dim CustomersConn As ADODB.Connection
Dim CustomersCmd As ADODB.Command
Dim lo As Excel.ListObject
Dim ws As Excel.Worksheet
Dim lr As Excel.ListRow
Dim Customers As Variant
Set ws = ThisWorkbook.Worksheets(8)
Set lo = ws.ListObjects("TCustomers")
Set CustomersConn = New ADODB.Connection
Set CustomersCmd = New ADODB.Command
lr = .ListRow(Target.row - 5).Index
CustomersConn.ConnectionString = SQLConStr
CustomersConn.Open
CustomersCmd.ActiveConnection = CustomersConn
CustomersCmd.CommandText = _
GetUpdateText(_
Intersect(lr.Range, lo.ListColumns("Type").Range).Value, _
Intersect(lr.Range, lo.ListColumns("Customer").Range).Value, _
Intersect(lr.Range, lo.ListColumns("Name").Range).Value, _
Intersect(lr.Range, lo.ListColumns("Contact").Range).Value, _
Intersect(lr.Range, lo.ListColumns("Email").Range).Value, _
Intersect(lr.Range, lo.ListColumns("Phone").Range).Value, _
Intersect(lr.Range, lo.ListColumns("Corp").Range).Value)
Debug.Print (CustomersCmd.CommandText)
CustomersConn.Close
Set CustomersConn = Nothing
Set lo = Nothing
Set ws = Nothing
Set lr = Nothing
Application.Calculation = xlCalculationAutomatic
End Sub
'lr = .ListRow (Target.row - 5) .Index' указывает, что он должен находиться внутри блока с блоком. Должно ли это быть lr = lo.ListRow (Target.row - 5) .Index'? –
Я ожидаю, что @ScottCraner верен, но заметьте, что он обрамлял его как вопрос. Вы не указали, какие строки выдают ошибку. – OldUgly
Извините, я сейчас отвечаю. Таким образом, он действительно указал на строку, которая вызывает ошибку, но запуск кода с его исправлением возвращает другую ошибку: 438 - Object не поддерживает это свойство или метод. –