Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: If IsError then

If IsError then
08.11.2016 09:32:32
Berndt
Hallo zusammen,
folgender Codebestandteil muss angepasst werden, ich weiß nur nicht wie:
              If IsError(Application.Match(a(i, 1), Worksheets(a(i, 3)).Range("B1:B" &  _
bis), 0)) Then 'Doppelte Werte werden vermieden
Sheets(a(i, 3)).Range("B" & bis) = a(i, 1)
Sheets(a(i, 3)).Range("C" & bis) = a(i, 4)
Sheets(a(i, 3)).Range("B8:C8").Copy  ' da ist das gleiche Format
Sheets(a(i, 3)).Range("B" & bis).Resize(, 2).PasteSpecial xlFormats
Sheets(a(i, 3)).Range("B" & bis).HorizontalAlignment = xlLeft
Sheets(a(i, 3)).Range("C" & bis).NumberFormat = "dd.mm.yyyy"
End If
Das Problem liegt dabei in der IsError-Formel bei dem B1.
Ich möchte nicht das die Formel ab B1 sucht, sondern ab Spaltenkopf "Themenspeicher" in Spalte B. Der steht irgendwo in Spalte B. Erst ab da soll die Formel laufen.
Wo muss ich Anpassungen vornehmen?
LG Berndt
Anzeige

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: If IsError then
08.11.2016 09:37:41
Daniel
Hi
Worksheets(a(i, 3)).Range("B" & ab & ":B" & bis)
die Variable ab berechnest du so ( das muss natürlich vorher erfolgen):
ab = application.Match("Themenspeicher", Worksheets(a(i, 3)).Range("B:B"), 0)
Gruß Daniel
Anzeige
AW: If IsError then
08.11.2016 09:46:07
Berndt
Danke für deine Hilfe,
aber nun kommt der Fehler "Typen Unverträglich"

For i = 1 To UBound(a)
If a(i, 2) = "x" Then
bis = Sheets(a(i, 3)).Range("B2000").End(xlUp).Row + 1
Ab = Application.Match("Themenspeicher", Worksheets(a(i, 3)).Range("B:B"), 0)
If IsError(Application.Match(a(i, 1), Worksheets(a(i, 3)).Range("B" & Ab & ":B" &  _
bis), 0)) Then 'Doppelte Werte werden vermieden
Sheets(a(i, 3)).Range("B" & bis) = a(i, 1)
Sheets(a(i, 3)).Range("C" & bis) = a(i, 4)
Sheets(a(i, 3)).Range("B8:C8").Copy  ' da ist das gleiche Format
Sheets(a(i, 3)).Range("B" & bis).Resize(, 2).PasteSpecial xlFormats
Sheets(a(i, 3)).Range("B" & bis).HorizontalAlignment = xlLeft
Sheets(a(i, 3)).Range("C" & bis).NumberFormat = "dd.mm.yyyy"
End If
End If
Next

Anzeige
AW: If IsError then
08.11.2016 10:45:34
Daniel
Hi
das dürfte daran liegen, dass der Begriff "Themenspeicher" nicht gefunden werden konnte und du hier natürlich den Wert aus der Zelle, ab der gesucht werden soll, einsetzen musst.
Da ich deine Datei nicht kenne, kann ich natürlich nur irdendeinen Dummytext in den Code einsetzen, den du dann noch entsprechend anpassen musst.
Gruß Daniel
Anzeige
Zusatz?
08.11.2016 11:00:40
Berndt
Danke. Hatte einen Schusselfehler drinnen. Habs selber korrigiert und es funktioniert. Danke dafür.
Noch eine kleine Frage:
Mein neuer angepasster Teilbereich im Code lautet
    For i = 1 To UBound(a)
If a(i, 2) = "x" Then
bis = Sheets(a(i, 3)).Range("B2000").End(xlUp).Row + 1
Ab = Application.Match("aus Themenspeicher übertragen", Worksheets(a(i, 3)).Range("B: _
B"), 0)
If IsError(Application.Match(a(i, 1), Worksheets(a(i, 3)).Range("B" & Ab & ":B" &  _
bis), 0)) Then 'Doppelte Werte werden vermieden
Sheets(a(i, 3)).Range("B" & bis) = a(i, 1)
Sheets(a(i, 3)).Range("C" & bis) = a(i, 4)
Sheets(a(i, 3)).Range("B8:C8").Copy  ' da ist das gleiche Format
Sheets(a(i, 3)).Range("B" & bis).Resize(, 2).PasteSpecial xlFormats
Sheets(a(i, 3)).Range("B" & bis).HorizontalAlignment = xlLeft
Sheets(a(i, 3)).Range("C" & bis).NumberFormat = "dd.mm.yyyy"
End If
End If
Next
mit
              Sheets(a(i, 3)).Range("B" & bis) = a(i, 1)
Sheets(a(i, 3)).Range("C" & bis) = a(i, 4)

überträgt es mir Werte in Spalte B und C in Tabelle ThemenSpeicher
mit
              Sheets(a(i, 3)).Range("B8:C8").Copy  ' da ist das gleiche Format
Sheets(a(i, 3)).Range("B" & bis).Resize(, 2).PasteSpecial xlFormats

Wird von weiter oben (B8:C8) der Bereich kopiert um das Format für die neuen Werte in Spalte B un C zu übernehmen.
Was muss ich im letzten Codebereich verändern, um das Format via Makro festzulegen und nicht von einem fixen Bereich zu nehmen?
z.B. Rahmen links/rechts/unten
LB Berndt
Anzeige
AW: Zusatz?
08.11.2016 11:08:01
Daniel
HI
solche Fragen beantwortet man sich in der Regel selbst mit Hilfe des Makrorecorders, in dem man die Formatierungen von Hand durchführt und das mit dem Recorder aufzeichnet.
dann sieht man, wie die entsprechenden Befehle aussehen und kann über F1 auf die Hilfeseite zum jeweiligen befehl kommen (Cursor auf unbekannten Befehl setzen, dann F1 drücken) um zusätzliche Informationen abzurufen.
Dann weiß man, wie die Formatierung zu programmieren ist, bzw kann dann den aufgezeichneten Code entsprechend überarbeiten und die Zellbezüge anpassen.
allerdings würde ich dir empfehlen, hierzu nicht Excel 2007, sondern eine andere Excelversion zu verwenden (2010 oder auch 2003).
In 2007 zeichnet der Recorder nur unvollständig auf (den hat MS wohl nicht rechtzeitig fertig bekommen)
Gruß Daniel
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige

Infobox / Tutorial

Anpassung von VBA-Code zur Fehlerbehandlung mit IsError


Schritt-für-Schritt-Anleitung

Um den VBA-Code anzupassen, damit die IsError-Funktion ab einem bestimmten Spaltenkopf sucht, gehe folgendermaßen vor:

  1. Bestimme die Zeile, in der der Spaltenkopf "Themenspeicher" steht:

    ab = Application.Match("Themenspeicher", Worksheets(a(i, 3)).Range("B:B"), 0)
  2. Verwende die Variable ab, um den Bereich für IsError zu definieren:

    If IsError(Application.Match(a(i, 1), Worksheets(a(i, 3)).Range("B" & ab & ":B" & bis), 0)) Then
  3. Übertrage die Werte in die Zellen B und C:

    Sheets(a(i, 3)).Range("B" & bis) = a(i, 1)
    Sheets(a(i, 3)).Range("C" & bis) = a(i, 4)
  4. Kopiere das Format von B8:C8 (falls nötig):

    Sheets(a(i, 3)).Range("B8:C8").Copy
    Sheets(a(i, 3)).Range("B" & bis).Resize(, 2).PasteSpecial xlFormats
  5. Setze die Zellformatierungen wie gewünscht:

    Sheets(a(i, 3)).Range("B" & bis).HorizontalAlignment = xlLeft
    Sheets(a(i, 3)).Range("C" & bis).NumberFormat = "dd.mm.yyyy"

Häufige Fehler und Lösungen

  • Typenunverträglichkeitsfehler: Dieser Fehler tritt auf, wenn der Wert für ab nicht gefunden wird. Stelle sicher, dass "Themenspeicher" tatsächlich in Spalte B vorhanden ist. Verwende die IsError-Funktion, um dies zu überprüfen:

    If IsError(ab) Then
      MsgBox "Das Wort 'Themenspeicher' wurde nicht gefunden."
    End If
  • Falsche Bereichsdefinition: Achte darauf, dass die Range-Definition korrekt ist. Der Bereich sollte von ab bis bis ohne Fehler verlaufen.


Alternative Methoden

Falls du eine andere Möglichkeit zur Fehlerüberprüfung in VBA bevorzugst, kannst du die IfError-Funktion verwenden, die eine elegantere Lösung für die Fehlerbehandlung in Excel darstellt. Allerdings ist IfError nicht direkt in VBA verfügbar. Stattdessen kannst du die On Error-Anweisung verwenden:

On Error Resume Next
' Dein Code hier
If Err.Number <> 0 Then
    ' Fehlerbehandlung
    MsgBox "Ein Fehler ist aufgetreten."
End If
On Error GoTo 0

Praktische Beispiele

Hier ist ein einfaches Beispiel, wie du die IsError-Funktion in einem VBA-Skript verwenden kannst:

Sub BeispielIsError()
    Dim ab As Long
    Dim bis As Long
    Dim a As Variant
    a = Range("A1:B10").Value ' Beispiel-Daten
    For i = 1 To UBound(a)
        If a(i, 2) = "x" Then
            bis = Sheets("Tabelle1").Range("B2000").End(xlUp).Row + 1
            ab = Application.Match("Themenspeicher", Sheets("Tabelle1").Range("B:B"), 0)
            If Not IsError(ab) Then
                If IsError(Application.Match(a(i, 1), Sheets("Tabelle1").Range("B" & ab & ":B" & bis), 0)) Then
                    Sheets("Tabelle1").Range("B" & bis) = a(i, 1)
                End If
            End If
        End If
    Next
End Sub

Tipps für Profis

  • Verwende den Makro-Recorder: Um herauszufinden, wie bestimmte Formatierungen in VBA umgesetzt werden, kannst du den Makro-Recorder verwenden. So siehst du, welche Befehle Excel im Hintergrund ausführt.

  • Teste deinen Code schrittweise: Füge Debug.Print-Anweisungen hinzu, um Variablenwerte während der Ausführung zu überprüfen und den Fluss des Codes zu verstehen.

  • Nutze Option Explicit: Dies zwingt dich, alle Variablen zu deklarieren, was zu weniger Fehlern führt, insbesondere bei der Verwendung von IsError.


FAQ: Häufige Fragen

1. Was ist der Unterschied zwischen IsError und IfError in Excel? IsError wird in VBA verwendet, um zu prüfen, ob ein Ausdruck einen Fehler zurückgibt, während IfError eine Excel-Funktion ist, die in Formeln verwendet wird, um Fehler abzufangen.

2. Wie kann ich die Zeilenformatierung in VBA festlegen? Du kannst die Formatierung in VBA direkt angeben, indem du Eigenschaften wie Borders, Interior.Color und Font verwendest. Beispiel:

With Sheets("Tabelle1").Range("B" & bis)
    .Borders.LineStyle = xlContinuous
    .Interior.Color = RGB(255, 255, 0) ' Gelb
End With

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige