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.

Hilfe bei VBA Skript
#1
Hallo zusammen,

ich habe folgendes VBA Skript:

Sub Änderungen()
Dim Zelle as Range
For Each Zelle In Selection
IF Zelle <>““ And Len (Zelle) >5 Then
Zelle = Left (Zelle, 1) & Right(Zelle, Len(Zelle)-2)
End if
Next Zelle
End Sub


Ich habe dieses auch schon mehrfach bei verschiedenen Dateien angewendet. Seit gestern versuche ich nun bei einer Datei auszuführen. Leider hängt sich jedes mal Excel auf. Ich habe zuerst versucht 5000 Zellen zu makieren und es anzuwenden. Als das nicht funktioniert hat habe ich nur eine Zelle makiert. Leider mit dem selben Ergebnis. Hat jemand eine Idee?

Vielen Dank für eure Mühe.

Viele Grüße

Asceroon
Antworten Top
#2
Moin!
Zitat:Hat jemand eine Idee?

Hab ich!  :19:
Da die Veränderung des Targets erneut ein Change-Event auslöst, landest Du in einer Endllosschleife!

Für meine eine Idee habe ich zwei Lösungen:
  1. Du musst die Ereignisse abschalten und sicherstellen, dass sie auf jeden Fall wieder eingestellt werden: 
    Sub Änderungen()
    Dim Zelle As Range
    On Error GoTo EventsOn
    Application.EnableEvents = False
    For Each Zelle In Selection
       If Zelle <> ““ And Len(Zelle) > 5 Then
          Zelle = Left(Zelle, 1) & Right(Zelle, Len(Zelle) - 2)
       End If
    Next Zelle
    EventsOn:
    Application.EnableEvents = True
    End Sub
  2. Bei großen Markierungen (hier sind es ja 5.000 Zellen) dürfte die Auslagerung in ein temporäres Array einen enormen Geschwindigkeitsvorteil bringen.
Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
[-] Folgende(r) 1 Nutzer sagt Danke an RPP63 für diesen Beitrag:
  • Asceroon
Antworten Top
#3
Hallo,

Du hast in der Tabelle ein Ereignismakro namens Worksheet_Change, welches durch dein Makro ausgelöst wird.
Gruß Stefan
Win 10 / Office 2016
[-] Folgende(r) 1 Nutzer sagt Danke an Steffl für diesen Beitrag:
  • Asceroon
Antworten Top
#4
Hi Steffl!
Hab tatsächlich erst jetzt realisiert, dass es sich ja um eine normale Sub handelt!  Blush
Dennoch bleiben meine beiden Lösungen erstmal bestehen.

Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Antworten Top
#5
Vielen Dank euch beiden.

Das Skript von Ralf funktioniert. Dennoch würde mich interessieren warum das Makro in der Vergangenheit immer einwandfrei funktionert hat und seit gestern nicht mehr. Weiß das jemand?

Viele Grüße

Asceroon
Antworten Top
#6
Das schrieb Dir ja Steffl bereits (und ich indirekt).
Du hast ein Change-Ereignis in der Mappe.
Klicke mal im VBE-Editor (Alt+F11) doppelt auf DieseArbeitsmappe und auf die einzelnen Tabellen.
Irgendwo hast Du entweder
Private Sub Worksheet_Change(ByVal Target As Range)
oder
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)

Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
[-] Folgende(r) 1 Nutzer sagt Danke an RPP63 für diesen Beitrag:
  • Asceroon
Antworten Top
#7
(11.08.2016, 07:45)RPP63 schrieb: Irgendwo hast Du entweder
Private Sub Worksheet_Change(ByVal Target As Range)
oder
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)

Ich habe versucht das jetzt zu verstehen. Bin aber definitiv kein Profi was VBA betrifft. Des Weiteren stürtzt Excel auch mit dem Skript von Ralf ab. Ich habe mal ein Bild gemacht. Vielleicht könnt ihr mir nochmal mit einfachen Worten erklären was ich falsch mache Blush .

[
Bild bitte so als Datei hochladen: Klick mich!
]
Antworten Top
#8
Hallo,

bei mir ist bei deinem Bild nur viel Schwarz zu sehen, lade die Datei hoch.
Gruß Stefan
Win 10 / Office 2016
Antworten Top
#9
Klicke doppelt auf DieseArbeitsmappe und Tabelle1 im Projektexplorer oben links.

Ansonsten lade mal die Datei hoch.
Sensible Daten kannst Du anonymisieren.
Wichtig nur, dass Du weder Aufbau noch Formeln (und keinen VBA-Code  :19: ) veränderst.

Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Antworten Top
#10
(11.08.2016, 08:16)Steffl schrieb: Hallo,

bei mir ist bei deinem Bild nur viel Schwarz zu sehen, lade die Datei hoch.

anbei


Angehängte Dateien Thumbnail(s)
   
Antworten Top


Gehe zu:


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