将列表作为范围(或固定表名)从SharePoint导入Excel

将列表作为范围(或固定表名)从SharePoint导入Excel,excel,vba,sharepoint,Excel,Vba,Sharepoint,下面的代码可以从SharePoint中提取列表并将其导入Excel。我的问题是,它将其作为表而不是范围导入,并且我无法自动将其转换为范围,因为每次运行脚本时表名都不同(表1、表2等等) 我的问题是:我可以直接从SharePoint导入列表作为Excel范围,这样我就不必转换它了吗?如果不是,是否可以使每次运行导入过程时导入表的名称都是fix 这是我的密码: Sub SharePoint_Import() Dim objMyList As ListObject

下面的代码可以从SharePoint中提取列表并将其导入Excel。我的问题是,它将其作为表而不是范围导入,并且我无法自动将其转换为范围,因为每次运行脚本时表名都不同(表1、表2等等)

我的问题是:我可以直接从SharePoint导入列表作为Excel范围,这样我就不必转换它了吗?如果不是,是否可以使每次运行导入过程时导入表的名称都是fix

这是我的密码:

   Sub SharePoint_Import()
        Dim objMyList As ListObject
        Dim objWksheet As Worksheet
        Dim strSPServer As String
        Const SERVER As String = "xxxx.xxxxx.xxx.net/xxxx/xxxx" 'SP server
        Const LISTNAME As String = "{1234567-1234-1234-1234-1234567891}" 'SP List ID
        Const VIEWNAME As String = "" 

            Set RData = Sheets("rawdata") 'reset import sheet
            RData.UsedRange.ClearContents

        strSPServer = "https://" & SERVER & "/_vti_bin" '<- _vti_bin is necessary
        Set objWksheet = RData

          Set objMyList = objWksheet.ListObjects.Add(xlSrcExternal, Array(strSPServer, LISTNAME, VIEWNAME), False, , Range("A1"))
          Set objMyList = Nothing
          Set objWksheet = Nothing

    End Sub
子SharePoint\u导入()
作为ListObject的Dim objMyList
将objWksheet设置为工作表
将strSPServer设置为字符串
常量服务器为String=“xxxx.xxxxx.xxx.net/xxxx/xxxx”'SP服务器
Const LISTNAME As String=“{1234567-1234-1234-1234-1234567891}”SP列表ID
Const VIEWNAME As String=“”
设置RData=图纸(“rawdata”)'重置导入图纸
RData.UsedRange.ClearContents
strSPServer=“https://”&SERVER&“/\u vti\u bin”执行此操作

[1] 将
RData.UsedRange.ClearContents
更改为
RData.Cells.Clear
。这将完全清除纸张。删除格式、文本、表格等

[2] 导入表后,添加此代码。因为只有一个表,所以可以使用表号来处理它

Dim tbl As ListObject
Set tbl = RData.ListObjects(1)

Dim tblRng As Range
Set tblRng = tbl.Range

'~~> Convert table to range
tbl.Unlist

'~~> Comment this in case you do not
'~~> want to remove the formatting
With tblRng
    .Interior.ColorIndex = xlColorIndexNone
    .Font.ColorIndex = xlColorIndexAutomatic
    .Borders.LineStyle = xlLineStyleNone
End With

您可以使用ADODB查询Sharepoint列表。检查以下代码(未经测试,因为我没有可用的Sharepoint,但在过去使用过类似的代码)


是的,这个解决方案即使在使用动态表名的情况下也能完美地工作。非常感谢。
Const SERVER As String = "xxxx.xxxxx.xxx.net/xxxx/xxxx" 'SP server
Const LISTNAME As String = "{1234567-1234-1234-1234-1234567891}" 'SP List ID

Dim connStr As String
Dim conn As New ADODB.Connection
Dim rs As ADODB.Recordset

connStr = "Provider=Microsoft.ACE.OLEDB.12.0;WSS;IMEX=1;RetrieveIds=Yes;" _
        & "DATABASE=" & SERVER _
        & ";LIST=" & LISTNAME & ";"
conn.Open connStr
Set rs = conn.Execute("select * from list")

Dim rData As Worksheet
Set rData = thisworknbook.Sheets("rawdata") 'reset import sheet
rData.UsedRange.ClearContents
rData.Range("A1").CopyFromRecordset rs
conn.Close