使用 rst.Fields 将多个单元格发送到我的 SharePoint
Sending Multiple Cells to my SharePoint with rst.Fields
请原谅我的 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"]
(例如)与 [B2]
不同 - 最好避免使用方括号来指代 VBA 中的范围:不值得在 Range()
、Cells()
等
试试这个:
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 技能不是很好。
所以,我正在尝试将 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"]
(例如)与 [B2]
不同 - 最好避免使用方括号来指代 VBA 中的范围:不值得在 Range()
、Cells()
等
试试这个:
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