Excel 用户窗体按钮单击快时响应时间慢
Excel UserForm button click slow response time when clicked fast
我在 Excel 中有一个 VBA 用户窗体,代码非常简单。它显示对象的集合(实际上是字典),一次一个,带有 "first, previous, next, and last" 的按钮。一切都很好,但如果我要连续点击下一步按钮来浏览项目,我必须慢慢点击它(大约每秒一次)。如果我更快地点击,点击将被忽略。例如,如果我在两秒内点击四次,它只会 'register' 第一次和第三次点击并前进两次,而不是四次。
下面是 'next' 按钮的示例代码(以及用户表单模块中的其他适用代码):
Private dQIDs As Dictionary
Public Sub TransferQIDs(ByVal dIncomingQIDs As Dictionary)
Set dQIDs = dIncomingQIDs
End Sub
Private Sub bNext_Click()
Call LoadQID(CLng(lIndex.Caption) + 1)
End Sub
Private Sub LoadQID(lQID As Long)
Dim QID As cQID
Set QID = dQIDs(lQID)
lIndex.Caption = lQID
lItems.Caption = "Viewing new QID " & lQID & " of " & dQIDs.Count
Me.tQID = QID.lQID
Me.tTitle = QID.sTitle
Me.tVID = QID.sVendorID
Me.bOS = QID.bOSPatch
Me.bApp = Not QID.bOSPatch
Me.bPrev.Enabled = Not (lQID = 1)
Me.bFirst.Enabled = Not (lQID = 1)
Me.bNext.Enabled = Not (lQID = dQIDs.Count)
Me.bLast.Enabled = Not (lQID = dQIDs.Count)
End Sub
有什么想法吗?
就我个人而言,我会在加载内容时禁用按钮。
Private Sub bNext_Click()
Dim b1 As Button
Set b1 = ActiveSheet.Buttons("LoadQID")
REM or Me.LoadQID
b1.Font.ColorIndex = 15
b1.Enabled = False
Application.Cursor = xlWait
Call LoadQID(CLng(lIndex.Caption) + 1)
b1.Enabled = True
b1.Font.ColorIndex = 1
Application.Cursor = xlDefault
End Sub
发生这种情况的原因是在 Excel 中访问单个对象需要相当多的时间。这样点击就可以注册了
或者您可以切换 UI 更新:
Application.ScreenUpdating = False
Application.ScreenUpdating = True
windows 正在检查双击。因此,如果您快速单击,它会记录一次双击。
2个选项。在 windows 鼠标设置中提高双击速度
或制作双击事件
我在 Excel 中有一个 VBA 用户窗体,代码非常简单。它显示对象的集合(实际上是字典),一次一个,带有 "first, previous, next, and last" 的按钮。一切都很好,但如果我要连续点击下一步按钮来浏览项目,我必须慢慢点击它(大约每秒一次)。如果我更快地点击,点击将被忽略。例如,如果我在两秒内点击四次,它只会 'register' 第一次和第三次点击并前进两次,而不是四次。
下面是 'next' 按钮的示例代码(以及用户表单模块中的其他适用代码):
Private dQIDs As Dictionary
Public Sub TransferQIDs(ByVal dIncomingQIDs As Dictionary)
Set dQIDs = dIncomingQIDs
End Sub
Private Sub bNext_Click()
Call LoadQID(CLng(lIndex.Caption) + 1)
End Sub
Private Sub LoadQID(lQID As Long)
Dim QID As cQID
Set QID = dQIDs(lQID)
lIndex.Caption = lQID
lItems.Caption = "Viewing new QID " & lQID & " of " & dQIDs.Count
Me.tQID = QID.lQID
Me.tTitle = QID.sTitle
Me.tVID = QID.sVendorID
Me.bOS = QID.bOSPatch
Me.bApp = Not QID.bOSPatch
Me.bPrev.Enabled = Not (lQID = 1)
Me.bFirst.Enabled = Not (lQID = 1)
Me.bNext.Enabled = Not (lQID = dQIDs.Count)
Me.bLast.Enabled = Not (lQID = dQIDs.Count)
End Sub
有什么想法吗?
就我个人而言,我会在加载内容时禁用按钮。
Private Sub bNext_Click()
Dim b1 As Button
Set b1 = ActiveSheet.Buttons("LoadQID")
REM or Me.LoadQID
b1.Font.ColorIndex = 15
b1.Enabled = False
Application.Cursor = xlWait
Call LoadQID(CLng(lIndex.Caption) + 1)
b1.Enabled = True
b1.Font.ColorIndex = 1
Application.Cursor = xlDefault
End Sub
发生这种情况的原因是在 Excel 中访问单个对象需要相当多的时间。这样点击就可以注册了
或者您可以切换 UI 更新:
Application.ScreenUpdating = False
Application.ScreenUpdating = True
windows 正在检查双击。因此,如果您快速单击,它会记录一次双击。
2个选项。在 windows 鼠标设置中提高双击速度 或制作双击事件