Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1300to1304
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

Komplexer Durchlauf von Bereichen

Komplexer Durchlauf von Bereichen
27.02.2013 17:26:01
Bereichen
Hallo an alle,
ich habe folgendes Problem und hoffe, dass ihr mir helfen könnt:
Ich habe einen zusammenhängenden Tabellenbereich mit Daten (z.B. A1:G3).
Aus diesem Bereich möchte ich einzelne kleinere Bereiche markieren (nicht nur einzelne Zellen) die sich eventuell auch in der Zeile überschneiden (z.B. Teilbereich-1 A1:B2 und Teilbereich-2 D2:D3 --- Zeile 2 in beiden Teilbereichen). Als nächstes sollen die Daten aus diesen Bereichen entfernt werden (.clear) und die Zellen mit Daten rechts neben den gelöschten Bereichen sollen nach links verschoben werden, so dass keine Lücke entsteht.
Ich hoffe die Erklärung ist nicht zu verworren. Vielleicht erklärt es ein Bild besser. Dann bitte posten und ich erstelle eins.
Ich habe schon einen meiner Meinung nach guten Code verfasst der auch alles richtig macht nur eins ist nicht nach meinen Wünschen: die Abarbeitung der FOR-EACH-NEXT-Schleife, die ich zum ansprechen der einzelnen Teilbereiche verwende, verläuft in der Reihenfolge, in der ich die Markierung getätigt habe. Wenn sich Bereiche in Zeilen überschneiden (wie oben beschrieben), darf der Teilbereich mit "geringerer" Spaltennummer nicht zuerst abgearbeitet werden, da sonst im zweiten Bereich die Daten verschoben sind (durch das Vorrücken um keine Lücke zu haben) und dann falsche Daten gelöscht werden.
Wenn da jemand Rat weiß, wäre ich sehr dankbar.
Im Prinzip muss in meinem komplexen Code irgendwo noch hinein, dass er mit der höchsten Spaltennummer zuerst beginnen muss und dann rückwärts gehen.
Aber langsam weiß ich keinen Rat mehr. Wenn nötig setze ich den Code auch rein, aber ich möchte nicht vorher andere Ideen beeinflussen.
Meine Notlösung wäre, erstmal die Bereiche zu löschen und anschließend nochmal durchlaufen und die Daten von rechts nach links verschieben. Schön wäre es aber in einem Abwasch.
Vielen Dank schonmal im Voraus
Euer fleißiger Leser Chris

30
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Komplexer Durchlauf von Bereichen
27.02.2013 17:31:00
Bereichen
HAllo
Ich habe schon einen meiner Meinung nach guten Code verfasst der auch alles richtig macht nur eins ist nicht nach meinen Wünschen: die Abarbeitung der FOR-EACH-NEXT-Schleife, die ich zum ansprechen der einzelnen Teilbereiche verwende, verläuft in der Reihenfolge, in der ich die Markierung getätigt habe.
Ich habs nicht verstanden.
Zeigst du uns mal den Code ?
Ich glaube dann wirds etwas klarer...
ransi

