通过ActiveX控件按钮运行VBA子例程时是否允许用户交互?

通过ActiveX控件按钮运行VBA子例程时是否允许用户交互?,vba,excel,activex,Vba,Excel,Activex,我有一个从宏窗口(ALT+F8)运行时按预期执行的子程序。我也可以链接一个表单按钮到这个子,它继续正常工作 现在,当我将ActiveX控件按钮连接到sub时,单击该按钮,并确保不单击任何其他内容,宏将再次按预期执行。但是,如果在宏运行时单击屏幕上的任意位置,结果会与预期不同。从ActiveX按钮运行时,用户交互似乎以某种方式启用。即便如此,为什么点击屏幕会改变任何事情 显然,我可以确保在执行宏时不触碰任何东西,或者简单地使用表单按钮,或者总是从宏窗口运行宏。。。但我想了解它为什么会这样 Opti

我有一个从宏窗口(ALT+F8)运行时按预期执行的子程序。我也可以链接一个表单按钮到这个子,它继续正常工作

现在,当我将ActiveX控件按钮连接到sub时,单击该按钮,并确保不单击任何其他内容,宏将再次按预期执行。但是,如果在宏运行时单击屏幕上的任意位置,结果会与预期不同。从ActiveX按钮运行时,用户交互似乎以某种方式启用。即便如此,为什么点击屏幕会改变任何事情

显然,我可以确保在执行宏时不触碰任何东西,或者简单地使用表单按钮,或者总是从宏窗口运行宏。。。但我想了解它为什么会这样

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,那么其他方法也会失败吗?我唯一能想到的是显示一个(不可关闭的)模式用户窗体,它执行宏(因此您不能单击任何内容)然后在执行结束后卸载自己…不要让我们猜测-需要查看问题中的代码让你猜测不是我的意图。我不想让任何人猜。我想也许我的问题的答案对某些人来说是显而易见的。