Registriert seit: 09.05.2015
Version(en): 2013, Office 365
01.12.2018, 17:21
(Dieser Beitrag wurde zuletzt bearbeitet: 01.12.2018, 17:22 von sharky51.)
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.
Registriert seit: 11.03.2015
Version(en): mittlerweile meistens 2019
Hallo,
ich weiß ja nicht, was Du bezwecken willst, aber lass mal das .Address weg!
Gruß Michael
Registriert seit: 09.05.2015
Version(en): 2013, Office 365
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?
00202
Nicht registrierter Gast
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
Folgende(r) 1 Nutzer sagt Danke an Gast für diesen Beitrag:1 Nutzer sagt Danke an Gast für diesen Beitrag 28
• sharky51
Registriert seit: 09.05.2015
Version(en): 2013, Office 365
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?
00202
Nicht registrierter Gast
Hallo, :19:
warum musst Du es denn in einer Schleife machen? :21:
Registriert seit: 09.05.2015
Version(en): 2013, Office 365
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.
00202
Nicht registrierter Gast
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)...
Folgende(r) 1 Nutzer sagt Danke an Gast für diesen Beitrag:1 Nutzer sagt Danke an Gast für diesen Beitrag 28
• sharky51
Registriert seit: 09.05.2015
Version(en): 2013, Office 365
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.
00202
Nicht registrierter Gast
(03.12.2018, 11: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
Folgende(r) 1 Nutzer sagt Danke an Gast für diesen Beitrag:1 Nutzer sagt Danke an Gast für diesen Beitrag 28
• sharky51
|