Microsoft Excel

Herbers Excel/VBA-Archiv

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

Typen unverträglich IF Bedingung


Betrifft: Typen unverträglich IF Bedingung von: Lia
Geschrieben am: 05.01.2018 09:18:33

Hi liebes Forum,

bekomme hier die Fehlermeldung Typen unverträglich.

If .Cells(Zeile, 6).Value = "Ende" And Range("D2:D1000").Value <> "" Then
Liegt das an dem .Cells und Range?

LG,
Lia

  

Betrifft: AW: Typen unverträglich IF Bedingung von: Beverly
Geschrieben am: 05.01.2018 09:24:51

Hi Lia,

es liegt an Range(...).Value <> "" - diesen Ausdruck gibt es nicht.

Du willst feststellen, ob sich in dem Bereich irgendein Eintrag befindet? So sollte es korrekt funktionieren:

If .Cells(Zeile, 6).Value = "Ende" And Application.CountA(Range("D2:D1000").Value) > 0 Then

Den Punkt vor Range benötigst du dann, wenn sich das Range auf das selbe Tabellenblatt wie .Cells bezieht - andernfalls bezieht sich Range auf das aktive Tabellenblatt.


GrußformelBeverly's Excel - Inn


  

Betrifft: AW: Typen unverträglich IF Bedingung von: Lia
Geschrieben am: 05.01.2018 09:31:32

Vielen Dank! Gut zu wissen!! :)
Also ich habe eine If else Bedingung

If .Cells(Zeile, 6).Value = "Ende" And Application.CountA(Range("E2:E1000").Value) 0 Then
   .Rows(Zeile).Delete
