作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我们有一个与 5 个用户共享并持续使用的工作簿。我们有大约 1800 条记录和 26 列数据。数据是 VLOOKUPS 标准值的混合。我有 3 个正在运行的宏和 2 个条件格式规则和 5 张带有转储数据的工作表(一张包含 17K 记录和 40 列数据)。
我们尝试删除所有不需要的额外功能,并用标准文本替换它们,但我们没有注意到差异。
工作簿不断崩溃,即使我们不触摸它并在其中单击,它也会卡住并可能需要长达 10 分钟才能再次使用。我还注意到它消耗了相当多的资源(CPU 有时会飙升到 100%),当你保存它时会使用 100% 的 CPU。
有没有人知道如何加快我们的工作簿或至少阻止文件崩溃? :)
在 Sheet1 中调用(语音)
Private Sub Worksheet_Change(ByVal Target As Range)
'43 = ok '41 = NOK
'check if change happened in column A
If Target.Column = 1 Then
'check if changed value is X
If Target.Value Like "*x*" Then
'add datestamp if it is
Cells(Target.Row, 43).Value = Format(DateTime.Now, "yyyy-MM-dd hh:mm:ss")
Else
End If
If Target.Value Like "*NOK*" Then
Cells(Target.Row, 41).Value = Format(DateTime.Now, "yyyy-MM-dd hh:mm:ss")
Else
End If
End If
End Sub
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Set shtVO = Sheets("Voice")
endRowVO = shtVO.Range("J" & Rows.Count).End(xlUp).Row
For Row = 2 To endRowVO
If IsEmpty(shtVO.Cells(Row, 28).Value) = False Then
If shtVO.Cells(Row, 3).Value <> shtVO.Cells(Row, 28).Value Then
If shtVO.Cells(Row, 1).Value Like "*CheckDoneDate*" Then
Else
shtVO.Cells(Row, 1).Value = shtVO.Cells(Row, 1).Value + "CheckDoneDate"
End If
Else
If shtVO.Cells(Row, 3).Value = shtVO.Cells(Row, 28).Value Then
If shtVO.Cells(Row, 1).Value Like "*CheckDoneDate*" Then
shtVO.Cells(Row, 1) = Replace(shtVO.Cells(Row, 1), "CheckDoneDate", "")
End If
End If
End If
Else
If shtVO.Cells(Row, 1).Value Like "*CheckDoneDate*" Then
shtVO.Cells(Row, 1) = Replace(shtVO.Cells(Row, 1), "CheckDoneDate", "")
End If
End If
Next Row
End Sub
Sub DateNow()
ActiveCell.Value = Format(DateTime.Now, "yyyy-MM-dd hh:mm:ss")
End Sub
Sub UpdateLinks()
'
' Update Links
'
'ActiveWorkbook.UpdateLink Name:="F:\VOICE.xlsm", Type:=xlExcelLinks
'ActiveWorkbook.CalculateFull
End Sub
最佳答案
Excel 公式会在其参数更改时重新计算(或者当任何单元格更改时,如果函数是可变的)。
在您的情况下,一个示例计算工作流程是:
VLOOKUP
重新计算引用数据表的 s。 Worksheet_Change
为更改的单元格触发。从处理程序中,您可以修改同一张表的第 41 或 43 列。 VLOOKUP
重新计算引用数据表的 s。 Worksheet_Change
为第 41/43 列中更改的单元格触发。什么也没做。 VLOOKUP
如果可能的话,不要看第 41 列。这将消除第二次重新计算。 关于Excel - 工作簿很慢并且经常崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12670865/
我是一名优秀的程序员,十分优秀!