从关闭的Sharepoint上的Excel工作簿中引用或复制值到另一个Excel工作簿

时间:2013-05-03 11:50:20

标签: excel function vba sharepoint excel-vba

我目前正在开发一个项目来创建多个清单,这些清单在特定单元格(资产代码和序列号)中只能包含特定值。我的清单模板已经完成,它包含一堆VBA编码,以防止人员(在这种情况下我工作的工程师)输入错误的数据。

我这样做的方法是使用一些内置的基于VBA的数据验证规则和检查。还有运行txt文件输出和Outlook电子邮件等的宏。包含资产代码和序列号的单元格由这些DataValidation规则控制,这些规则将数据与工作簿的第二个工作表中的三个列表进行比较。

总共会有大约100个不同的工作簿,每个工作簿在Sheet1上都有自己独特的清单,而Sheet2在100个左右的工作簿中是相同的...如上所述,Sheet2有三个列表:   - A列中可能的资产代码列表(约1500个条目)
  - F列中位置的资产代码列表(约26000个条目)   - 列G中位置的序列号列表(约26000个条目)

每个清单工作簿都将保存到Sharepoint中,以便个人可以编辑清单,而不会与签入和签出过多冲突。此外,大多数对这些清单的访问将由在互联网相当慢的离岸环境中工作的工程师执行,因此需要将文件保持分离并尽可能小。此外,包含有效资产数据的Sheet2将没有活动链接,因为很多时候没有互联网连接就会访问清单(下载并离线处理)。

问题是资产代码,位置和序列号中的资产定期更新并且正在发生变化(在输出txt / xls转储文件的外部系统中进行跟踪)。让我们说一个新资产进入,这需要在每个清单工作簿的Sheet2中更新,以便他们可能在该清单工作簿中拥有该新资产。

我打算这样做的方法是在Sharepoint上增加一个只有Sheet2的MasterWorkbook。我想要的是Manifest Workbooks更新他们的Sheet2以匹配MasterWorkbook的Sheet2。

我计划用VBA宏按钮来完成...即“UPDATE Sheet2”...每隔一段时间,当用户有良好的互联网连接时,他们可以打开他们各自的Manifest for编辑并单击此“更新Sheet2”按钮,以便它们具有所有正确的列表。

当在Manifest工作簿上按下“Update Sheet2”按钮时,它会在Sharepoint上读取MasterWorkbook的Sheet2(不打开它)并更新自己的Sheet2以便相应地匹配。

我发现代码能够在Manifest Workbook和MasterWorkbook都在本地驱动器上时执行此操作,但是我无法找到在Sharepoint上引用工作簿的方法。

基本上我学到的唯一VBA编码来自过去几周阅读这些论坛,我已经走到了这一步,但现在我被卡住了。以下是我的想法,但它不起作用(改编自http://j-walk.com/ss/excel/tips/tip82.htm)...我在以下行继续收到“错误文件名或数字错误”:       如果Dir(FilePath& FileName)= Empty Then

请让我知道你认为出了什么问题......显然它不是因为某些原因而不喜欢地址参考...我也看了DAO方法以及其他几种方法......但这似乎最简单,我很乐意这个工作...目前我只是用来检查MySite,它最终会成为Sharepoint网站,例如:“https://teamspace.slb.com/sites/INMWL/MWL/MH/Shared Documents /”

自己的模块中的完整代码:

Option Explicit

Sub GetDataDemo()
Dim FilePath$, Row&, Column&, Address$, Address1$

 'change constants & FilePath below to suit
 '***************************************
Const FileName$ = "Book2.xlsm"
Const SheetName$ = "Sheet1"
Const NumRows& = 1500
Const NumColumns& = 7
Address1 = ActiveWorkbook.Path
Cells(3, 5) = Address1
FilePath = ActiveWorkbook.Path & "/"

 '''' tried: https://mysite.slb.com/personalsite/vsidebottom/Book2/Shared Documents
'***************************************
 ''''
DoEvents
Application.ScreenUpdating = False
If Dir(FilePath & FileName) = Empty Then
    MsgBox "The file " & FileName & " was not found", , "File Doesn't Exist"
    Exit Sub
Else
                MsgBox "File Found!"
End If
For Row = 1 To NumRows
    For Column = 1 To NumColumns
        Address = Cells(Row, Column).Address
        Cells(Row, Column) = GetData(FilePath, FileName, SheetName, Address)
        Columns.AutoFit
    Next Column
Next Row
ActiveWindow.DisplayZeros = False
End Sub


Private Function GetData(Path, File, Sheet, Address)
Dim Data$
Data = "'" & Path & "[" & File & "]" & Sheet & "'!" & _
Range(Address).Range("A1").Address(, , xlR1C1)
GetData = ExecuteExcel4Macro(Data)
End Function

1 个答案:

答案 0 :(得分:0)

将SharePoint文档库引用为UNC路径(使用WebDAV地址访问库)。确保系统上的 ON 已启用Web服务服务。

FilePath变量设置为等于这样的字符串:

\\mysite.slb.com@SSL\DavWWWRoot\personalsite\vsidebottom\Book2\Shared%20Documents

如果要直接访问文本文件,请将其设置如下:

\\mysite.slb.com@SSL\DavWWWRoot\personalsite\vsidebottom\Book2\Shared%20Documents\Test_Text1.txt

请查看this blog post以获取完整说明。

----- SideNote ---- Vince;让你的问题在未来更简洁,你将更有可能得到答案! Check out this FAQ on asking questions它将在未来帮助你。没有比等待某人回答更令人沮丧的事了!