Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
740to744
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
740to744
740to744
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Fehler durch MsgBox in VBA abfangen
06.03.2006 17:46:53
Markus
Hallo,
ich habe folgenden Code:
If intEmpfänger Then
intSpalteLAYOUT = 2
intSpalteVARCOL = 4
Do
intSpalteVAR = 4
Do
If shVar.Cells(7, intSpalteVAR) = shLayout _
.Cells(intEmpfänger + 1, intSpalteLAYOUT) Then
Sheets("VARCOL").Activate
For i = 7 To 78
shVar.Cells(i, intSpalteVAR).Copy
With shVarcol
.Cells(i, intSpalteVARCOL).Select
.Paste
.Paste Link:=True
End With
Next i
intSpalteVARCOL = intSpalteVARCOL + 1
Exit Do
End If
intSpalteVAR = intSpalteVAR + 1
Loop
Selection.Find What:=intSpalteVAR
intSpalteLAYOUT = intSpalteLAYOUT + 1
Loop Until _
shLayout.Cells(intEmpfänger + 1, intSpalteLAYOUT) = ""
End If
Nun möchte ich einen Fehler abfangen, wenn die Abfrage aus:
If shVar.Cells(7, intSpalteVAR) = shLayout.Cells(intEmpfänger + 1, intSpalteLAYOUT) Then
Sheets("VARCOL").Activate
negativ verläuft. Ich dachte an eine MsgBox die mir die Meldung gibt"falsche Spalte" wenn
shVar.Cells(7, intSpalteVAR) shLayout.Cells(intEmpfänger + 1, intSpalteLAYOUT)oder so.
Wo muss ich den Fehler im eingangs abgebildeten Code wie abfangen, damit das Programm keinen Laufzeitfehler meldet, falls die Spalte von shVar in shLayout nicht gefunden wird und stattdessen eine Fehlermeldung ausgibt die darauf hinweist, dass die Spalte nicht gefunden werden konnte?
gruss Markus

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Fehler durch MsgBox in VBA abfangen
07.03.2006 00:31:24
MichaV
Hallo Markus,
ich hab das mal in ein lesbares Bild gebracht und gleich Dein Anliegen eingebaut.
Das Ganze ist ungetestet. Die innere Do- Loop- Schleife ist aber nun, da die If- Then- Bdingung immer in einem Schleifenabbruch landet, nicht mehr notwendig. Aber da ich nicht weiß, was Du anstelle des Exit Sub einbauen willst, lass ich das mal so drin stehen.


If intEmpfänger Then
    intSpalteLAYOUT = 2
    intSpalteVARCOL = 4
    Do
        intSpalteVAR = 4
        Do '(nicht notwendig)
            If shVar.Cells(7, intSpalteVAR) = shLayout _
                                            .Cells(intEmpfänger + 1, intSpalteLAYOUT) Then
                Sheets("VARCOL").Activate
                For i = 7 To 78
                    shVar.Cells(i, intSpalteVAR).Copy
                    With shVarcol
                        .Cells(i, intSpalteVARCOL).Select
                        .Paste
                        .Paste Link:=True
                    End With
                Next i
                intSpalteVARCOL = intSpalteVARCOL + 1
                Exit Do
            Else '<----------------
                MsgBox "eine Fehlermeldung die darauf hinweist, dass die Spalte nicht gefunden werden konnte", vbCritical, "Fehler"
                Exit Sub 'oder was auch immer
            End If '<---------------
            intSpalteVAR = intSpalteVAR + 1 '(nicht notwendig)
        Loop '(nicht notwendig)
        Selection.Find What:=intSpalteVAR
        intSpalteLAYOUT = intSpalteLAYOUT + 1
    Loop Until shLayout.Cells(intEmpfänger + 1, intSpalteLAYOUT) = ""
End If



