2016-04-15 5 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

Пришло модальный, так что это эффективно точка разрыва. Таким образом, вы должны нажать «ОК» в сообщении «До конца», прежде чем «Я это сделаю» будет выполнен. Он должен продолжить работу после того, как вы очистите первое диалоговое окно. –

+0

Я на самом деле нажал кнопку «ОК», и это конец запуска. Как я сказал, «я это сделал» никогда не отображается на экране –

+0

Попробуйте сделать его 'Sub' вместо' function' – Davesexcel

ответ

1

Это работает:

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

Function CopyAndDelete() 
    MsgBox "Before end" 
End Function 

Так что, возможно вы закрываете таблицу вы были, когда вы назвали макрос? Макрос должен быть добавлен к модулю и, возможно, она должна быть в модуле в обычном шаблоне с функции, объявленной как общедоступный:

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

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

НТН,

Смежные вопросы