Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.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
Excel 将多个单元格发送到带有rst.字段的my SharePoint_Excel_Vba_Sharepoint_Ado - Fatal编程技术网

Excel 将多个单元格发送到带有rst.字段的my SharePoint

Excel 将多个单元格发送到带有rst.字段的my SharePoint,excel,vba,sharepoint,ado,Excel,Vba,Sharepoint,Ado,请原谅我的错误,我的VBA技能不是很好 因此,我尝试将excel数据上传到SharePoint列表,并遵循一些教程了解如何在宏中实现这一点,我正在使用ADO和SQL实现这一点。我使连接工作,因为在一个单独的宏中,我能够提取数据并发送单个数据行,但我想在excel中发送几行数据,我尝试了一个普通循环,但没有工作。理想情况下,如果我可以使用宏将第2行上传到第X行(LastRow),我会尝试循环,但要么我不理解这个语法,要么我不能像我想象的那样循环 Option Explicit Sub AddNew

请原谅我的错误,我的VBA技能不是很好


因此,我尝试将excel数据上传到SharePoint列表,并遵循一些教程了解如何在宏中实现这一点,我正在使用ADO和SQL实现这一点。我使连接工作,因为在一个单独的宏中,我能够提取数据并发送单个数据行,但我想在excel中发送几行数据,我尝试了一个普通循环,但没有工作。理想情况下,如果我可以使用宏将第2行上传到第X行(LastRow),我会尝试循环,但要么我不理解这个语法,要么我不能像我想象的那样循环

Option Explicit
Sub AddNew_SP()
Dim cnt As ADODB.Connection
Dim rst As ADODB.Recordset
Dim mySQL As String
Dim i As Integer
Dim LastRow As Integer

Set cnt = New ADODB.Connection
Set rst = New ADODB.Recordset
LastRow = Cells(Rows.Count, "A").End(xlUp).Row
mySQL = "SELECT * FROM [1];"

'open connection

With cnt
    .ConnectionString = _
    "Provider=Microsoft.ACE.OLEDB.12.0;WSS;IMEX=0;RetrieveIds=Yes;DATABASE=MySite;LIST=MyGUID;"
    .Open
End With

rst.Open mySQL, cnt, adOpenDynamic, adLockOptimistic
'For i = 2 To LastRow
rst.AddNew
    'rst.Fields("Department")=["A" + "i"]
    'rst.Fields("Section#") = ["B" + "i"]
    'rst.Fields("Operation#") = ["C" + "i"]
    'rst.Fields("Job") = ["D" + "i"]
    'rst.Fields("Program") = ["L" + "i"]
rst.Update
'Next i
If CBool(rst.State And adStateOpen) = True Then rst.Close
Set rst = Nothing
If CBool(cnt.State And adStateOpen) = True Then cnt.Close
Set cnt = Nothing

End Sub
[“B”+“2”]
(eg)与
[B2]
不同-最好避免使用方括号来表示VBA中的范围:不值得在
范围()
单元格()
上保存几个字符

试试这个:

Dim rw As Range
'...
'...

rst.Open mySQL, cnt, adOpenDynamic, adLockOptimistic
For i = 2 To LastRow
     With ActiveSheet.Rows(i)
         rst.AddNew
         rst.Fields("Department")=.Parent.Range("A2").value
         rst.Fields("Section#") = .Cells(2).Value
         rst.Fields("Operation#") = .Cells(3).Value
         rst.Fields("Job") = .Cells(4).Value
         rst.Fields("Program") = .Cells(12).Value
     End with
     rst.UpdateBatch
Next i

“我尝试了一个普通的循环,但它不起作用”-发生了什么事而没有起作用?语法错误,我对VBA不太熟悉,所以我为列a单元格编写了语法。我错了。虽然这对我起作用,但我很好奇.Cells(X).Value到底起什么作用?你能解释一下吗,我不是一个只接受答案就跑掉的人。@RobertFarmer你正在使用
ActiveSheet.Rows(I)
,所以用
I=2
你看到的是
.Rows(2)
-这是一个
范围
对象,代表整行。因此,将
.Cells(2)
与该范围相对应,将得到第二个单元格,即第二列中的单元格,也称为“B”-该单元格还返回一个
范围
对象,这次仅表示一个单元格
.Value
检索该单元格的基础值。@RobertFarmer
[B2]
也在
ActiveSheet
上工作,但是隐式的。括号内的表达式是一个字符串,然后将其提供给
应用程序。Evaluate
,它使Excel在活动工作表的上下文中计算字符串/括号内的表达式,因此
[B2]
为您提供了一个
范围
对象,表示活动工作表中的该单元格。除了表达式
“A”+“i”
的计算结果是一个工作表错误,因为如果在单元格中执行
=“A”+“i”
,这就是您得到的结果。好吧,现在我发现,我已经将其应用于我的完整数据集,其中一些项似乎重复了2-3次。我的数据集当前包含842项,在运行宏结束时,我上载了953项