2017-08-24 83 views
1

我正在使用Office 365 Excel Online功能创建联机表单(公开共享)以收集直接保存到工作簿中工作表上的表的响应。如何从Office 365 OneDrive For Business帐户托管的外部工作表中获取数据?

要分析数据,我添加了额外的工作表,采用VBA代码和表单控件。但是,表单控件不受Excel Online支持,所以我认为我需要两个工作簿。一个用于存储表单数据,另一个用于对数据进行分析。包含该窗体的文件必须保留在Office 365 Onedrive for Business上才能使用该功能。 如果我离开表单控件并尝试打开Excel Online中的文件(以编辑/共享表单),我必须编辑一个删除控件的副本 - 它不会忽略它们。

分析工作簿将由多人在多台PC上打开。我已经启用匿名访问的表单文件,这就是Onedrive给我: https://carlisleft-my.sharepoint.com/personal/dmartin_carlisleft_onmicrosoft_com/_layouts/15/guestaccess.aspx?docid=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&authkey=XXXXXXXXXXXXXXXXXXX

我使用获取外部数据和新的查询从文件并指定这个URL,但我要么可以访问Web界面的尝试它不会下载任何与URL相关的数据或Sharepoint表,但不会下载我需要的实际数据。

我现在想用VBA下载文件的副本,在后台本地打开它,读取表格数据,将它复制到分析文件中,然后删除下载,关闭连接。我假设使用正确的代码,我可以正确使用docid和authkey。

我已经使用Application.GetOpenFilename和Workbooks.Open()为本地存储的文件,但它不适用于此。我找到了这个答案Access Shared Files in Onedrive For Business但它不是VBA,也不是很清楚。我也发现这that talks about WebDav,但那是我需要做什么?

有没有人有任何想法或发现一个成功的方法从OneDrive for Business Excel文件获取Excel数据?我必须能够在任何Windows 10 PC上打开它。所以如果我必须映射网络驱动器,他们必须在飞行中完成。

+0

考虑使用surveymonkey代替 - 它是免费的基本使用。我不为他们工作。我只知道你正在做的事可能不会奏效。 –

回答

1

看起来好像这个问题并不那么简单。我的解决方案是把它打开。而不是有两个单独的文件必须相互通信。只需保留一个文件即可让Excel Online获得所需的内容;一个没有表单控件的文件。

使用来自网站的信息非常好tutorial and examples for creating form controls with VBA。每当我在Excel桌面中启动工作表时,我都能够编写创建表单控件的过程。在文件保存之前,它们被删除。 Excel Online不运行VBA代码,因此没有看到任何控件并打开文件。 Excel Desktop运行代码并创建控件,以便用户可以在界面中使用它们。

只需使用ThisWorkbook对象中的Workbook_Open()Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)事件即可使Excel运行您的代码。

删除所有的表单控件的BeforeSave的代码看起来有点像这样:

Sub deleteAll() 
'deletes all msoFormControl in the current Workbook 
Dim shpControl As Shape 
Dim ws As Worksheet 

For Each ws In ThisWorkbook.Worksheets 
For Each shpControl In ws.Shapes 
If shpControl.Type = msoFormControl Then 
shpControl.delete 
End If 
Next shpControl 
Next ws 
End Sub 
相关问题