AW: Komplexer Durchlauf von Bereichen
27.02.2013 17:48:02
Bereichen
Code dafür ist wie folgt:
Dim Act As Range
Dim Erste_Spalte As Long
Dim Letzte_Spalte As Long
Dim Anzahl_Spalten As Long
Dim Erste_Zeile As Long
Dim Letzte_Zeile As Long
Dim Erste_Zeile_Check As Long
Dim Letzte_Zeile_Check As Long
Dim b As Integer
Dim c As Integer
Dim bb As Integer
For Each Act In Selection.Areas
Erste_Spalte = Act.Column
Letzte_Spalte = Act.Column + Act.Columns.Count - 1
Anzahl_Spalten = Act.Columns.Count
'nachfolgende Prüfung (gerade oder ungerade Zeile) ist nicht relevant für mein Problem
Erste_Zeile_Check = Act.Row
Letzte_Zeile_Check = Act.Row + Act.Rows.Count - 1
If Erste_Zeile_Check Mod 2  0 Then
Erste_Zeile = Act.Row - 1
Else
Erste_Zeile = Act.Row
End If
If Letzte_Zeile_Check Mod 2 = 0 Then
Letzte_Zeile = Act.Row + Act.Rows.Count '-1 und +1
Else
Letzte_Zeile = Act.Row + Act.Rows.Count - 1
End If
'Prüfung Ende
b = Erste_Zeile - 1
Act.Clear
If Erste_Zeile Mod 2  0 Then
'Zellen über Teilbereich=>Clear
Range(Cells(Erste_Zeile, Erste_Spalte), Cells(Erste_Zeile, Letzte_Spalte)).Clear
End If
If Letzte_Zeile Mod 2 = 0 Then
'Zellen unter Teilbereich=>Clear
Range(Cells(Letzte_Zeile, Erste_Spalte), Cells(Letzte_Zeile, Letzte_Spalte)).Clear
End If
'Definition vom Ende des Zeilendurchlaufs eines Teilbereichs
If Letzte_Zeile_Check Mod 2  0 Then
bb = Act.Row + Act.Rows.Count - 1
Else
bb = Act.Row + Act.Rows.Count
End If
'Ende Definition
'Beginn Zeilendurchlauf eines Teilbereichs
Do
b = b + 1
'Prüfung ob Zelle rechts daneben der Letzten Spalte des Teilbereichs Daten enthält
If Cells(b, Letzte_Spalte + 1)  "" Then
c = Letzte_Spalte
'Datensätze von rechts nach links übernehmen (Datensatz für Datensatz)
Do
c = c + 1
Cells(b, c - Anzahl_Spalten) = Cells(b, c)
Loop Until Cells(b, c) = ""
'übernommene Datensätze aus alter Zelle entfernen
Range(Cells(b, c - Anzahl_Spalten), Cells(b, c - 1)).Clear
End If
Loop Until b = bb 'Act.Row + Act.Rows.Count - 1
Next Act

Anzeige
Selection.Delete Shift:=xlShiftToLeft ?
27.02.2013 17:54:39
ransi
HAllo
Ich glaube du stehst dir selber im Weg ;-)
Statt deinem ganzen Code reicht evtl. auch schon sowas ?
Selection.Delete Shift:=xlShiftToLeft

Nach welchem Kriterium sollen die Zellen denn gelöscht werden ?
ransi

AW: Selection.Delete Shift:=xlShiftToLeft ?
27.02.2013 18:13:40
Chris
HAHAHAHAHA ich musste gerade lachen...über mich natürlich...uff...ja wie recht Du hast, meiner Überlegung nach müsste das vollkommen reichen...oh man ;) das kommt vom vielen coden, meine Birne ist schon ganz weich ;) jetzt muss ich nur noch zusehen, dass ich das mit meiner Prüfung ob gerade und ungerade vereint kriege.
Vielen Dank ransi, ich sah den Wald vor lauter Bäumen nicht.
Ach so, es gibt kein Kriterium. Die Zellen die markiert sind sollen gelöscht werden. Dann Werte von rechts nach links holen. Und da die Datensätze nur in Kombination erhalten bleiben sollen, ist die Prüfung da (gerade oder ungerade) denn ein Datensatz besteht aus dem Wert in der geraden Zeile und dem dazugehörigen Wert in der nachfolgenden ungeraden Zeile. Markiere ich nur eine Zeile (z.B. die ungerade) dann soll er die Werte die dazu gehören (in dem Beispiel der geraden Zeile darüber) auch mit entfernen.
Ich werde es gleich testen. Freue mich schon auf den Erfolg :)

