【问题标题】:How do I get data from an external worksheet when it's hosted on an Office 365 OneDrive For Business Account?当外部工作表托管在 Office 365 OneDrive For Business 帐户上时,如何从外部工作表中获取数据?
【发布时间】:2017-08-24 10:21:23
【问题描述】:

我正在使用 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

我尝试使用 Get External Data 和 New Query From File 并指定此 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 上打开。因此,如果我必须映射网络驱动器,它们必须在运行中完成。

【问题讨论】:

  • 考虑改用surveymonkey - 它对基本使用是免费的。我不为他们工作。我只知道你正在做的事情可能行不通。

标签: vba excel office365 onedrive


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多