2016-05-10 6 views
1

Итак, я пытаюсь получить 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 
+4

'lr = .ListRow (Target.row - 5) .Index' указывает, что он должен находиться внутри блока с блоком. Должно ли это быть lr = lo.ListRow (Target.row - 5) .Index'? –

+0

Я ожидаю, что @ScottCraner верен, но заметьте, что он обрамлял его как вопрос. Вы не указали, какие строки выдают ошибку. – OldUgly

+0

Извините, я сейчас отвечаю. Таким образом, он действительно указал на строку, которая вызывает ошибку, но запуск кода с его исправлением возвращает другую ошибку: 438 - Object не поддерживает это свойство или метод. –

ответ

0

Решено! Поэтому в этом случае мне нужно использовать функцию Set для lr. Так что строка должна выглядеть так: Set lr = lo.ListRows(Target.row - 5) Я дурак.

 Смежные вопросы

  • Нет связанных вопросов^_^