2016-04-15 3 views
0

私はこれを理解しようとしています。私のメインサブでは、私は関数を呼び出します。どういうわけか、それはその機能の終了時に私の走りを終わらせました。 "Before end"と表示されず、 "I made it"と表示されません。VBA関数はメインサブに戻ってこない

Sub Main() 
     call CopyAndDelete() 
     msgbox "I made it out" 
End Sub 

Function CopyAndDelete() 
Dim CopyFromWB As Workbook 
Dim CopyToWB As Workbook 
Dim wb As Workbook 
Dim CopyThisWS As Worksheet 
Dim ws As Worksheet 
Dim Path As String 
Dim FileName As String 

Application.DisplayAlerts = False 

Set CopyToWB = Workbooks("test.xlsm") 
CopyToWB.Activate 

For Each ws In ActiveWorkbook.Sheets 
    Select Case ws.Name 
     Case "A" 
      ws.Delete 
     Case "B" 
      ws.Delete 
     Case "C" 
      ws.Delete 
     Case "D" 
      ws.Delete 
    End Select 
Next ws 

Path = Application.GetOpenFilename(Title:="choose a file") 
FileName = Right(Path, Len(Path) - InStrRev(Path, "\")) 
For Each wb In Workbooks 
    If wb.Name = FileName Then 
     Workbooks(FileName).Close 
    End If 
Next wb 

Set CopyFromWB = Workbooks.Open(Path) 
Set CopyThisWS = CopyFromWB.Worksheets(1) 
CopyThisWS.Copy After:=CopyToWB.Worksheets(1) 
ActiveSheet.Name = "New A" 
CopyFromWB.Close 

Application.DisplayAlerts = True 

MsgBox "Before end" 

End Function 
+2

それが効果的にブレークポイントですので、それは、モーダルです。だから、 "私はそれを作った"が実行される前に、 "Before end"メッセージで「OK」を押す必要があります。最初のダイアログボックスをクリアすると、実行が続行されます。 –

+0

私は実際にOKボタンを押すと、それは実行の終了です。私が言ったように、画面には決して表示されませんでした。 –

+0

'function'の代わりに' Sub'を作ってみてください。 – Davesexcel

答えて

1

これは動作します:

Sub Main() 
    Call CopyAndDelete 
    MsgBox "I made it out" 
End Sub 

Function CopyAndDelete() 
    MsgBox "Before end" 
End Function 

をので、おそらくあなたは、あなたがマクロを呼び出したときにあったワークシートを閉じていますか?マクロは、モジュールに追加する必要がありますし、多分それはpublicとして宣言された関数で標準テンプレート内のモジュールにする必要があります:

Sub Main() 
    Call CopyAndDelete 
    MsgBox "I made it out" 
End Sub 

Public Function CopyAndDelete() 
    ... your rest of the code ... 
    MsgBox "Before end" 
End Function 

第H、

関連する問題