Anzeige
AW: Selection.Delete Shift:=xlShiftToLeft ?
27.02.2013 22:25:49
Chris
...hmm, dass es klappt habe ich ja schon vermutet. Doch unklar bleibt, wie ich es schaffe, dass Zellen von Wertepaaren automatisch mit gelöscht werden, wenn ich eine Zelle vom Wertepaar lösche.
Konkret: in Zeile 2 werden Uhrzeiten aufgezeichnet. Zu jeder Uhrzeit wird in Zeile 3 ein Wert aufgezeichnet. Wenn vom Anwender nur a) die Uhrzeit oder nur b) der Wert zum löschen markiert wird, soll das automatisch erkannt werden und die zugehörige Zelle (mit a) Wert, b) Uhrzeit) mit gelöscht werden.
Da ich das Markieren mehrerer Bereiche nicht unterbinden möchte, fällt mir hierfür nur die FOR EACH Bereich in Selection.Areas NEXT Bereich Methode ein mit Bereich as Range, aber die erzeugt anfängliches Problem :(

Anzeige
Die Reihenfolge in For Each kann man ...
28.02.2013 12:24:20
Luc:-?
…aber nicht steuern, Chris,
nur ggf durch Überspringen und später Wiederholen beeinflussen.
Gruß Luc :-?

AW: Die Reihenfolge in For Each kann man ...
28.02.2013 12:48:25
Chris
Ok, dann muss ich umdenken. Es gibt ja schließlich imemr eine Lösung ;) wie wäre es mit selektieren von Zellen? Ich habe da eine Idee (ich weiß selektieren ist oft nicht nötig, in meinemspeziellen Fall denke ich schon, da ich anschließend mit selection.delete xlshifttoleft keine Probleme beim nach links verschieben bekomme.
Meine Idee:
Die einzelnen Bereiche durchlaufen (for-each-next) und jeden Bereich wenn nötig (if-else) um die gewünschten Zellen erweitern. Anschließend alle Bereiche selektieren und mit selection.delete xlshifttoleft löschen. Problem dabei: die Zahl der Bereiche variiert, somit ist mir das Selektieren aller Bereiche dann unklar und auch das Übergeben der Bereiche an eine Variable (da die Anzahl ja variiert). Ich bin noch sehr am knobeln. Für Hilfe bin ich sehr dankbar.
Gruß Chris

Anzeige
Union(rngtoDelete, Zelle, Zelle.Offset(1, 0))
28.02.2013 17:26:43
ransi
HAllo Chris
Ich glaube ich habs verstanden....
Teste mal dies:
' **********************************************************************
' Modul: Tabelle1 Typ: Element der Mappe(Sheet, Workbook, ...)
' **********************************************************************

Option Explicit


Public Sub machs()
    Dim rngtoDelete As Range
    Dim Zelle As Range
    For Each Zelle In Selection.Cells
        If rngtoDelete Is Nothing Then
            If Zelle.Row Mod 2 = 0 Then
                Set rngtoDelete = Union(Zelle, Zelle.Offset(1, 0))
                Else:
                Set rngtoDelete = Union(Zelle, Zelle.Offset(-1, 0))
            End If
            Else:
            If Zelle.Row Mod 2 = 0 Then
                Set rngtoDelete = Union(rngtoDelete, Zelle, Zelle.Offset(1, 0))
                Else:
                Set rngtoDelete = Union(rngtoDelete, Zelle, Zelle.Offset(-1, 0))
            End If
        End If
    Next
    'rngtoDelete.Font.Color = vbRed
    rngtoDelete.Delete shift:=xlShiftToLeft
End Sub


ransi

Anzeige
AW: Union(rngtoDelete, Zelle, Zelle.Offset(1, 0))
28.02.2013 18:18:53
Chris
WOW!
Ich danke Dir vielmals!
(In der Zeit hatte ich mir eine Notlösung erschaffen über Hilfszellen, funktioniert auch aber stellt mich nicht zufrieden, da Kombination aus VBA und EXCEL-Formeln. Hätte die EXCEL-Formeln der Hilfszellen noch umschreiben müssen ins VBA und damit Hilfsvariablen erstellen müssen. Mit Union wollte ich auch anfangen, aber da fehlte mir das nötige Know-How, da vorhin das erste Mal davon gelesen.)
Ich habe die Zellen mit deinem Code erstmal rot markieren lassen und was soll ich sagen... SUPER :) es klappt in allen Variationen auch wenn ein Bereich nur eine Zelle hat. Wunderbar. Jetzt muss ich mir nur noch die Syntax durchdenken und verstehen. Ich habe mir das Grundwissen aus Schule und Studium angeeignet und alles Weitere im immer fortwährenden Selbststudium. Somit bleibt mir manchmal eine Tür verschlossen. Zum Beispiel: hinter ELSE schriebst du einen ":". Was ist der Unterschied zwischen "ELSE" ohne und "ELSE:" mit Doppelpunkt?
Muss gleich zum Sport. Schaue gegen 23 Uhr nochmal rein.
Danke nochmal vielmals für Deine Mühe ransi :)
Gruß Chris

Anzeige
AW: Union(rngtoDelete, Zelle, Zelle.Offset(1, 0))
28.02.2013 18:56:37
ransi
Hallo Chris
If Zelle.Row Mod 2 = 0 Then 'grade Zeile
    'Zelle.Offset(1, 0) ist die Zelle unter Zelle
    Set rngtoDelete = Union(rngtoDelete, Zelle, Zelle.Offset(1, 0)) 'pack Zelle und die Zelle unter Zelle in rngToDelete
    Else: 'ungrade Zeile
    'Zelle.Offset(-1, 0) ist die Zelle über Zelle
    Set rngtoDelete = Union(rngtoDelete, Zelle, Zelle.Offset(-1, 0)) 'pack Zelle und die Zelle über Zelle in rngToDelete
