Excel - 工作簿很慢并且经常崩溃

标签 excel excel-2007

我们有一个与 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

在 ThisWorkbook 中调用
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

作为模块 1 调用
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 公式会在其参数更改时重新计算(或者当任何单元格更改时,如果函数是可变的)。

在您的情况下,一个示例计算工作流程是:

  • 您更改了语音表第 1 列中的一个单元格。
  • 全部 VLOOKUP重新计算引用数据表的 s。
  • Worksheet_Change为更改的单元格触发。从处理程序中,您可以修改同一张表的第 41 或 43 列。
  • 全部 VLOOKUP重新计算引用数据表的 s。
  • Worksheet_Change为第 41/43 列中更改的单元格触发。什么也没做。

  • 对于每一行,保存时也会发生同样的情况。

    你可以:
  • 制作 VLOOKUP如果可能的话,不要看第 41 列。这将消除第二次重新计算。
  • 切换到手动重新计算。
  • 关于Excel - 工作簿很慢并且经常崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12670865/

    相关文章:

    vba - excel vba重新打开excel文件而不保存

    vba - 使用查找函数未找到值的错误消息

    Excel 2007 - 工作表之间的宏复制和粘贴,到新行

    excel-2007 - 如何解压 xlsx?

    excel - 如何根据另一个单元格中的数据在 Excel 中创建 URL?

    java - 在 Java Spring 中检查 XSSFCell cellType 是否为 Date

    VBA检索超链接目标表?

    mysql - phpMyAdmin 导入带有日期和时间的 Excel 电子表格

    Python - 将现有工作簿的格式应用于另一个工作簿

    excel - 使用一个单元格保存文件引用