图片/表格工具不显示在Excel的功能区上
我有一张包含图片和表格的工作表。我还有一个UserForm,充当倒计时计时器。UserForm包含以下代码段:图片/表格工具不显示在Excel的功能区上,excel,vba,userform,Excel,Vba,Userform,我有一张包含图片和表格的工作表。我还有一个UserForm,充当倒计时计时器。UserForm包含以下代码段: Option Explicit Const AllowedTime As Double = 10 ' Total time in minutes Private Sub UserForm_Activate() Dim T, E, M, S As Double T = Timer Do E = CDbl(Time) * 24 * 60 * 60 - T M = A
Option Explicit
Const AllowedTime As Double = 10 ' Total time in minutes
Private Sub UserForm_Activate()
Dim T, E, M, S As Double
T = Timer
Do
E = CDbl(Time) * 24 * 60 * 60 - T
M = AllowedTime - 1 - Int(E / 60)
S = 59 - Round((E / 60 - Int(E / 60)) * 60, 0)
TimeLabel.Caption = Format(CStr(M), "00") & ":" & Format(CStr(S), "00")
DoEvents
Loop Until (Timer - T) / 60 >= AllowedTime
MsgBox "Time Over!"
Unload Me
End Sub
上面的代码不是我的。我在Excel论坛上找到了它。它只显示10分钟的倒计时,当时间用完时,userform将卸载
问题在于,当userform运行时,当我单击工作表中的图片或表格时,通常显示在功能区上的图片工具/表格工具不会出现。我插入了一个图表,图表工具也没有出现
我发现,当我通过注释上面的计时器代码来运行userform时,一切都运行得很好。我试着在3台不同的电脑上打开Excel文件,结果都显示出同样的问题。计时器代码有什么问题吗?这是由于
Do循环造成的。它不仅限于图片工具/表格工具
,还限于其他菜单,如数据透视表工具
下面是一个复制您的问题的示例。循环运行时,菜单将不显示。将此代码粘贴到模块中
Option Explicit
Sub Sample()
Dim loopCount As Long
Do
loopCount = loopCount + 1
'~~> Wait for 1 second
Wait 1
If loopCount > 15 Then Exit Sub
Loop
End Sub
Private Sub Wait(ByVal nSec As Long)
nSec = nSec + Timer
While nSec > Timer
DoEvents
Wend
End Sub
您可以使用Application.OnTime
来显示计时器,而不是使用循环。这里有一个例子。顺便说一句,VBA中也有处理计时器的API
小心:
在使用或测试计时器之前,请备份数据或使用新工作簿
用户表单代码:
插入一个新的用户表单。让我们称之为frmTimer
。在上面贴上一个标签。让我们称之为TimeLabel
。现在将此代码粘贴到userform中
Option Explicit
Dim nextMoment As Date
Private Sub UserForm_Activate()
Timer_Event
End Sub
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
Timer_Stop
End Sub
Sub Timer_Event()
nextMoment = Now + TimeValue("00:00:01")
Application.OnTime nextMoment, "Module1.OnTimer"
End Sub
Sub Timer_Stop()
Application.OnTime nextMoment, "Module1.OnTimer", Schedule:=False
End Sub
Public Sub OnTimer()
TimeLabel.Caption = Time
Timer_Event
End Sub
模块代码:
插入一个模块。让我们称之为Module1
。(如果这是新工作簿,默认情况下应为名称)。将此代码粘贴到那里
Option Explicit
Sub OnTimer()
frmTimer.OnTimer
End Sub
Sub ShowForm()
frmTimer.Show vbModeless
End Sub
现在运行Sub ShowForm()
。你会看到菜单现在并没有消失
在行动中