End If

Was ist der Unterschied zwischen "ELSE" ohne und "ELSE:" mit Doppelpunkt?
Das ist einfach.
Der Unterschied ist nur der Doppelpunkt.
;-)
ransi

Anzeige
Scherzkeks! ;-)
28.02.2013 19:43:16
Luc:-?
Ransi, lass ihn doch nicht „dumm sterben“! ;-)
Hier stimmt's natürlich mit dem :, aber eigentlich ist er (in VBA, sonst oft ;) ein Trennzeichen zwischen Anweisungssätzen, die man so auch in eine Zeile schreiben kann. Er wäre hier also nicht unbedingt erforderlich, es sei denn, du wolltest anschließend gleich das Set … folgen lassen, Chris.
Gruß Luc :-?

(: Dankeschön :)
28.02.2013 23:21:52
Chris
Danke an euch beide :)
Ok, Luc, also ":" bei anschließender Anweisung in selber Zeile wie ELSE. Und in diesem Fall dann unnötig. Logisch. Ist in graue (Hirn-)Zelle Nr. 1739 gespeichert ;) Danke, das erklärt einiges.
So, und mit deinem Code, ransi, erklärt sich mir auch die Union-Methode und wie ich Offset anwende. Das fehlte mir noch in meinem "Wortschatz". :) Wunderbar. Und schön schlank der Code :)
Top! Danke! :)
Gruß Chris

Anzeige
AW: Union(rngtoDelete, Zelle, Zelle.Offset(1, 0))
01.03.2013 16:35:25
Chris
Und nochmal hallo...
Verstehe ich es richtig, dass das Objekt rngtoDelete nach dem Durchlauf des Makros wieder auf automatisch nothing gesetzt wird? Ich lernte damals mal, dass Variablen den zuletzt zugewiesenen Wert beibehalten. Wie ist das hier?
Chris

Variablen behalten in VBA nicht automatisch ...
01.03.2013 19:21:27
Luc:-?
…den zuletzt zugewiesenen Wert, Chris,
es sei denn, es handelte sich um globale oder als Static deklarierte. Allerdings könnten Objektvariablen hier eine Ausnahme bilden, da streiten sich die Geister. Schaden kann's jedenfalls nicht, sie am PgmEnde auf Nothing zu setzen. Unnötig ist das jedenfalls bei Objekt-Laufvariablen (von For Each-Zyklen). Die wdn nach Abarbeitung des ganzen Zyklus automatisch Nothing gesetzt. Mit anderen Worten, wird der (un-)absichtlich abgebrochen, behalten sie ihre Referenz. Das kann man auch zur Überprüfung einsetzen, ob ein Zyklus vorzeitig verlassen wurde, d.h., ein evtl Exit For wirksam wurde.
SchöWE, Gruß Luc :-?

Anzeige
Danke, und...
01.03.2013 20:41:19
Chris
...Vielen Dank für die einleuchtende Erklärung.
Besteht auch die Möglichkeit, das Makro rückgängig zu machen? Also falls der Anwender Zellen markierte, die doch nicht gelöscht werden sollen (soll auch nur einmal für die zuletzt gelöschten Zellen wirken). Ich müsste ja im Prinzip einen Code schreiben, der das alles rückgängig macht und vorher das was gelöscht wird erfassen und zwischenspeichern.
Das scheint mir recht kompliziert. Gibts da auch einen einfacheren Weg?
Chris

Nein, idR nicht! Das müsstest du ...
01.03.2013 21:17:35
Luc:-?
…wirklich so machen, Chris.
Luc :-?

arrTmp=bereich:code:bereich=arrTmp
02.03.2013 09:31:19
ransi
Hallo Chris
DAs scheint kompliziert, ist es aber nicht.
Wenn es nur um die Werte geht wirds einfach.
Schau es dir mal an und teste:
' **********************************************************************
' Modul: Tabelle2 Typ: Element der Mappe(Sheet, Workbook, ...)
' **********************************************************************

Option Explicit


