通过ActiveX控件按钮运行VBA子例程时是否允许用户交互?
我有一个从宏窗口(ALT+F8)运行时按预期执行的子程序。我也可以链接一个表单按钮到这个子,它继续正常工作 现在,当我将ActiveX控件按钮连接到sub时,单击该按钮,并确保不单击任何其他内容,宏将再次按预期执行。但是,如果在宏运行时单击屏幕上的任意位置,结果会与预期不同。从ActiveX按钮运行时,用户交互似乎以某种方式启用。即便如此,为什么点击屏幕会改变任何事情 显然,我可以确保在执行宏时不触碰任何东西,或者简单地使用表单按钮,或者总是从宏窗口运行宏。。。但我想了解它为什么会这样通过ActiveX控件按钮运行VBA子例程时是否允许用户交互?,vba,excel,activex,Vba,Excel,Activex,我有一个从宏窗口(ALT+F8)运行时按预期执行的子程序。我也可以链接一个表单按钮到这个子,它继续正常工作 现在,当我将ActiveX控件按钮连接到sub时,单击该按钮,并确保不单击任何其他内容,宏将再次按预期执行。但是,如果在宏运行时单击屏幕上的任意位置,结果会与预期不同。从ActiveX按钮运行时,用户交互似乎以某种方式启用。即便如此,为什么点击屏幕会改变任何事情 显然,我可以确保在执行宏时不触碰任何东西,或者简单地使用表单按钮,或者总是从宏窗口运行宏。。。但我想了解它为什么会这样 Opti
Option Explicit
Sub run_loop()
Const FINALSHEET As String = "Final UV's"
Const VARYYEAR As String = "G6"
Const STARTYEAR As String = "H1"
Const ENDYEAR As String = "H2"
Const OUTPUTVECTOR As String = "G6:G46"
Const DIAGONALVECTOR As String = "H3"
' variable declarations
Dim input_year As Range
Dim vector_out As Range
Dim diagonal_vector As Range
Dim start_year As Integer
Dim end_year As Integer
Dim duration As Integer
' variable initializations
With ThisWorkbook.Sheets(FINALSHEET)
Set input_year = .Range(VARYYEAR)
Set vector_out = .Range(OUTPUTVECTOR)
Set diagonal_vector = .Range(DIAGONALVECTOR)
start_year = .Range(STARTYEAR).Value
end_year = .Range(ENDYEAR).Value
End With
' clear any prior results
Range(diagonal_vector, Cells(1000, 1000)).Clear
' set initial issue year (loop decrements by 1 immediately so set to 1 higher than initial)
input_year.Value = start_year + 1
' main loop
Do While input_year.Value > end_year ' ensure that the issue year hasn't gone past the specified end year
' decrement the issue year by 1 (sheet auto recalculates at this point)
input_year.Value = input_year.Value - 1
' recalculate duration
duration = start_year - input_year.Value + 1
' copy the resulting vector of UV factors for current issue year to the appropriate column
vector_out.Offset(0, duration).Value = vector_out.Value
' copy diagonal values to a single vector of current year unit values by duration
diagonal_vector.Offset(0, duration - 1).Value = vector_out(duration + 1, 1)
Loop
End Sub
ActiveX控件按钮的代码存在于包含它的工作表的代码中,只需调用run\u循环
Private Sub RunToggle_Click()
run_loop
End Sub
我不确定,但请尝试替换您的线路:
Range(diagonal_vector, Cells(1000, 1000)).Clear
这一行:
Range(diagonal_vector, ThisWorkbook.Sheets(FINALSHEET).Cells(1000, 1000)).Clear
请出示密码。您可能有
。在需要限定的代码中选择。Scott,那么其他方法也会失败吗?我唯一能想到的是显示一个(不可关闭的)模式用户窗体,它执行宏(因此您不能单击任何内容)然后在执行结束后卸载自己…不要让我们猜测-需要查看问题中的代码让你猜测不是我的意图。我不想让任何人猜。我想也许我的问题的答案对某些人来说是显而易见的。