我正在使用Office 365 Excel Online功能,可以创建一个在线表单(公开共享)来收集直接保存到工作簿中工作表上的表的响应。
为了分析数据,我添加了使用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 :(得分:1)
看起来这个问题不是那么直截了当。我的解决方案是把它转过头来。而不是有两个必须相互通信的独立文件。只需保留一个文件即可为Excel Online提供所需内容;保存的文件没有表单控件。
使用来自非常好tutorial and examples for creating form controls with VBA的网站的信息。每次我在Excel Desktop中启动工作表时,我都能编写创建表单控件的过程。在保存文件之前,它们已被删除。 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