Public Sub machs()
    Dim rngtoDelete As Range
    Dim Zelle As Range
    Dim Bereich As Range
    Dim arrTmp As Variant
    Set Bereich = Range("A1:F1000") 'Bereich mit den relevanten Zellen. Anpassen.
    arrTmp = Bereich 'Werte zwischenspeichern
    For Each Zelle In Intersect(Bereich, Selection.Cells)
        If rngtoDelete Is Nothing Then
            If Zelle.Row Mod 2 = 0 Then
                Set rngtoDelete = Union(Zelle, Zelle.Offset(1, 0))
                Else:
                Set rngtoDelete = Union(Zelle, Zelle.Offset(-1, 0))
            End If
            Else:
            If Zelle.Row Mod 2 = 0 Then
                Set rngtoDelete = Union(rngtoDelete, Zelle, Zelle.Offset(1, 0))
                Else:
                Set rngtoDelete = Union(rngtoDelete, Zelle, Zelle.Offset(-1, 0))
            End If
        End If
    Next
    'rngtoDelete.Font.Color = vbRed
    rngtoDelete.Delete shift:=xlShiftToLeft
    If MsgBox("Rückgängig ?", vbYesNo) = vbYes Then
        Bereich = arrTmp
    Else
        MsgBox "Rückgängig jetzt nicht mehr möglich"
    End If
End Sub


ransi

AW: arrTmp=bereich:code:bereich=arrTmp
02.03.2013 09:37:03
ransi
HAllo
So ists besser:
Option Explicit


Public Sub machs()
    Dim rngtoDelete As Range
    Dim Zelle As Range
    Dim Bereich As Range
    Dim arrTmp As Variant
    Set Bereich = Range("A1:F1000") 'Bereich mit den relevanten Zellen. Anpassen.
    arrTmp = Bereich 'Werte zwischenspeichern
    If Not Intersect(Bereich, Selection.Cells) Is Nothing Then 'Es gibt selektierte Zellen in Bereich
        For Each Zelle In Intersect(Bereich, Selection.Cells)
            If rngtoDelete Is Nothing Then
                If Zelle.Row Mod 2 = 0 Then
                    Set rngtoDelete = Union(Zelle, Zelle.Offset(1, 0))
                    Else:
                    Set rngtoDelete = Union(Zelle, Zelle.Offset(-1, 0))
                End If
                Else:
                If Zelle.Row Mod 2 = 0 Then
                    Set rngtoDelete = Union(rngtoDelete, Zelle, Zelle.Offset(1, 0))
                    Else:
                    Set rngtoDelete = Union(rngtoDelete, Zelle, Zelle.Offset(-1, 0))
                End If
            End If
        Next
        'rngtoDelete.Font.Color = vbRed
        rngtoDelete.Delete shift:=xlShiftToLeft
        If MsgBox("Rückgängig ?", vbYesNo) = vbYes Then
            Bereich = arrTmp
        Else
            MsgBox "Rückgängig jetzt nicht mehr möglich"
        End If
    End If
End Sub



ransi

AW: arrTmp=bereich:code:bereich=arrTmp
02.03.2013 19:19:51
Chris
Hey danke wiedermal euch beiden,
ich hatte schon angefangen mir für 'jede gelöschte Zelle separat zwischenspeichern' was zu basteln. Dein Weg, ransi, ist natürlich clever einfach den ganzen Bereich zwischenzuspeichern. Leider möchte ich auch noch die Formate mit übernehmen. Ich probiere da gleich mal was. Liege ich richtig mit Bereich.Copy und PasteSpecial Paste:=xlFormats?
Ansonsten habe ich das "Löschen rückgängig" jetzt auf einen separaten Button gelegt und die Variablen Bereich und arrTmp als globale Variablen. Also das klappt so wunderbar. THUMBSUP!
Gruß
Chris

...copy ist nicht so gut...
02.03.2013 20:21:34
Chris
...da nicht gesichert ist, dass das Kopierte nicht aus dem Zwischenspeicher fällt. Oder kann ich die unterschiedlichen Zell-Formatierungen eines range auch auf eine Variable legen?
Gruß
Chris

Sicher, sind ja auch nur Werte, ...
02.03.2013 23:11:03
Luc:-?
…Chris,
aber denk' dran, dass sie im Falle eines Falles auch identifizierbar u.den Objekten zuordenbar sein müssen.
Gruß + schöSo, Luc :-?

