Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Excel vba: Zusammenfassen von Zellen
#1
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.
Mit freundlichen Grüßen / Best regards
                          //
----------o00o---°(_)°---o00o----------------------

Erich
Antworten Top
#2
Hallo,

ich weiß ja nicht, was Du bezwecken willst, aber lass mal das .Address weg!
Gruß
Michael
[-] Folgende(r) 1 Nutzer sagt Danke an Der Steuerfuzzi für diesen Beitrag:
  • sharky51
Antworten Top
#3
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?
Mit freundlichen Grüßen / Best regards
                          //
----------o00o---°(_)°---o00o----------------------

Erich
Antworten Top
#4
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
________
Servus
Case
[-] Folgende(r) 1 Nutzer sagt Danke an Case für diesen Beitrag:
  • sharky51
Antworten Top
#5
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?
Mit freundlichen Grüßen / Best regards
                          //
----------o00o---°(_)°---o00o----------------------

Erich
Antworten Top
#6
Hallo, :19:

warum musst Du es denn in einer Schleife machen? :21:
________
Servus
Case
Antworten Top
#7
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.
Mit freundlichen Grüßen / Best regards
                          //
----------o00o---°(_)°---o00o----------------------

Erich
Antworten Top
#8
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)...
________
Servus
Case
[-] Folgende(r) 1 Nutzer sagt Danke an Case für diesen Beitrag:
  • sharky51
Antworten Top
#9
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.
Mit freundlichen Grüßen / Best regards
                          //
----------o00o---°(_)°---o00o----------------------

Erich
Antworten Top
#10
(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
________
Servus
Case
[-] Folgende(r) 1 Nutzer sagt Danke an Case für diesen Beitrag:
  • sharky51
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste