Clever-Excel-Forum

Normale Version: Excel vba: Zusammenfassen von Zellen
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
Hallo zusammen,

bräuchte mal wieder Eure Hilfe.

Wie kann ich folgende Code vereinfachen:
Und zwar möchte ich die Zellen 260 - 290 in einem Aufwasch beschreiben- die Spalten der Zellen liegen nicht nebeneinander.

Code:
240 With Worksheets("Serien_Termine_Privat")
250 .Cells(lngRow, colOLentryID).Value = "Der Termin / die Termin_Serie wurde gelöscht"
260 .Cells(lngRow, colDelRaster).Value = ""
270 .Cells(lngRow, colTermSerialStart).Value = ""
280 .Cells(lngRow, colTermSerialEnd).Value = ""
290 .Cells(lngRow, colSelectRaster).Value = ""
300 End With

Ein Versuch mit
Code:
Dim aRng As Range: Set aRng = .Cells(lngRow, colDelRaster).Address
Dim bRng As Range: Set bRng = .Cells(lngRow, colTermSerialStart).Address
Dim cRng As Range: Set cRng = .Cells(lngRow, colTermSerialEnd).Address
Dim dRng As Range: Set dRng = .Cells(lngRow, colSelectRaster).Address
           
Dim uRng As Range: Set uRng = Union(aRng, bRng, cRng, dRng)

funktioniert leider nicht.

Könnt Ihr mir bitte einen Tipp geben.
Hallo,

ich weiß ja nicht, was Du bezwecken willst, aber lass mal das .Address weg!
Guten morgen Michael,

ich möchte einfach verschiedene Werte auf einen Rutsch überschreiben ohne dass jedes Mal das "Sub Worksheet_Change(ByVal Target As Range)" - Event ausgelöst wird, das ich halt im Ablauf des Makros benötige.
Will einfach die Zelladressen zusammensammeln. Wenn ich Address weg lasse bekomme ich ja die Werte der Zellen, oder?

Vielleicht gibt es noch eine Lösung?
Hallo, :19:

Wenn Du ein "Private Sub Worksheet_Change(ByVal Target As Range)" in deiner Datei hast und Du machst Schreib/Kopier/Löschaktionen, dann musst Du die Events ausschalten!

Events Aus- Einschalten...

Also so der Spur nach: :21:


Code:
Option Explicit
Public Sub Main()
    On Error GoTo Fin
    Application.EnableEvents = False
    Range("C260:C290,E260:E290,G260:G290,I260:I290").ClearContents
    Range("B260:B290").Value = "Der Termin / die Termin_Serie wurde gelöscht"
Fin:
    Application.EnableEvents = True
End Sub
Hallo Case,

ja das ist mir schon bewusst und das mache ich auch.

Aber selbst wenn die Events ausgeschaltet sind benötigt doch jeder Überschreibvorgang Zeit.
Deshalb will ich ja die zu überschreibenden Zellen zusammenfassen.
Du gibst in Deinem Beispiel die Zellbereiche direkt an.
Das geht bei mir nicht denn ich spreche die Zellen in einer Schleife für die Zeile mit "lngRow" und mit einer Spaltenkonstante z.B. "colDelRaster" an.

Wie bekomme ich abgeleitet von Deinem Beispiel:
Code:
Range("C260:C290,E260:E290,G260:G290,I260:I290").ClearContents

das Ganze mit die genannten Variablen/Konstanten hin?
Hallo, :19:

warum musst Du es denn in einer Schleife machen? :21:
Hallo,

weil ich eine lange Liste mit Terminen abarbeiten muss wo diese einzelnen Zellen in der Liste dann gelöscht werden müssen. Gibt es denn eine andere/einfachere Lösung?

Der Hintergrund ist, in einer Tabelle sind zig Termine eingetragen die ich dann per Makro in einen Outlook-Kalender übertrage. Das Schreiben bzw. Löschen über Excel-vba bei Outlook-Terminen dauer eh schon elend lange - und da hatte ich gedacht ich versuche einige Aktionen etwas zusammenzufassen.
Hallo, :19:

also die Bremse ist hier eher das eintragen bzw. löschen der Termine.

Wenn Du die Termine einträgst kannst Du gleich die EntryID bzw. StoreID abfragen. Wenn Du dann einen Eintrag löschen willst, kannst du ihn direkt ansprechen und musst nicht mit einer Schleife alles durchgehen. Das bringt Geschwindigkeit. :21:

EntryID - StoreID...

Um mehrere Zellen zu löschen kannst Du z. B. mit der "SpecialCells-Methode" arbeiten. Das kommt aber immer auf deinen Programmablauf bzw. den Tabellenblattaufbau an. :21:

Range.SpecialCells-Methode (Excel)...
Guten Morgen,
vielen Dank für die Rückmeldung.

Ich frage ja die EntryID ab. Aber ich habe mir einen Spezialfall für Jahrestermine gebastelt. Ist ein wenig umständlich zu erklären.
Jahrestermine angelegt mit OutPattern.RecurrenceType = olRecursYearly laufen ja ewig - keine Ahnung wie lange. Das habe ich versucht zeitlich einzuschränken.
Ich gebe einen definierten Jahreszeitraum vor z.B. 5 Jahre vor. Jetzt gibt es natürlich nicht nur eine EntryID für die Serie sondern 5 verschiedene. Diese schreibe ich dann in eine zweite Tabelle mit allen zugehörigen Daten wie Anfangs- Enddatum, Terminserie = 5 usw.
D.h. die Abfrage nach der EntryID löscht dann nur den einen betreffenden Termin und nicht die ganze Terminserie. Wenn dieser eine Termin dann gelöscht wird, sollen halt auch alle zugehörigen Daten in den Zellen gelöscht werden. Deshalb möchte ich auch nur wissen wie ich 4-6 nicht aufeinanderfolgende Einzelzellen zusammenfassen kann um diese auf einen Sitz zu löschen (leeren).
Das ist eigentlich alles.

Ich habe mir das mal mit der mit der "SpecialCells-Methode" angeschaut.
Da muss ich ja auch einen Bereich definieren und dann wird alles weggeputzt was dort per Definition drin steht.
Es sollen aber immer nur in der abzuarbeitenden Schleife innerhalb einer Zeile Zellen mit Text und Zahlen und Datumsangaben gelöscht werden.
(03.12.2018, 10:12)sharky51 schrieb: [ -> ]Es sollen aber immer nur in der abzuarbeitenden Schleife innerhalb einer Zeile Zellen mit Text und Zahlen und Datumsangaben gelöscht werden.

Hallo, :19:

dann so: :21:

Code:
Union(.Cells(lngRow, colDelRaster), .Cells(lngRow, colTermSerialStart), .Cells(lngRow, colTermSerialEnd), .Cells(lngRow, colSelectRaster)) = ""

Oder:

Code:
Union(.Cells(lngRow, colDelRaster), .Cells(lngRow, colTermSerialStart), .Cells(lngRow, colTermSerialEnd), .Cells(lngRow, colSelectRaster)).ClearContents
Seiten: 1 2