Else
MsgBox("Zelle E muss einen Wert haben!")
End if
Habe es eben ausprobiert und trotzdem hat er die Zeile gelöscht :/ (Das Größer Zeichen akzeptiert excel nicht deshalb habe ich es rausgenommen ^^


  

Betrifft: AW: Typen unverträglich IF Bedingung von: Werner
Geschrieben am: 05.01.2018 09:55:40

Hallo Lia,

und weshalb sollte das ">" (natürlich ohne Gänsefüßchen) nicht akzeptiert werden?

Teste diesen Code mal in einer Tabelle. Schreibe irgendeinen Wert in den Bereich von E2-D2000 und schreib Ende in F1 und lass den Code laufen. Zeile habe ich zum Testen einfach mal auf 1 gesetzt.

Es wird Zeile 1 gelöscht, wenn im Bereich E2 bis D2000 irgendeine Zelle einen Wert hat und wenn in F1 Ende steht.

Da die Range und Cells Objekte im Code nicht weiter referenziert sind, bezieht sich alles auf das aktive Blatt.

Public Sub aaa()
Zeile = 1

If Cells(Zeile, 6).Value = "Ende" And Application.CountA(Range("E2:E1000").Value) > 0 Then
   Rows(Zeile).Delete
Else
MsgBox ("Zelle E muss einen Wert haben!")
End If
End Sub
Du hast in deinem Code vor dem ersten Cells einen Punkt (.Cells(Zeile, 6). Steht der Codeteil in einer With... End With Klammer?

Poste mal den ganzen Code. Es bringt nichts immer nur zwei drei Zeilen eines Codes zu posten und zu sagen das geht nicht.

Gruß Werner


  

Betrifft: AW: Typen unverträglich IF Bedingung von: Lia
Geschrieben am: 05.01.2018 10:45:01

Morgen Werner,

das ist der Codeabschnitt wollte einfach mal so eine If Anweisung mit zwei Bedingungen ausprobieren.

Das ist der Code von gestern wollte es einfach nur um eine Abfrage erweitern.

With Tabelle1
    ZeileMax = .UsedRange.Rows.Count
    For Zeile = ZeileMax To 1 Step -1
       If Cells(Zeile, 6).Value = "ende" And Application.CountA(Range("E2:E1000").Value) 0 Then
            .Rows(Zeile).Copy Destination:=Tabelle2.Cells(Rows.Count, 1).End(xlUp).Offset(1)
            .Rows(Zeile).Delete
            n = n + 1
        End If
    Next Zeile
End With
End Sub

Und es tut mir wirklich leid, das ich hier so viel poste, aber ich weiß irgendwie nicht weiter.
Gruß Lia


  

Betrifft: AW: Typen unverträglich IF Bedingung von: Werner
Geschrieben am: 05.01.2018 11:16:48

Hallo Lia,

beschreib doch mal, was du genau machen willst.

Im Moment läuft der Code von der letzten Zeile zur ersten Zeile. In der jeweiligen Zeile wird geprüft, ob in F "ende" steht und ob im Bereich E2 bis E2000 irgendwo ein Eintrag vorhanden ist. Sind beide Bedingungen erfüllt, wird die aktuelle Zeile ins Blatt 2 kopiert und anschließend gelöscht.
Code dazu:

Public Sub Test()
Dim ZeileMax As Long, Zeile As Long

With Tabelle1
    ZeileMax = .UsedRange.Rows.Count
    For Zeile = ZeileMax To 1 Step -1
       If .Cells(Zeile, 6).Value = "ende" And Application.CountA(.Range("E2:E1000")) > 0 Then
            .Rows(Zeile).Copy Destination:=Tabelle2.Cells(Rows.Count, 1).End(xlUp).Offset(1)
            .Rows(Zeile).Delete
        End If
    Next Zeile
End With
End Sub
Ich vermute aber, daß du was ganz anderes erreichen/prüfen willst. Kann es sein, dass du zunächst prüfen willst, ob in der aktuellen Zeile in Spalte F "ende" steht und ob in der gleichen Zeile in Spalte E ein Eintrag vorhanden ist? Wenn ja, dann wird das so nämlich nichts.
Code für die zweite Version:
Public Sub Test()
Dim ZeileMax As Long, Zeile As Long

With Tabelle1
    ZeileMax = .UsedRange.Rows.Count
    For Zeile = ZeileMax To 1 Step -1
       If .Cells(Zeile, 6).Value = "ende" And .Cells(Zeile, 5) <> "" Then
            .Rows(Zeile).Copy Destination:=Tabelle2.Cells(Rows.Count, 1).End(xlUp).Offset(1)
            .Rows(Zeile).Delete
        End If
    Next Zeile
End With
End Sub
Bei deinem geposteten Code fehlte jeweils ein Punkt von Cells (.Cells) und vor Range (.Range).
Zur Erklärung:
Du mußt Excel schon sagen, auf welchem Blatt sich die Range-Objekte (Cells, Range) befinden, die du ansprechen willst. Entweder durch davorstellen des Tabellenblattes
Tabelle1.Range(Tabelle1.Cells(1, 1), .Tabelle1.Cells(1, 4))

Da das aber von der schreibweise her unhandlich ist, kann man sich mit einer With - End With Klammer (wie in deinem Beispiel) behelfen.
Hier muss dann aber zwingend vor jedes Range-Objekt ein Punkt, damit korrekt auf des im With angegebene Tabellenblatt refereniziert wird.
Beispiel von oben mit With:
With Tabelle1
    .Range(.Cells(1, 1), .Cells(1, 4))
End With
Gruß Werner


  

Betrifft: AW: Typen unverträglich IF Bedingung von: Lia
Geschrieben am: 05.01.2018 11:44:50

Super vielen lieben Dank!!

Ich habe auf diesem Blatt auch ein Button und er kopiert mir immer wenn ich die erste Zeile quasi auf "ende" setze, den Button mit. Kann ich das irgendwie verhindern, dass er den button nicht beachtet?

Lg und vielen Dank.
Lia


  

Betrifft: AW: Typen unverträglich IF Bedingung von: Werner
Geschrieben am: 05.01.2018 12:02:59

Hallo Lia,

nimm eine Schaltfläche aus den Formularsteuerelementen (wenn nicht schon geschehen). Dann Rechtsklick auf die Schaltfläche - Steuerelement formatieren - Reiter Eigenschaften - von Zellposition und -größe unabhängig auswählen und fertig.

Gruß Werner


  

Betrifft: AW: Typen unverträglich IF Bedingung von: Lia
Geschrieben am: 05.01.2018 12:25:30

Vielen lieben Dank ! so viele neue hilfreiche Infos Danke,Danke !!!

Gruß Lia


  

Betrifft: Gerne u. Danke für die Rückmeldung. o.w.T. von: Werner
Geschrieben am: 05.01.2018 12:36:20




  

Betrifft: Benutze PasteSpecial von: Beverly
Geschrieben am: 05.01.2018 12:20:09

Hi Lia,

nach diesem Prinzip:

.Rows(Zeile).Copy 
Tabelle2.Cells(Rows.Count, 1).End(xlUp).Offset(1).PasteSpecial Paste:=xlPasteValues

Damit werden nur die Werte kopiert. Falls auch die Formate kopiert werden sollen, ergänze die folgende Zeile:
Tabelle2.Cells(Rows.Count, 1).End(xlUp).Offset(1).PasteSpecial Paste:=xlPasteFormats



GrußformelBeverly's Excel - Inn


Beiträge aus dem Excel-Forum zum Thema "Typen unverträglich IF Bedingung"