难以达到目标';在VBA中更改工作表上的列表行
因此,我试图从难以达到目标';在VBA中更改工作表上的列表行,vba,excel,adodb,Vba,Excel,Adodb,因此,我试图从目标获取列表行,但我似乎不停地出错。目标是将文档中所做的更改上载到服务器。最初,我在文档关闭时循环通过ListRows上传更改,但现在ListObjects变得太大,以至于将数组上传到服务器需要太长时间。更快的方法似乎只是在更改发生时上传更改 我在下面写了一段代码,得到了一个错误:无效或不合格的引用。 我省略了几个函数,因为它们正在工作,与问题无关 Private Sub Worksheet_Change(ByVal Target As Range) Ap
目标
获取列表行
,但我似乎不停地出错。目标是将文档中所做的更改上载到服务器。最初,我在文档关闭时循环通过ListRows
上传更改,但现在ListObjects
变得太大,以至于将数组上传到服务器需要太长时间。更快的方法似乎只是在更改发生时上传更改
我在下面写了一段代码,得到了一个错误:无效或不合格的引用。
我省略了几个函数,因为它们正在工作,与问题无关
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的Set函数。所以这行代码应该是这样的:
Set lr=lo.ListRows(Target.row-5)
我是个傻瓜。解决了这个问题!因此,在这种情况下,我需要使用lr的Set函数。因此,该行需要如下所示:Set lr=lo.ListRows(Target.row-5)
我是个傻瓜。lr=.ListRow(Target.row-5)。Index
指示它应该位于With块内。是否应该是lr=lo.ListRow(Target.row-5).Index
?我认为@ScottCraner是正确的,但请注意,他将其框定为一个问题。您没有指定抛出错误的行。抱歉,我现在正在响应。因此,他确实指出了导致错误的那一行,但是运行带有他的更正的代码会返回一个不同的错误:438-Object不支持这个属性或方法。解决了它!因此,在这种情况下,我需要使用lr的Set函数。因此,该行需要如下所示:Set lr=lo.ListRows(Target.row-5)
I是个傻瓜。lr=.ListRow(Target.row-5)。Index
指示它应该位于With块内。是否应该是lr=lo.ListRow(Target.row-5).Index
?我认为@ScottCraner是正确的,但请注意,他将其框定为一个问题。您没有指定抛出错误的行。抱歉,我现在正在响应。因此,他确实指出了导致错误的那一行,但是运行带有他的更正的代码会返回一个不同的错误:438-Object不支持这个属性或方法。解决了它!因此,在这种情况下,我需要使用lr的Set函数。因此,该行需要如下所示:Set lr=lo.ListRows(Target.row-5)
I是个傻瓜。