Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
难以达到目标';在VBA中更改工作表上的列表行_Vba_Excel_Adodb - Fatal编程技术网

难以达到目标';在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是个傻瓜。