Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1780to1784
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

For-Schleife hängt sich auf

For-Schleife hängt sich auf
09.09.2020 12:09:00
Jan
Hallo zusammen,
in einer Tabelle viele Datensätze der Zeile nach stehen. Falls sich ein Wert in einer Spalte wiederholt, wird diese mit einem Anführungszeichen (") bezeichnet. Das Ziel meiner Funktion ist es nun die Anführungszeichen durch "echte" Werte, d.h. den jeweiligen Wert darüber zu ersetzen. D.h.
4 -> 4
" -> 4
" -> 4
" -> 4.
Dafür verwende ich dieses Sub:

Sub wiederholungszeichen_entfernen(clmn As String)
'Erwartet die Spalte, in der gesucht werden soll als String
Dim x As Integer
x = 2
Sheets(tabellenblatt).Range(clmn & x).Select
Call find_last_row
'Funktion, die die letzte Zeile der Tabelle liefert (Variable ist "letztezeile")
Dim i As Integer
For i = letztezeile To 1 Step  -1
If ActiveSheet.Range(clmn & x).Value = """" Then
' """" steht als String für das Suchwort (")
'clmn ist die erwartete Spalte, x die aktuelle Zeile
ActiveCell.Value = ActiveSheet.Range(clmn & x - 1).Value
End If
x = x + 1  'wird benutzt, um eine Spalte weiter runter zu gehen
ActiveSheet.Range(clmn & x).Select
Next
End Sub

Allein ausgeführt, macht dieses Sub, was es soll. Ruft man es aber extern über ein anderes Sub oder eine UserForm auf, hängt sich das Programm auf, sodass nur das Drücken von Esc das Sub beendet (dann ist es aber bereits fertig). Daher denke ich, dass Performance-Gründe das Abstürzen verursachen. Hat da jemand einen Tipp, wie ich es ans Laufen bekomme? Ich bin Euch sehr dankbar!

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: For-Schleife hängt sich auf
09.09.2020 12:29:47
MatthiasG
Hallo Jan,
da du "ActiveSheet" und "ActiceCell" verwendest, gibt es da wahrscheinlich Probleme, wenn andere Blätter aktiv sind.
Referenziere die lieber:

Dim sh As Worksheet
Set sh = Worksheets("meinBlatt")
Und: Vermeide Activate und Select. Sehr guter Artikel hierzu:
https://www.herber.de/vbabasics/0009.html
AW: For-Schleife hängt sich auf
09.09.2020 12:32:24
Daniel
Hi
ich würde die Aufgabe ganz anders lösen.
vielleicht tritt dann dein Problem nicht auf:
With Sheets(tabellenblatt).Range(clmn & "1").entirecolumn
.Replace """", True, xlwhole
.SpecialCells(xlcelltypeconstants, 4).FormulaR1C1 = "=R[-1]C"
.Copy
.PasteSpecial xlpastevalues
end with
das Prinzip ist, dass man die Anfz. durch einen Wahrheitswert ersetzt.
die Zellen mit dem Wahrheitswert kann man dann gezielt selektieren und sich die Werte der darüberliegenden Zellen über eine einfache Formel holen.
Gruß Daniel
Anzeige
AW: For-Schleife hängt sich auf
09.09.2020 12:34:07
peterk
Hallo
ActiveSheet, ActiveCell sollte vermieden werden, da Du nie sicher bist was gerade aktiv ist. Eine Funktion sollte einen Rückgabewert habe und nicht in eine Public Variable schreiben. Weiss Deine Funktion von welchem Tabellenblatt es die letzte Zeile ermitteln soll?
Peter
AW: For-Schleife hängt sich auf
11.09.2020 11:38:44
Jan
Hallo Peter,
ja das weiß sie, weil diese auch die Variable "tabellenblatt" für das Sheet erwartet.
AW: For-Schleife hängt sich auf
11.09.2020 11:42:13
Jan
Hallo Peter,
ja das weiß sie, weil diese auch die Variable "tabellenblatt" für das Sheet erwartet.
AW: For-Schleife hängt sich auf
11.09.2020 12:15:06
peterk
Hallo
Ich würde die Schleife so programmieren

Sub wiederholungszeichen_entfernen(clmn As String)
'Erwartet die Spalte, in der gesucht werden soll als String
Dim x As Integer
Dim myWS As Worksheet
Set myWS = Worksheets(tabellenblatt)
Call find_last_row
'Funktion, die die letzte Zeile der Tabelle liefert (Variable ist "letztezeile")
For x = 2 To letztezeile
If myWS.Range(clmn & x).Value = """" Then
' """" steht als String für das Suchwort (")
'clmn ist die erwartete Spalte, x die aktuelle Zeile
myWS.Range(clmn & x).Value = myWS.Range(clmn & (x - 1)).Value
End If
Next
End Sub

Anzeige
AW: wahrscheinliche Ursache
09.09.2020 12:46:37
GerdL
Hallo Jan,
du müsstest die Selection (Blatt u. Zelle) trennen.
Sheets(tabellenblatt).Activate
Range(clmn & x).Select
In der Regel ist die Selection nur beim Testen hilfreich.
Wie man ein Objekt direkt referenziert, haben andere schon gezeigt.
Gruß Gerd
AW: For-Schleife hängt sich auf
09.09.2020 17:55:15
onur
Abgesehen davon, worauf dich die Anderen bereits hingewiesen haben, ist ein Gänsefüsschen die denkbar schlechteste Wahl für einen Stringwert. Warum nimmst du nicht stattdessen z.B. "dito" oder ein "*"?
AW: For-Schleife hängt sich auf
10.09.2020 10:54:11
Jan
Hallo Onur,
Ja, die Gänsefüßchen sind problematisch, hierbei handelt es sich allerdings um maschinell erstellte Listen, die wiederum aus .txt-Dateien importiert werden, habe daher keinen Einfluss darauf.
Anzeige
AW: For-Schleife hängt sich auf
12.09.2020 19:19:13
Jan
Ich danke Euch für die Antworten!
Leider hat noch keine der Lösungen zum Erfolg geführt und es hängt immer noch.
Ist es theoretisch möglich, dass der Rest des Projekts zu umfangreich geworden ist? Kann man mit der Methode "Application.wait(...)" auch noch was reißen? Ich habe es sowohl mit Vorschlag 1 als auch mit Vorschlag 2 (getrennt voneinander) versucht:

'Vorschlag 1
Set myWS=Worksheets(tabellenblatt)
With myWS.Range(clmn & "1").EntireColumn
.Replace """", True, xlWhole
.SpecialCells(xlCellTypeConstants, 4).FormulaR1C1 = "=R[-1]C"
.Copy
.PasteSpecial xlPasteValues
End With

'Vorschlag 2
Dim x As Integer
x = 2
Set myWS = Worksheets(tabellenblatt)
Call find_last_row
Application.ScreenUpdating = False
For x = 2 To letztezeile
If myWS.Range(clmn & x).Value = """" Then
Range(clmn & x).Value = Range(clmn & (x - 1)).Value
End If
Next
Gruß Jan
Anzeige
AW: For-Schleife hängt sich auf
12.09.2020 19:38:59
Daniel
Hi
Der Rest des Projekts sollte damit nicht zu tun haben, es sei denn du hast komplexe Formeln die sich auf diese Zellen beziehen und neu berechnet werden.
Application.Wait hilft nicht, weil in der Wartezeit nichts passiert.
Du solltest mal.die Datei hochladen, damit man sich das anschauen kann.
Gruß Daniel

112 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige