2017-05-06 62 views
-1

我不知道發生了什麼事,但是在我實現了一個新代碼後,'Sub'按下'Cancel'按鈕後繼續運行。VBA Excel Sub繼續運行Form卸載後

我的 '取消' 按鈕:

Private Sub CancelButton_Click() 

If Cancel Then Exit Sub 
Cancel = True 

'Save Settings 
.... 

Unload Me 
End Sub 

我Sub和新功能:

Sub Example() 
    Dim myArr() as string 
    ... 
    some loops.... 
    If Cancel Then 
     Exit Sub 
    End If 
    myArr = NewFunction(a1,a2) 
    myVar = myArr(1) 
    ... 
End Sub 

Function NewFunction(a1,a2) As String() 
    Dim tmpArr() as string 
    ... 
    ReDim tmpArr(1) 
    ... 
    NewFunction = tmpArr() 
End Function 

問題:

  1. 如果我避免線路myVar = myArr(1)的執行代碼後繼續運行取消,所以我需要手動停止執行。爲什麼?
  2. 如果執行行myVar = myArr(1),表格將被卸載,並出現錯誤:

運行時錯誤9

下標越界

不明白是什麼錯誤。如果我不取消它,代碼運行正常。該問題僅是其前完美工作「取消」按鈕...

乾杯,安迪

表單按鈕: Picture1

+0

你會上傳一張你的表格嗎? – Masoud

+0

什麼是變量「取消」?它在哪裏變暗? –

+0

@Masoud新增... – Andy

回答

0

這是正確的代碼,工作對我來說:

Dim Cancel As Boolean 

Private Sub UserForm_Initialize() 
    Cancel = False 
End Sub 

Private Sub CancelButton_Click() 
    SetStatus ("Cancelling") 

    If Cancel = False Then 
     Cancel = True 
     Exit Sub 
    End If 

    'Save Settings 
    '... some code 

    If Cancel Then 
     Unload Me 
    End If 
End Sub 
Sub Example() 
    '... 
    'some loops.... 
    If Cancel Then 
     'close open files... 
     '... some code 
     SetStatus ("Cancelled") 
     Exit Sub 
    End If 
    '... 
End Sub 

當按下「取消」按鈕時,代碼將以安全方式停止。然後第二次單擊「取消」按鈕表單將被卸載。