Ok, aber wie?
03.03.2013 09:57:12
Chris
Ok danke,
doch wie lege ich die unterschiedlichen Formatierungen der Zellen eines range auf eine Variable? Wohlgemerkt, dass jede Zelle eine eigene Formatierung hat (InteriorColor, Border, Font, ...), der Bereich aber relativ groß sein kann (vielleicht bis zu 7500 Zellen). Es klappt leider nicht, wie ich es mir vorstelle. Da ich nicht weiß, wie ich die Formatierungen eines range auf eine Variable legen kann (Variablentyp etc.), fällt mir nur der Zwischenweg mit einem Hilfsblatt ein aber das ist geschludert... :( Hast Du einen Rat für mich?
Vielen Dank schonmal im Voraus
Gruß
Chris

Wie lange soll 'Rückgängig' denn ...
03.03.2013 19:07:53
Luc:-?
…machbar sein, Chris?
Auch noch 3 Tage später?! Das wäre ja wohl weder üblich noch notwendig! Was hindert dich denn daran, die einzelnen Formatierungswerte in x-beliebige Variablen zu speichern, solange sie gebraucht wdn? Du solltest nur wissen, in welcher was steht. Das wirst du doch wohl hinbekommen, wenn du schon so etwas vorhast?! ;->
Gruß Luc :-?

Jede Zelle abfragen...?
04.03.2013 17:16:56
Chris
Hallo Luc,
danke Dir.
Rückgängig soll nur solange möglich sein, bis ein neuer Wert eingetragen wurde bzw. die Mappe geschlossen wird (das kriege ich ja hin). Mit .copy wird es ja nur in den Zwischenspeicher gelegt und sobald ich z.B. manuell eine Zellfarbe ändere fliegt das raus. Das darf nicht sein. Ich merke jetzt aber auch, dass mir damals wirklich nur Grundwissen vermittelt wurde :( Ich habe gedacht, man kann die einzelnen Formatierung eines Bereichs auf eine Variable legen also z.B. alle Rahmen im Bereich auf nur EINE Variable und alle Farben im Bereich auf EINE andere Variable oder alle Formatierungen auf EINE Variable. Leider klappte das nicht wie gedacht und mittlerweile glaube ich geht das auch gar nicht(?).
Ich frage jetzt mit for-each jede Zelle des Bereichs ab und speichere separat in Lauf-Variablen alle Formatierungen. Farbe(1) für Zelle 1 etc. bis letzte Zelle. Meinst du es so, Luc? (Ich dachte, es geht vielleicht einfacher/schneller, weil die Menge an Zellen sehr groß werden kann). Mitunter können da schon um die 3000 Zellen abgefragt werden. Das dauert natürlich ebenso wie das Rückführen der Formatierungen nachdem rückgängig geklickt wurde. Ich glaube von der Abarbeitung schneller geht es mit einem separaten sheet, auf dem ich den ganzen Bereich zwischenspeichere und was für den Endanwender unzugänglich ist... Na ich grüble noch etwas...vllt nur die Zeilen auslesen, die die Markierungen zum löschen enthalten bzw. den range von erste Zeile der geteilten Markierung bis letzte Zeile der geteilten Markierung. Ich arbeite noch an einer eleganten Lösung dafür.
Gruß
Chris

Ja, hatte ich! Viel Erfolg! Gruß owT
04.03.2013 18:11:30
Luc:-?
:-?

Danke, den hatte ich
06.03.2013 11:50:05
Chris
Ok und danke hab erstmal alles hinbekommen wie ich es mir vorgestellt habe. Danke für eure Hilfe dabei, ohne die hätte es nicht geklappt.
Gruß
Chris

AW: Union(rngtoDelete, Zelle, Zelle.Offset(1, 0))
01.03.2013 13:08:09
Chris
Hallo ransi,
kannst Du mir noch kurz erklären, warum Du den ersten IF-Block gesetzte hast?

If rngtoDelete Is Nothing Then
End If

Danke schon mal im Voraus
Gruß Chris

AW: Union(rngtoDelete, Zelle, Zelle.Offset(1, 0))
01.03.2013 13:23:31
ransi
HAllo Chris
For Each Zelle In Selection.Cells
Bei der ersten Zelle ist rngToDelete noch nothing.
Wenn du das nicht abfängtst, würde der Code hier:
Set rngtoDelete = Union(rngtoDelete, Zelle, Zelle.Offset(1, 0))
in einen Fehler laufen.
Bilde eine Range aus (nothing, Zelle, Zelle.Offset(1, 0)) kann nicht funktionieren.
ransi

jo
01.03.2013 13:43:16
Chris
Ja, hab deine Antwort erst nach meiner gelesen. Alles klar. Ist ja der erste Wert. Hatte das in meiner Notlösung ähnlich abgefangen. Stand etwas auf der Leitung beim durchdenken ;)
Chris

alles klar...
01.03.2013 13:38:58
Chris
...habs mir eben selbst beantworten können. Ist alles klar.
Ich stand da wohl auf der Leitung ;)
Gruß Chris

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige