excel - 删除 OLEObjects 并隐藏行后 VBA 设置计算模式后 Excel 停止响应
问题描述
我有一个大型 VBA/Excel 项目文件,当我单击调用我的子程序.xlsm
的“删除行”按钮时,它突然开始停止响应(被迫强制退出 Excel) 。RemoveComparison
奇怪的是,潜艇偶尔会起作用(并且过去曾起作用)。就好像 Excel 在RemoveComparison
调用它时有时会耗尽内存,而其他时候则不会。Application.Calculation = xlAutomatic
如果我在最后一行注释掉,问题就会消失。但是,什么时候RemoveComparison
起作用,大约需要 2 秒才能完成,因为我相信OLEObjects
当我将计算模式设置回xlAutomatic
.
有没有人发现可能导致 Excel 停止响应的原因?
这是工作簿的屏幕截图。Remove Row 按钮调用在这种情况下RemoveComparison()
删除的子程序ComboBoxManagerComparison7
(带有 S&P 500 的子程序),并且Comparison7CheckBox
在隐藏单元格(其中包含引用其他工作表的公式)之前删除。如果删除行像以前一样工作,再次单击该按钮将删除比较6,等等。
Sub RemoveComparison()
Application.Calculation = xlManual
Dim CurrentNumberOfComparisons As Integer
With Sheets("Manager")
'get current number of comparisons (to determine which ComboBox, etc. to remove)
CurrentNumberOfComparisons = .Range("NumberOfComparisons").Value
If CurrentNumberOfComparisons = 1 Then
MsgBox ("Min 1 comparison")
Exit Sub
End If
Dim ComboBoxName As String
'determine name of ComboBox to remove
ComboBoxName = "ComboBoxManagerComparison" & CurrentNumberOfComparisons
Call DeleteComboBox(ComboBoxName, Sheets("Manager"))
#If DEBUGREMOVECOMPARISON Then
Debug.Print "Deleted ComboBox"
#End If
Dim CheckBoxName As String
'determine name of CheckBox to remove
CheckBoxName = "Comparison" & CurrentNumberOfComparisons & "CheckBox"
Call DeleteCheckBox(CheckBoxName, Sheets("Manager"))
#If DEBUGREMOVECOMPARISON Then
Debug.Print "Deleted CheckBox"
#End If
Dim ComparisonCellToHideNamedRange As String
'determine which cells to hide
ComparisonCellToHideNamedRange = "selectedManagerComparison" & CurrentNumberOfComparisons & "Name"
Dim ComparisonCellToHide As Range
Set ComparisonCellToHide = .Range(ComparisonCellToHideNamedRange)
Range(Rows(ComparisonCellToHide.row), Rows(ComparisonCellToHide.row + 3)).Hidden = True
'update current number of comparisons
.Range("NumberOfComparisons").Value = CurrentNumberOfComparisons - 1
#If DEBUGREMOVECOMPARISON Then
Debug.Print "Success"
#End If
End With
Application.Calculation = xlAutomatic
End Sub
Sub DeleteComboBox(ComboBoxName As String, Sheet As Worksheet)
With Sheet
.OLEObjects(ComboBoxName).Delete
End With
End Sub
Sub DeleteCheckBox(CheckBoxName As String, Sheet As Worksheet)
With Sheet
.OLEObjects(CheckBoxName).Delete
End With
End Sub
编辑:仍然不清楚为什么从xlManual
返回到xlAutomatic
子中的切换会导致无响应,但是如果我注释掉子的最后一行Application.Calculation = xlAutomatic
并手动单击公式->计算选项->自动,即使没有单元格也会重新计算整个工作表被编辑。我知道隐藏单元格会导致重新计算,但是隐藏一行是否会导致重新计算整个工作表(即使隐藏的行没有依赖项)?
编辑:如果我将 ComboBoxes 和 CheckBoxes 移动到工作表的另一部分而不是在 sub 中删除它们,Excel 将停止崩溃。我不确定为什么删除这些 OLEObjects 会导致 Excel 输入无响应。
解决方案
推荐阅读
- php - Laravel 等待 api 响应并继续
- django - django 无法创建具有足够数据的模型
- python - 如何有效地将 sqlite DB 中的大量数据过滤到 numpy 数组中?
- javascript - 输入值时删除 html 标签标记文本 - 使用 CSS
- c - 为什么不能将 char 转换为 double
- r - 我如何将多个单独的图表放在 r 中的一个 pdf 上
- json - 赛普拉斯登录 REST 端点未经授权,邮递员工作 - 上传 JSON 文件
- python - LXML - 在保留元素的同时删除元素的父元素
- react-native - Pin Protect (Salesforce) 与 React Native Expo
- vue.js - 无法访问数据属性 vue 3:未捕获(承诺中)类型错误:无法读取未定义的属性(读取“变量名”)