2016-04-15 29 views
0

我试图弄清楚这一点。在我的主要部分中,我称之为函数。不知何故,它结束了我在该函数结束时的运行。它显示“结束前”,从不显示“我发现了”有人知道问题是什么吗?VBA函数永远不会返回主Sub

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

我实际上点击确定按钮,这是运行结束。就像我说的“我做到了”永远不会在屏幕上显示 –

+0

尝试使它成为一个'Sub'而不是'function' – Davesexcel

回答

1

这工作:

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

Function CopyAndDelete() 
    MsgBox "Before end" 
End Function 

因此,也许你关闭你在当你调用的宏工作表?宏应该被添加到一个模块,也许它需要在一个模块中以声明为public的函数的Normal模板:

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个,

相关问题