Отправка нескольких ячеек в мой SharePoint с полями rst.Fields - PullRequest
1 голос
/ 21 июня 2019

Прошу прощения за любые ошибки, мои навыки 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

1 Ответ

2 голосов
/ 21 июня 2019

["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
...