Worksheet_Change und Copy&Paste
#1
Hallo liebe Community,

ich habe ein für mich nicht nachvollziehbares Problem.
Im Worksheet Start befindet sich ein Worksheet_Change Befehl der da sagt:

Code:
   If target.Address = "$C$13" Or target.Address = "$C$14" Or target.Address = "$C$15" Or target.Address = "$C$16" Then
       Call Haken3
       Call ReFormatierung

Also, wenn sich eine Zelle C13-C16 ändert, dann sollen die Makros Haken3 und Reformiertung abgerufen werden. Soweit so gut.

Nun das Makro Reformatierung:

Code:
' Formatiert die Felder C14-C16, falls sie geändert wurden (z.B. beim Einfügen)
Sub ReFormatierung()
   Application.CutCopyMode = False
   'Bildschirmaktualisierung aus
   Application.ScreenUpdating = False
   
   With ThisWorkbook.Worksheets("Start").Range("C14:C16")
   .ClearFormats
   .Select
   .HorizontalAlignment = xlLeft
   .Interior.ColorIndex = "6"
   End With
   
   With Selection.Font
       .Size = 11
       .FontStyle = "Calibri"
       .ColorIndex = 1
   End With
   Application.CutCopyMode = False
   Range("C14").NumberFormat = "@"
   Range("C15").NumberFormat = "dd.mm.yy"
   'Range("C16").NumberFormat = "General"
   
   Application.CutCopyMode = False
   
   'Bildschirmaktualisierung ein
   Application.ScreenUpdating = True
   
End Sub

Das Makro funktioniert wunderbar wenn ich es mit F8 oder von Hand Werte in den Zellen C13-C16 ändere.
Die Krux ist:
Arbeite ich über Copy&Paste, wenn ich z.B. Zahlen einfüge (die aus anderen Exceldateien oder PDFs kommen) sollen diese direkt im Anschluss wieder umformatiert werden.
Nur beim Einfügen hängt sich das Makro auf, weil:
1. Er General nicht als Numberformat mehr akzeptiert
2. Er das Datum nicht mehr korrekt zuweist. In der Zelle steht dann ein Unsinn wie "dd.00.yy"

Kann mir jemand helfen und sagen wo das Problem beim Einfügen liegt?

Danke und liebe Grüße
Martin
Top
#2
Hallo


Zitat:Nur beim Einfügen hängt sich das Makro auf, weil:

Ist für mich nicht nachvollziehbar.
Evtl. Bsp. Datei mit Vorgangsbeschreibung bei dem es dann nicht funktioniert.

Gruß Elex
[-] Folgende(r) 1 Nutzer sagt Danke an Elex für diesen Beitrag:
  • kliffi01
Top
#3
Entschuldige, ich beschreibe es konkreter:

Ich möchte eine Zahl kopieren und dann in Zelle C16 über STRG+V einfügen.
Sobald ich STRG+V + Enter drücke hängt sich das Makro mit der Meldung "Laufzeitfehler 1004 - Die NumberFormat-Eigenschaft des Range-Objekts kann nicht festgelegt werden" auf.
Der Debugger sagt mir die Zeile:
Code:
  Range("C16").NumberFormat = "General"
Bringt mir einen Fehler.
Wenn ich den Code mit F8 durchteste gibt es keine Probleme. Auch nicht, wenn ich absichtlich die Zellformatierung der Zellen C13-C16 davor ändere.
Es scheint als liege das Problem darin, dass ich STRG+V einen Zellinhalt einfüge und sobald ich Enter betätige kommt der Laufzeitfehler + er übernimmt nicht die Datumsformatierung.
Top
#4
Bekomme die Fehlermeldung nicht reproduziert. Bei mir läuft der Code. Dann evtl. doch Bsp. Datei mit Daten wo es passiert, oder abwarten ob noch andere Meldung zum Thema kommen.
[-] Folgende(r) 1 Nutzer sagt Danke an Elex für diesen Beitrag:
  • kliffi01
Top
#5
Danke Elex, ich habe es hinbekommen.
Ich weiß nicht genau wo das Problem lag - es ist nun behoben.
Mit dem Makrorekorder habe ich mir angeschaut wie Excel das Datum formatiert und diesen Code nun übernommen.
Außerdem habe ich mit EnableEvents unterbunden, dass während dem Makro die Change-Events aufgerufen werden, was es sauberer im Ablauf macht.

Code:
' Formatiert die Felder C14-C16, falls sie geändert wurden (z.B. beim Einfügen)
Sub ReFormatierung()
   Application.CutCopyMode = False
   Application.EnableEvents = False
   Application.ScreenUpdating = False
   
   With ThisWorkbook.Worksheets("Start").Range("C14:C16")
   .ClearFormats
   .HorizontalAlignment = xlLeft
   .Interior.ColorIndex = "6"
   .Locked = False
   End With
   
   With ThisWorkbook.Worksheets("Start").Range("C14:C16").Font
       .Size = 11
       .FontStyle = "Calibri"
       .ColorIndex = 1
   End With

   Range("C14").NumberFormat = "@"
   
   Range("C15").NumberFormat = "dd/mm/yy;@"
   
   Application.ScreenUpdating = True
   Application.EnableEvents = True

End Sub

Abschließend die Frage:
Wieso geht folgendes nicht?

Code:
Application
.CutCopyMode = False
.EnableEvents = False
.ScreenUpdating = False
Top
#6
Hm.

Meinst du das.
Code:
With Application
.CutCopyMode = False
.EnableEvents = False
.ScreenUpdating = False
End With
Top
#7
Hallo

Zitat:Range("C16").NumberFormat = "General"

Wenn es mit General nicht klappt versuche es bitte mal mit "Standard". Es kann an der Laendereinstellung liegen.

mfg  Gast 123
Top
#8
Hi,

(11.01.2019, 14:46)kliffi01 schrieb: Ich weiß nicht genau wo das Problem lag - es ist nun behoben.

sehe ich das richtig, daß Du die Number-Formatierung der Zelle C16 entfernt hast im Code?
Dann kann es natürlich keinen Fehler geben, wenn die fehlerhafte Zeile fehlt.
Top
#9
Hi

Zitat:sehe ich das richtig, daß Du die Number-Formatierung der Zelle C16 entfernt hast im Code?

Ja/Nein (Formatiert wird C16 schon noch)
Die zweite Formatierung war nur überflüssig, da diese Zeile ja schon das gewünschte erledigt und auf Standard setzt.
Code:
.ClearFormats
Top
#10
Hi,

ja, daß die Zelle durch .ClearFormats auf Standard gesetzt wird, ist schon klar.

Die zweite Formatzeile war aber die fehlerhafte umd wenn die entfernt wird, dann tritt natürlich auch kein Fehler auf. (Aber das ist Dir auch klar.) Und das wollte ich dem Kniffi erklären.
Top


Gehe zu:


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