2013-05-03 116 views
0

我目前正在创建一个项目以创建多个清单,这些清单在特定单元格(资产代码和序列号)中只能具有特定值。我的清单模板已经完成,它包含了一堆VBA编码,以防止人们(我的工程师在这种情况下)输入错误的数据。将Sharepoint上已关闭的Excel工作簿中的值引用或复制到另一个Excel工作簿

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

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

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

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

我打算这样做的方法是在Sharepoint上只有一个附加的MasterWorkbook,它只有一张Sheet2。我想要的是清单工作簿更新其Sheet2以匹配MasterWorkbook的Sheet2。

我打算用VBA宏按钮来完成这项工作......即“UPDATE Sheet2”...每当一个用户有一个很好的互联网连接时,他们可以打开他们各自的Manifest用于编辑并单击此“更新工作表2”按钮,以便它们具有所有正确的列表。

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

当Manifest Workbook和MasterWorkbook都在本地驱动器上时,我发现代码能够做到这一点,但是我一直无法找到在Sharepoint上引用工作簿的方式。

基本上,我所学到的唯一的VBA编码是从前几周通过阅读这些论坛,我已经得到了这么多,但现在我卡住了。下面是我的想法,但它不起作用(改编自http://j-walk.com/ss/excel/tips/tip82.htm)...我不断收到'Bad File Name or Number Error'在以下行: If Dir(FilePath & FileName)= Empty Then

请让我知道你认为哪里出了问题......很明显,它不喜欢地址参考出于某种原因...我也看了DAO方法和其他一些方法...但是这似乎是最简单的,我很喜欢这个工作...目前我只是用MySite进行检查,它最终将成为一个Sharepoint站点如:“https://teamspace.slb.com/sites/INMWL/MWL/MH/Shared文档/”

在其自身的模块的完整代码:

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 
+0

注意Book2目前是MasterWorkbook,我在Book3中有上述代码,它也保存在同一个SharePoint目录中。 – 2013-05-03 11:53:34

回答

0

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

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

\\[email protected]\DavWWWRoot\personalsite\vsidebottom\Book2\Shared%20Documents

如果您要访问文本文件直接再设置它是这样的:

\\[email protected]\DavWWWRoot\personalsite\vsidebottom\Book2\Shared%20Documents\Test_Text1.txt

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

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

相关问题