Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1084to1088
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
Inhaltsverzeichnis

Bei Fehler verzweigen

Bei Fehler verzweigen
Claus
Hallo Leute,
wie kann ich innerhalb eines Makros feststellen, ob die aktive Zelle eine Fehlermeldung ausgibt? (um dann eine Verzweigung anzusteuern)
If Selection = Fehler GoTo 30
geht schon mal nicht. Aber ihr seht (hoffe ich) was ich will.
Liebe Grüße
Claus

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Bei Fehler verzweigen
03.07.2009 16:47:22
Christoph
Hast du's mal mit Error probiert?
Ist nur wild geraten, aber wer weiß ?!? Auch ein blindes Huhn findet mal ein Korn...
Gruß
Christoph
AW: Bei Fehler verzweigen
03.07.2009 16:49:11
Claus
Hallo Christoph,
geht leider auch nicht, habe es eben versucht. Trotzdem Danke.
Zelle bitte anpassen ...
03.07.2009 17:01:03
Matthias
Hallo
probier mal so, geht aber sicher noch eleganter
If Left(Range("B5").Text, 1) = "#" Then MsgBox "Fehler"
Gruß Matthias
AW: Zelle bitte anpassen ...
03.07.2009 17:10:18
Claus
Nicht ganz, denn mein Makro startet immer von der aktiven Zelle, dehalb:
If Left(Selection.Text, 1) = "#" Then GoTo 30
hat geholfen, deshalb vielen Dank.
ist aber trotzdem unsicher ...
03.07.2009 17:18:02
Matthias
Hallo
... denn es kann ja auch mal nur "#" oder "#123" oder so in der Zelle stehen.
Das war also nur so ne Notlösung. Du mußt selber wissen, ob generell keine Zellinhalte mit "#" beginnen
außer bei einem Fehler.
Gruß Matthias
Anzeige
If IsError(Selection(1)) then ...
03.07.2009 18:13:25
Erich
Hi Claus,
versuchs mal mit
If IsError(Selection(1)) then ...
(Das (1) steht da, für den Fall, dass Selection aus mehrt als 1 Zelle besteht.)
Ist das "GoTo 30" wirklich nötig? Das kann leicht sehr unübersichtlich werden...
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
ich wußte es doch es geht eleganter und ...
03.07.2009 18:51:33
Matthias
Hallo
... vor allem viel sicherer.
:o)
Gruß Matthias
AW: ich wußte es doch es geht eleganter und ...
07.07.2009 10:47:03
Claus
Hallo Erich und Matthias,
super, vielen Dank. Tatsächlich könnte (theoretisch, aber sehr unwahrscheinlich) die Zelle mit # beginnen, insofern ist Erichs Vorschlag schon besser.
Gut, zur Art und Weise wie ich programmiere: Da ich kein Informatiker bin, lege ich das Augenmerk nicht auf die Einhaltung gewisser progrmmierrichtlinien. Diese sind sicherlich sinnvoll bei sehr komplexen Programmen, vor Allem wenn man viel später einmal modifizieren muß oder will.
Nun, ich weiß nicht, wie viel Zeit und Lust ihr habt? Ich möchte hier jetzt nichts fordern, ich stelle euch aber trotzdem mal meinen kompletten (für Informatiker sicher stümperhaften) Quellcode rein. Das ist aber auch noch nicht fertig, da steht dann aber "under construction".
Was soll dieser Makro?
Ich klicke in eine beliebige Zelle. Diese soll vom Makro nach unten kopiert werden, und zwar benötige ich das oft über große Bereiche: Genau so weit, wie links davon (Sonderfall wenn ich in Spalte A bin: wie rechts davon) etwas befüllt ist. Zuvor wird noch geprüft, ob von der betreffenden Zelle nach unten hin auch alles leer ist, um ungewolltes Überschreiben zu verhindern. (Verbesserungspotezial: Nur die die tatsächlich durch den Makro befüllt werden sollen, auf Leerheit prüfen. Allerdings steht selten drunter noch etwas.)
Als Bonus noch die Verzweigung, daß ich z. B. "uw" eingebe, dann soll eine Formel für unterschiedliche Werte ausgefüllt werden. Hierbei kann mir natürlich immer etwas neues einfallen, das kann ich ja dann immer dazubauen.
Sodele, aber wie gesagt, erwarten tue ich nicht von euch, daß ihr das anguckt, den es läuft ja auch so lala, aber freuen würde mich es schon.
Liebe Grüße und nochmals Danke für den wertvollen Tipp, Claus.

Sub copylinks()
' copy der aktuellen Zelle nach unten, bis zur höchsten befüllten Zeilennr. weiter links
Dim bs As Variant
Dim bz As Variant
Dim prf As Variant
Dim af As Variant
bs = ActiveCell.Column
bz = ActiveCell.Row
' sicherstellen, dass zu befüllender Bereich leer
Selection.End(xlDown).Select
If ActiveCell.Row  "" Then Stop
' letzte Zeile der nächstbefüllten Spalte links (bzw. rechts, wenn´um Spalte A geht) daneben  _
feststellen
prf = 0
10
prf = prf + 1
If bs = 1 Then prf = prf - 2
Cells(65536, bs - prf).End(xlUp).Select
af = ActiveCell.Row
If af  bs Then Stop
' kann sein, wenn A1 verbundene Zelle
' Verzweigung wenn "uw" oder "uwf"
Stop
' Bei Fehler geht die Abfrage nicht, deshalb vorab bei Fehler goto 30
' If Left(Selection.Text, 1) = "#" Then GoTo 30
If IsError(Selection(1)) Then GoTo 30
'if Selection = "fehlermeldung, wie auch immer das hinzubekommen ist) then goto 30
If Selection = "uw" Then GoTo 700
If Selection = "uwf" Then GoTo 750
30
Selection.Copy
ActiveCell.Offset(0, 0).Range(af).Select
ActiveSheet.Paste
'zum Ende springen bzw. Anfang, wenn rechts noch was kommt
Selection.End(xlToRight).Select
If ActiveCell.Column  1 Then Stop
ActiveCell.Offset(1, 0).Range("A1").Select
'ActiveCell.FormulaR1C1 = _
"=IF(ISERROR(MATCH(RC[-1],R1C[-1]:R[-1]C,0)),RC[-1],"""")"
ActiveCell.FormulaR1C1 = _
"=IF(ISERROR(MATCH(RC[-1],R1C[-1]:R[-1]C[-1],0)),RC[-1],"""")"
Selection.Copy
ActiveCell.Offset(0, 0).Range(af).Select
ActiveSheet.Paste
Stop
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Selection.End(xlDown).Select
Selection.ClearContents
Range("A1").Select
ActiveCell.Offset(bz - 1, bs - 1).Range("A1").Select
ActiveCell.FormulaR1C1 = "=RC[-1]"
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
'ActiveCell.FormulaR1C1 = _
"=IF(ISERROR(MATCH(RC[-1],R[-5]C:R[-1]C,0)),RC[-1],"""")"
GoTo 990
750
' Warnung falls Vorzeile nicht sortiert, Formel für unterschiedliche Werte einkopieren
Stop
' under construction, copyteil:
Selection.Copy
ActiveCell.Offset(0, 0).Range(af).Select
ActiveSheet.Paste
960
Range("A1").Select
ActiveCell.Offset(bz - 1, bs - 0).Range("A1").Select
GoTo 990
980
Selection.End(xlToLeft).Select
Selection.End(xlDown).Select
990
End Sub


Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige