excel - VBA 代码在 Excel 2010 中可以快速完美地运行,但在 Excel 2016 或更高版本中添加一条记录需要 30 秒
问题描述
这是我第一篇关于堆栈溢出的帖子,所以如果我做错了什么,请告诉我。我遇到了一个有趣的情况,下面的代码在使用 Excel 2010 的 Windows 7 上几乎可以立即运行,并且多年来我们一直没有遇到任何问题,但现在使用 Excel 2016 和/或在 Windows 10 上添加记录需要将近 30 秒Office 365。这导致用户的生产力出现痛苦的延迟(由于 Windows 7 EOL,我们本周刚刚切换到 Windows 10/Excel 2016)我想知道我是否在 VBA/Excel 中遗漏了一些可能导致的新内容这样的延迟或者如果代码需要一些清理。注意:我没有编写此代码,但我的任务是修复它。
该代码显示了一个 VBA 用户表单,用户可以键入或复制和粘贴多达 16 个不同的字段(如下所示)。一旦他们单击添加按钮,它就会将记录添加到 ws 列表中。一点也不复杂,理论上它应该立即运行。我不知道为什么要花这么长时间。有人可以帮忙吗?
谢谢!
代码
模块1
Sub showme()
frmqcinfo.Show 0
End Sub
用户表单 frmqcinfo
Private Sub cmdAdd_Click()
Dim ws As Worksheet
Dim addme As Range
Set ws = Sheet1
Set addme = ws.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0)
If Not IsDate(txtdate.Value) Then
MsgBox " The date field must be a proper date", vbExclamation, "Date format error"
Me.txtdate.Value = ""
Me.txtdate.SetFocus
Exit Sub
End If
If Me.txtqcdte.Value = "" Or Me.cboproc.Value = "" Or Me.txttdk.Value = "" Or Me.txtsmpsz.Value = "" Then
MsgBox "There is insufficient data. All fields must be added", vbExclamation, "Mandatory fields are incomplete"
Exit Sub
End If
With ws
'set the date format to suit your area
addme.Value = Format(txtdate.Value, "mm/dd/yy")
addme.Offset(0, 1).Value = Me.cboproc.Value
addme.Offset(0, 2).Value = Format(txtqcdte.Value, "mm/dd/yy")
addme.Offset(0, 3).Value = Format(txttdk.Value, "00")
addme.Offset(0, 4).Value = Format(txtsmpsz.Value, "00")
addme.Offset(0, 5).Value = Format(txttranty.Value, "00")
addme.Offset(0, 6).Value = Format(txtmissln.Value, "00")
addme.Offset(0, 7).Value = Format(txtmdate.Value, "00")
addme.Offset(0, 8).Value = Format(txtcovamt.Value, "00")
addme.Offset(0, 9).Value = Format(txtwdk.Value, "00")
addme.Offset(0, 10).Value = Format(txtesc.Value, "00")
addme.Offset(0, 11).Value = Format(txtcsr.Value, "00")
addme.Offset(0, 12).Value = Format(txtwrnst.Value, "00")
addme.Offset(0, 13).Value = Format(txtcarrier.Value, "00")
addme.Offset(0, 14).Value = Format(txtpolnum.Value, "00")
addme.Offset(0, 15).Value = Format(txtfldzn.Value, "00")
addme.Offset(0, 16).Value = Format(txtodd.Value, "00")
addme.Offset(0, 17).Value = Format(txtoth.Value, "00")
End With
Sheet4.Select
'reset the form
Unload Me
frmqcinfo.Show 0
'update the sheet
Application.ScreenUpdating = True
End Sub
解决方案
尝试关闭计算:Application.Calculation = xlManual
。然后在最后重新打开它:Application.Calculation = xlAutomatic
推荐阅读
- laravel - 如何修复登录页面 Laravel ui auth 输入错误的电子邮件/密码时没有显示任何错误消息
- sql - SQL Server并发问题,同时交易金额实时限制验证
- android - 单元测试 orEmpty() 方法 Kotlin
- dynamic - 当我使用 for 循环动态生成任务时,动态创建的任务实例被标记为 Removed
- c++ - 制作纹理使用坐标
- python - 使用 sqlalchemy 将 onupdate="cascade" 添加到 postgres 中的现有列
- firebase - Firebase 火库 NullPointerException
- autodesk-forge - 在查看器中计算所有对象的体积 - Autodesk Forge
- r - 如何将日志功能应用于R中的数据框?
- android - 为什么“主页”按钮在我的 Android 应用程序中调用 `onDestroy()`?