Gruß- Micha
PS: Rückmeldung wäre nett.
Anzeige
AW: Fehler durch MsgBox in VBA abfangen
07.03.2006 12:18:07
Markus
Hi Micha,
das funktioniert leider nicht. wenn ich die do-loop schleife entferne, wird das ganze dokument nicht mehr nach allen gewünschten spalten durchsucht, sondern bricht nach dem ersten positiven fund ab. lasse ich sie allerdings drin, ehalte ich jedes mal eine fehlermeldung, obwohl die spalten im dokument enthalten sind. daher erhöhe ich intSpalteVar auch immer um 1, damit das gesamte dokument durchlaufen wird. das gleiche problem hatte ich davor schon. gibt es keine andere möglichkeit den schleifendurchlauf abzubrechen und eine meldung auszugeben, sobald eine spalte nicht gefunden wurde?
mfg Markus
Anzeige
AW: Fehler durch MsgBox in VBA abfangen
07.03.2006 21:47:54
MichaV
Hallo,
tut mir leid, ich habs mir 5 mal durchgelesen aber ich kapier es nicht. Du fängst bei Spalte 4 an zu suchen und vergleichst in Zeile 7 irgendwelche Werte. Wenn ein Wert gefunden wurde, brichst Du die Schleife ab. Nun könnte das Makro bis zur 256. Spalte suchen aber Du schreibst, daß die Werte immer zu finden sind. Wozu dann ein Abbruch? Möchtest Du nur bis Spalte 256 suchen und dann auswerten, ob was gefunden wurde?
Gruß- Micha
PS: Rückmeldung wäre nett.
AW: Fehler durch MsgBox in VBA abfangen
07.03.2006 22:10:51
Markus
Hi Micha,
ich prüfe in der ersten Bedingung, ob sich die Zelle auf dem Blatt Var (shVAR) auch im Blatt Layout befindet (shLayout). Dazu starte ich im Blatt Var in Zelle D7 (also 7,4 bzw. 7, intSpalteVar) und gleiche das mit der Zelle in Layout ab (intEmpfänger weise ich dabei über ein DialogSheet zu). Dabei suche ich in Var nach den selben Zellinhalten, die ich in Layout aufführe.
Die Schleife wird bislang so lange durchlaufen, bis in Var alle Spalten gefunden wurden, die ich in Layout definiert habe und fügt diese dann in einem 3. Tabellenblatt ein (shVarcol).
Definiere ich allerdings auf Layout einen Zellinhalt, der in Var nicht gefunden werden kann, erhalte ich jedesmal einen Programmabbruch. Allerdings ist es mir bislang nicht gelungen, diesen irgendwie abzufangen. Wird in Layout eine Zelle festgelegt, die in Var nicht gefunden werden kann, möchte ich darüber hinaus eine MessageBox ausgeben, die darauf hinweist, das in Layout eine falsche Spalte definiert wurde und zu diesem Blatt zurückspringen.
Konnte ich nun mein Problem verständlich schildern? Über Hilfe würde ich mich sehr freuen, da ich wirklich kurz vorm Verzweifeln bin. Falls dem immer noch nicht so sein sollte, melde dich bitte nochmal.
Herzliche Grüße
Markus
Anzeige
AW: Fehler durch MsgBox in VBA abfangen
07.03.2006 23:42:50
MichaV
Hallo Markus,
Du bist ja "online". Was hältst Du von einer Beispielmappe? Das erspart viele Worte.
Gruß- Micha
PS: Rückmeldung wäre nett.
AW: Fehler durch MsgBox in VBA abfangen
07.03.2006 23:48:15
Markus
Hi Micha,
ich stelle im laufe des morgigen Vormittags eine Beispielmappe online. Wäre super, wenn du dann mal nen blick darauf werfen könntest.
Ginge das in Ordnung?
gruß markus
AW: Fehler durch MsgBox in VBA abfangen
07.03.2006 23:52:35
MichaV
Hallo,
ja deswegen hab ich den Vorschlag doch gemacht ;o)
Gruß- Micha
AW: Fehler durch MsgBox in VBA abfangen
08.03.2006 00:31:04
Markus
Hi,
anbei die Beispielmappe: https://www.herber.de/bbs/user/31697.xls
Bei Benutzer Z würde ich nun eine Fehlermeldung erhalten, da das Jahr 2007 in VAR nicht existiert. Wie kann ich diesen Fehler abfangen!
Gruß Markus
Anzeige
AW: Fehler durch MsgBox in VBA abfangen
08.03.2006 21:37:52
MichaV
Hallo,
nun hab ich es kapiert. ALso doch so, daß der Fehler "rechtes Tabellenende erreicht" abgefangen werden soll. Aufbauend auf Deinem Code wäre das hier mein Vorschlag:


                End If
            intSpalteVAR = intSpalteVAR + 1
            '-----------------------
            If intSpalteVAR > 256 Then 'Ende des Tabellenblattes erreicht!
                Application.ScreenUpdating = True
                Sheets("Layout").Activate
                Cells(intEmpfänger + 1, intSpalteLAYOUT).Select
                MsgBox shLayout _
                .Cells(intEmpfänger + 1, intSpalteLAYOUT) & " existiert nicht in Vorlage- Tabelle"
                Exit Sub
            End If
            '------------------------
        Loop


Welche Bedeutung hat eigentlich die Zeile Selection.Find What:=intSpalteVAR ?
Gruß- Micha
PS: Rückmeldung wäre nett.
Anzeige
AW: Fehler durch MsgBox in VBA abfangen
08.03.2006 23:50:34
Markus
Hi Micha,
super. Das funktioniert jetzt genau so, wie ich es mir vorgestellt habe und woran tagelang erfolglos herumgedoktert habe.
Die Befehlszeile Selection.Find What:=intSpalteVAR stammte noch aus einem Versuch die Spalten zu suchen. Allerdings hatte ich vergessen, diesen aus dem Code zu löschen. Von daher war diese ohne Bedeutung und ich habe ihn nun aus dem Programmtext entfernt.
Jetzt habe ich aber noch eine weitere Frage, bei der du mir hoffentlich auch helfen kannst.
Und zwar würde ich gerne noch Abweichungen zwischen den einzelnen Jahren errechnen können. Dabei möchte ich jedoch nicht die Abweichungen fest in der Tabelle VAR berechnen, sondern diese zur Laufzeit erzeugen und auch diese in VARCOL einfügen. Dazu würde ich gerne ebenfalls im LAYOUT-Blatt einen Befehl definieren können, der diese Berechnung veranlasst.
Hast du eine Idee wie ich das anstellen könnte, dass wenn ich im Layout-Blatt in eine Zelle schreibe >, das Programm mir daraufhin eine Abweichung der beiden Jahre berechnet? dies soll erfolgen, indem 2005 durch 2002 geteilt und dann 1 abgezogen wird. also: (2005/2002)-1
Dabei soll das mittlerweile gelöste Problem in dem Maße gelöst werden, wie es nun geschafft ist (das geht doch hoffentlich, oder?
ich habe die Datei hier reingestellt.
https://www.herber.de/bbs/user/31734.xls
Dabei habe ich bei Benutzer Z beispielhaft schon so eine Berechnung formuliert. Nur wie ichs in VBA umsetzen soll, ist mir momentan noch schleierhaft.
Wäre echt super Micha, wenn du mir auch da nochmal aus der Patsche helfen könntest.
Im Voraus schonmal vielen lieben Dank.
Herzliche Grüße
Markus
Anzeige
Danke für die Rückmeldung mT
09.03.2006 00:06:38
MichaV
Hallo,
neee, da machst Du es Dir zu einfach.
1.) Das ist eine völlig neue Frage, also mach bitte einen neuen Threat auf
2.) Bei VBA Level gut wird (von mir) schon ein bischen mehr Eigeninitiative erwartet, also Du hast es sicher schon versucht, kommst aber mit der einen oder anderen Funktion nicht so richtig klar oder Du hast einen Code, der aber irgendwo nicht funzt....
3.) Falls Du Dich bei Deinem Level überschätzt haben soltest (was ja öfter vorkommt, als man erwartet), dann hier noch der Hinweis: die Mid- Funktion ist alles, was Du brauchst. Mid eingeben, F1 drücken, Beispiel gucken.
Wie gesagt, notfalls mach einen neuen Threat auf.
Gruß- Micha
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige