Clever-Excel-Forum

Normale Version: MessageBox Problem VBA
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo Leute,

ich habe folgenden Code fur (entschuldigt die fehlenden Umlaute, schreibe mit Auslandstastatur) ein quasi Copy & Paste- VBA geschrieben. Die entsprechenden Stellen im Code habe ich ich hervorgehoben.
Es geht darum, dass ich mit dem On Error GoTo + Error Handler erreichen moechte, dass die  MessageBox nur angezeigt wird wenn ein Fehler vorliegt.
Die MessageBox erscheint aber, obwohl (meiner Meinung nach) kein Fehler vorliegt.

Was habe ich falsch gemacht? Vielen Dank im Voraus und beste Gruesse

Sub Trabajo()
Dim mes As String
Dim message As Integer
Workbooks.Open Excel Training\Test Macro\BAB Expenses Detail.xlsm"
Windows("DBBAB2017.xlsm").Activate
Sheets("DB2017").Select
mes = Cells(7, 31).Value
If mes = "Seleccionar Mes" Then
message = MsgBox("Select a month", vbOKOnly, "Warning")
If message = vbOK Then
Exit Sub
Else
End If
Else
Windows("BAB Expenses Detail.xlsm").Activate
On Error GoTo ErrorHandler
Sheets(mes).Activate
Range("Table2[COMPANIA]").Select
Selection.Copy
Windows("DBBAB2017.xlsm").Activate
Sheets("DB2017").Range("Table1[[#Headers],[Co Number]]").Select
ActiveCell.End(xlDown).Offset(1, 0).Select
ActiveSheet.Paste
End If
Range("AE7").Select
Selection.FormulaLocal = "=""Seleccionar Mes"""
ErrorHandler:
message = MsgBox("Month is not active", vbOKOnly, "Warning")
If message = vbOK Then
Exit Sub
Else
End If
Hallo,

zu dem ganzen Select und Activate sage ich jetzt mal nichts.
Zum eigentlichen Problem:
Das ist ja auch logisch, dein Code läuft von oben nach unten durch, durchläuft also auch den Code deines Errorhandlers.
Du mußt am Ende deines Codes, also an der Stelle an der der Code endet wenn er fehlerfrei durchgelaufen ist, ein Exit Sub setzen.
Läuft also dein Code fehlerfrei durch, wird am Exit Sub aus der Routine ausgestiegen und dein Errorhandling mit Messagebox wird nicht durchlaufen.
Nur wenn ein Fehler auftritt, dann wird zum Errorhandler gesprungen.
Übrigens stimmt dein Workbook.Open nicht.
Code:
Sub Trabajo()
Dim mes As String
Dim message As Integer
Workbooks.Open Excel Training\Test Macro\BAB Expenses Detail.xlsm"
Windows("DBBAB2017.xlsm").Activate
Sheets("DB2017").Select
mes = Cells(7, 31).Value
If mes = "Seleccionar Mes" Then
message = MsgBox("Select a month", vbOKOnly, "Warning")
If message = vbOK Then
Exit Sub
Else
End If
Else
Windows("BAB Expenses Detail.xlsm").Activate
On Error GoTo ErrorHandler
Sheets(mes).Activate
Range("Table2[COMPANIA]").Select
Selection.Copy
Windows("DBBAB2017.xlsm").Activate
Sheets("DB2017").Range("Table1[[#Headers],[Co Number]]").Select
ActiveCell.End(xlDown).Offset(1, 0).Select
ActiveSheet.Paste
End If
Range("AE7").Select
Selection.FormulaLocal = "=""Seleccionar Mes"""
Exit Sub
ErrorHandler:
message = MsgBox("Month is not active", vbOKOnly, "Warning")
If message = vbOK Then
Else
End If
End Sub


Gruß Werner
1.
"zu dem ganzen Select und Activate sage ich jetzt mal nichts."

Nicht noetig haha. Weiss selbst, dass das nicht die beste Methode ist. Als Anfaenger bin ich allerdings schon froh, so weit gekommen zu sein ;)

2. Besten Dank Werner das hat super funktioniert :)

3. Darf ich dir noch eine Frage stellen, oder sollte ich dann lieber einen neuen Thread eroeffnen?

Beste Gruesse
Michael
Hallo Michael

warum neuen Thread aufmachen, stelle einfach deine Frage.   

Dein Code ist eindeutig Anfaenger Wissen, nur zum Spass habe ich versucht ihn mal Profihaft zusammen zufassen.
Ist aber ohne Garantie ob das so klappt, nicht getestet, und den Pfad zum Öffnen noch Prüfen!!  Laufwerk C:\??

Er dient als Anregung das wir gerne auf Select verzichten, indem wir mehrere Befehle miteinander verketten.
Das ist Bildschirm schonender, gibt weniger Flackern als staendig mit Select zu arbeiten. Würde mich freuen wenn der korrigerte Code funktioniert.

Noch ein, du hast nach İf Then immer Else stehen ohne einen Befehl dahinter, das kann man weglassen!!
Ich rücke bei If Then auch gerne die Befehlskette ein, sonst wird das ganze  zu unübersichtlich.
Haengt man hinter Copy den Zielordner direkt dahinter braucht man auch kein ActivSheet.Pste mehr!!

mfg  Gast 123

Code:
Sub Trabajo()
Dim mes As String
Dim message As Integer
Workbooks.Open "C:\Excel Training\Test Macro\BAB Expenses Detail.xlsm"

mes = Windows("DBBAB2017.xlsm").Sheets("DB2017").Cells(7, 31).Value

If mes = "Seleccionar Mes" Then
  message = MsgBox("Select a month", vbOKOnly, "Warning")
  If message = vbOK Then Exit Sub
Else
  On Error GoTo ErrorHandler
  Windows("BAB Expenses Detail.xlsm").Sheets(mes).Range("Table2[COMPANIA]").Copy _
  Windows("DBBAB2017.xlsm").Sheets("DB2017").Range("Table1[[#Headers],[Co Number]]").End(xlDown).Offset(1, 0)
End If

Range("AE7").FormulaLocal = "=""Seleccionar Mes"""
Exit Sub

ErrorHandler:
message = MsgBox("Month is not active", vbOKOnly, "Warning")
If message = vbOK Then
'**  hier steht kein Befehl !!  Warum dann If Then mit vbOk ???
End If
End Sub
Hi,

ich habe mir das AddIn "vbahtml2007" installiert, da erfolgt das Einrücken des kompletten Codes automatisch auf Knopfdruck.