Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen

Sprunganweisung

Betrifft: Sprunganweisung von: sylke
Geschrieben am: 18.08.2008 14:43:13

Hallo Zusammen!

Bei folgenden Marko habe ich das Problem, dass das Marko stoppt, wenn es die die Variable "marke" nicht findet. Wie kann ich die Anweisung ändern, so das die fehlende Marke übersprungen wird?


Sub copy_benmark_trend(orginal, marke, quelle, ziel)

Dim test As String

' In Excel-Report suchen und kopieren
Windows(quelle).Activate
Range("A1").Select

'Suchen
Cells.Find(What:=orginal).Activate

'Kopieren
ActiveCell.Offset(4, 1).Range("A1").Select
ActiveCell.Range("A1:A2").Select
Selection.Copy

'###########################################################

' Excel für den Kunden
Windows(ziel).Activate

' Suchen - Hier liegt das Problem!!!
Application.Goto Reference:=marke

' Reinkopieren
ActiveCell.Offset(1, 1).Range("A1").Select

If IsEmpty(Selection) = True Then
   Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose: _
 _
=False
End If

End Sub



Vielen Dank im Voraus
Sylke

  

Betrifft: AW: Sprunganweisung von: Daniel
Geschrieben am: 18.08.2008 15:07:46

HI

vielleicht durch überspringen mit der On Error Goto-Funktion, wobei meiner Einschätung nach eine saubere
Programmierung (z.B. fehlen bei allen Übergabeparametern die Variablentypen) eine derartige Maßnahme überflüssig machen würde:

Sub copy_benmark_trend(orginal, marke, quelle, ziel)

Dim test As String

' In Excel-Report suchen und kopieren
Windows(quelle).Activate
Range("A1").Select

'Suchen
Cells.Find(What:=orginal).Activate

'Kopieren
ActiveCell.Offset(4, 1).Range("A1").Select
ActiveCell.Range("A1:A2").Select
Selection.Copy

'###########################################################

' Excel für den Kunden
Windows(ziel).Activate

On Error Goto Weiter
' Suchen - Hier liegt das Problem!!!
Application.Goto Reference:=marke
on error goto 0
' Reinkopieren
ActiveCell.Offset(1, 1).Range("A1").Select

If IsEmpty(Selection) = True Then
   Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose: _
 _
 _
=False
End If
Weiter:
on error goto 0
End Sub



sicherlich wäre es besser, schon im aufrufenden Code den an "marke" übergebenen Wert zu prüfen und dieses Makro nur aufzurufen, wenn dort ein gültiger Wert vorhanden ist.
Fehlervermeidung sollte Priorität vor Fehlerbehandlung haben.

Gruß, Daniel


  

Betrifft: AW: Sprunganweisung von: sylke
Geschrieben am: 19.08.2008 10:01:01

Hallo Daniel!

Danke für Deine Antwort. Ich finde auch, dass "Goto"-Anweisungen nicht gerade eine "schöne Programmierung" sind.

Das Marko rufe ich mit

Call copy_benmark_trend("u_tt_1 by trend", "u_tt_1_by_trend", quelle, ziel)

auf. Wie kann ich im Aufruf checken, ob die Marke "u_tt_1_by_trend" in "ziel" vorhanden ist?

Viele Grüße
Sylke


  

Betrifft: AW: Sprunganweisung von: Daniel
Geschrieben am: 19.08.2008 11:01:09

Hi

im Prinzip müsstest du die NAMEN von Excel durchprüfen, ob es einen Namen mit der angegeben Bezeichnung gibt, das könnte dann so aussehen:

Sub test()
Dim n As Name
Dim Check As Boolean

Check = False
For Each n In Application.Names
    If n.Name = "u_tt_1_by_trend" Then
        Check = True
        Exit For
    End If
Next

If Check Then
    Application.Goto reference:="u_tt_1_by_trend"
Else
    MsgBox "Name nicht gefunden"
End If
End Sub



Da muss man halt abwägen, ob man doch nicht lieber die On Error Goto - Variante wählt.
hängt auch davon ab, welche weiteren Konsequenzen das Fehlen des Namens haben soll.

Gruß, Daniel


  

Betrifft: AW: Sprunganweisung von: sylke
Geschrieben am: 19.08.2008 11:29:53

Hallo Daniel!

Dankeschön für Deine Antwort, aber ich werde dann doch die Goto-Lösung nehmen, da das Kopieren im Nachhinein noch mal von einer Kollegin kontrolliert wird und es so auffällt, wenn etwas fehlt.

Die andere Lösung ist zwar wesentlich eleganter, aber auch aufwendiger.

Viele Grüße
Sylke