当共享工作簿中某处存在下拉菜单、重新打开时崩溃或多个用户正在协作时,Excel 无法保存共享工作簿

标签 excel vba drop-down-menu office365

我正在使用 Excel 365 与我的团队共享文件,该文件存储在 SharePoint 上。它是一个 .xlsm 文件,因为它包含多个宏。用户必须在 Microsoft Excel 应用程序中本地打开文件才能使宏起作用,这不是问题,而且它们工作得很好。我有一个 VBA 宏,可以在某些单元格中创建下拉菜单(称为 Excel 数据验证),用于向用户建议值(主要是字符串)。

但是,当工作簿中某处出现下拉菜单时(详细信息如下),文件会系统性卡住,Excel 最终崩溃。我已经缩小了问题范围,几乎完全确定它仅取决于我的文件中是否存在下拉菜单。

作为引用,我用来创建下拉菜单的 VBA 代码始终相同,它工作得很好,就是这样(只有范围和数组不同):​​

With Range(<some_coordinates>).Validation
  .Delete
  .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:=Join(<an_array>, ",")
  .IgnoreBlank = True
  .InCellDropdown = True
  .ShowInput = True
  .ShowError = False
End With

此代码由工作表模块中的事件处理程序 (Worksheet_Change(ByVal Target As Range)) 触发,该事件处理程序还会触发其他操作,例如单元格颜色格式设置或自动填充某些单元格,以及似乎没有引起任何问题。 我确保在事件开始时使用这些行来避免无限循环:

Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Application.EnableEvents = False

脚本末尾有这些:

Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
Application.EnableEvents = True

在这之间,我使用一些线条来填充单元格,如下所示:

Cells(row, col).Value = an_array(0)
Cells(row, col).Value = an_array(1)

我还像这样更改格式:

cell.Interior.Color = RGB(255, 255, 155)

总体而言,所有这些都工作正常,应用程序不会卡住,VBA 不会崩溃或陷入无限循环,并且可以进行协作,除非文件中存在下拉菜单。 请在下面找到有关我的问题的详细信息。

协作处理文件时

当 2 人或更多人处理在 Excel 应用程序本地打开的文件时,一切似乎都工作正常。但是,当其中一个用户创建下拉菜单(通过宏)时,所有其他用户都会收到以下错误消息:

Your file wasn't uploaded because your changes cannot be merged with changes made by someone else.

收到此消息后,所有其他用户的 Excel 都会卡住,并最终崩溃。其余用户可以保存并关闭文件,并且每当有人重新打开该文件时,都会发生相同的问题,如单独处理文件时中所述。

单独处理文件时

单独处理文件时,宏可以正常工作,包括下拉菜单。我什至可以保存文件,但 Excel 却什么也没说。
但是,当我重新打开该文件时,出现以下错误:

We found a problem with some content in '<file_name>'. Do you want us to try to recover as much as we can? If you trust the source of this workbook, click Yes.

当我单击"is"时,我收到以下消息:

Excel was able to open the file by repairing or removing the unreadable content.

这将创建文件的“已修复”版本,没有下拉菜单,并且可以保存并稍后重新打开。


我尝试删除下拉菜单,它解决了问题(这就是为什么我相信它们导致了问题)。我尝试使用该文件的在线版本,但在我的情况下没有任何意义,因为宏在 Excel 在线中不起作用。

那么,有没有办法在共享 Excel 文件中使用和保存下拉菜单?

最佳答案

我找到了这个问题的解决方法,所以如果有人需要的话不妨在这里分享。

正如我所说,当多人使用该文件时,下拉菜单会使应用程序崩溃,但其他宏则不会出现这种情况。 经过(大量)调试,我们发现问题出在下拉菜单的大小(元素数量)上。如果下拉菜单太大,服务器似乎无法将修改“推送”给其他用户。

因此,简单的解决方法是限制下拉列表中显示的元素数量,尽管这可能很不方便(在我的情况下并不算太多)。
然后,当使用宏时,一切正常,并且其他人也进行了更改。保存并重新打开文件时,一切正常。

关于当共享工作簿中某处存在下拉菜单、重新打开时崩溃或多个用户正在协作时,Excel 无法保存共享工作簿,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/77008674/

相关文章:

vba - MS Access 在报告上绘制表格

angular - 我如何默认打开 ng bootstrap 下拉菜单

php - 将数据插入数据库

excel - 需要抓取相邻单元格中的最高和最低数字

excel - 从excel中提取时出现编译错误

excel - 类实例的字典,如何分配新值?

excel - UDF 在 Debug模式下工作,但它不会为单元格提供值

html - 带有水平子菜单的 CSS 下拉菜单

vba - 用于连接的 Excel VBA UDF 给出错误消息

java - 以编程方式生成excel文档