Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
1872to1876
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

Problem beim sortieren mit VBA

Problem beim sortieren mit VBA
09.03.2022 22:16:09
Johannes
Hallo zusammen,
ich benötige etwas Hilfe.
Ziel ist es einen Namen aus einer oder zwei Dateien in eine oder zwei andere Dateien zu kopieren.
Ich habe eine Userform erstellt, wo man per ComboBoxen den Namen auswählt, eine Zieldatei (gleicher Aufbau/Inhalt) angibt, Zeilenauswahl für Datei Nr1, und ob der Name nur in einer Datei oder beiden kopiert werden soll.
In der zweiten Datei soll der Name erst gesucht werden und in ein Freies Feld eines bestimmen Bereichs kopiert werden (je nachdem aus welcher Zeile in der Quelle. Weil unterschiedlich zu Datei 1)). Anschießend der Bereich von A-Z sortiert.
An sich funktioniert mein Code einwandfrei. Nur wird beim ersten Verschieben nicht sortiert. Der neue Name bleibt da stehen wo er eingefügt wird. Wenn ich allerdings das Makro ein zweites mal ausführe, wird der Bereich mit dem zuvor neu eingefügten Namen richtig von A-Z sortiert, nur der zweite Name steht jetzt wieder da wo er eingefügt wurde (Am Ende weil ja zuvor sortiert wurde). Die Sortierfunktion wird aber eigentlich erst nach dem einfügen ausgeführt..... Komme nicht dahinter was da schief läuft.
Hier der Code-Abschnitt wo die zweite Datei abgearbeitet wird.
(PS. Habe immer diese Workbooks und Workssheets .Select weil es sonst nicht funktionierte. Der Sortier-Teil funktioniert auch wenn ich ihn zum testen in ein eigenes Sub, mit den entsprechenden Variablen, stecke.)

Private Sub CommandButton1_Click()
Application.ScreenUpdating = False
Application.EnableEvents = False
' Verschiedene Gültigkeitsabfragen der ComboBoxen ______________________________________________________________
'Auch in den Anwesenheitslisten kopieren, wenn Haken gesetzt___________________________________________________________________________________
If CheckBox1.Value = True Then
Workbooks(ThisWorkbook.Name).Activate
Workbooks(ThisWorkbook.Name).Sheets("Einstellungen").Select
QMAAnwesenheit = Workbooks(ThisWorkbook.Name).Worksheets("Einstellungen").Cells(VerschiebenVon, 2).Value
vonAnwesenheitVerschieben = Workbooks(ThisWorkbook.Name).Sheets("Einstellungen").Range("AH17").Value
Workbooks(inSchichtplandateiVerschieben).Activate
Workbooks(inSchichtplandateiVerschieben).Sheets("Einstellungen").Select
inAnwesenheitVerschieben = Workbooks(inSchichtplandateiVerschieben).Sheets("Einstellungen").Range("AH17").Value
If vonAnwesenheitVerschieben = inAnwesenheitVerschieben Then
MsgBox "In beiden Schichtplänen wird auf die gleiche Anwesenheitsdatei verwiesen. Kopieren nicht nötig. (Haken bei 'Anwesenheit berücksichtigen' entfernen.)"
Exit Sub
End If
If Not Dir(ThisWorkbook.Path & "\" & inAnwesenheitVerschieben)  "" Then
MsgBox "Die Ziel-Anwesenheitsdatei '" & inAnwesenheitVerschieben & "' konnte nicht gefunden werden. (In Einstellungen des anderen Schichtplan angeben.)"
Exit Sub
End If
If Not Dir(ThisWorkbook.Path & "\" & vonAnwesenheitVerschieben)  "" Then
MsgBox "Die Quell-Anwesenheitsdatei '" & vonAnwesenheitVerschieben & "' konnte nicht gefunden werden. (In Einstellungen dieses Schichtplan angeben.)"
Exit Sub
End If
Workbooks.Open (ThisWorkbook.Path & "\" & vonAnwesenheitVerschieben)
Workbooks(vonAnwesenheitVerschieben).Activate
If Workbooks(vonAnwesenheitVerschieben).ReadOnly = True Then
MsgBox "Anwesenheit " & vonAnwesenheitVerschieben & " ist schreibgeschützt. Aktion nicht möglich."
Exit Sub
End If
Workbooks.Open (ThisWorkbook.Path & "\" & inAnwesenheitVerschieben)
Workbooks(inAnwesenheitVerschieben).Activate
If Workbooks(inAnwesenheitVerschieben).ReadOnly = True Then
MsgBox "Anwesenheit " & inAnwesenheitVerschieben & " ist schreibgeschützt. Aktion nicht möglich."
Exit Sub
End If
Workbooks(vonAnwesenheitVerschieben).Activate
Workbooks(vonAnwesenheitVerschieben).Sheets("Anwesenheit").Select
ZeileMAAnwesenheit = 1
Dim Passwort As String
Passwort = Workbooks(vonAnwesenheitVerschieben).Worksheets("Einstellungen").Cells(11, 11).Value
Workbooks(vonAnwesenheitVerschieben).Unprotect Password:=Passwort
Workbooks(vonAnwesenheitVerschieben).Worksheets("Anwesenheit").Unprotect Password:=Passwort
Workbooks(vonAnwesenheitVerschieben).Worksheets("Anwesenheit").Rows("16:105").EntireRow.Hidden = False
Dim BenutzerSuche As Range
For Each BenutzerSuche In Workbooks(vonAnwesenheitVerschieben).Worksheets("Anwesenheit").Range("A16:A105") ' Bereich wo die Benutzer stehen
If LCase(QMAAnwesenheit) = LCase(Workbooks(vonAnwesenheitVerschieben).Worksheets("Anwesenheit").Cells(BenutzerSuche.Row, BenutzerSuche.Column).Value) Then
ZeileMAAnwesenheit = BenutzerSuche.Row
Exit For
End If
Next BenutzerSuche
If ZeileMAAnwesenheit = 1 Then
Workbooks(vonAnwesenheitVerschieben).Worksheets("Anwesenheit").Rows("16:105").EntireRow.Hidden = True
MsgBox "Mitarbeiter in Anwesenheitsliste nicht gefunden. Aktion abgebrochen."
Application.DisplayAlerts = False
Workbooks(vonAnwesenheitVerschieben).Close savechanges:=False
Workbooks(inAnwesenheitVerschieben).Close savechanges:=False
Application.DisplayAlerts = True
Exit Sub
End If
Workbooks(inAnwesenheitVerschieben).Activate
Workbooks(inAnwesenheitVerschieben).Sheets("Anwesenheit").Select
Passwort = Workbooks(inAnwesenheitVerschieben).Worksheets("Einstellungen").Cells(11, 11).Value
Workbooks(inAnwesenheitVerschieben).Unprotect Password:=Passwort
Workbooks(inAnwesenheitVerschieben).Worksheets("Anwesenheit").Unprotect Password:=Passwort
Workbooks(inAnwesenheitVerschieben).Worksheets("Anwesenheit").Rows("16:105").EntireRow.Hidden = False
Dim BereichGruppe As String
If ZeileMAAnwesenheit >= 16 And ZeileMAAnwesenheit = 47 And ZeileMAAnwesenheit 

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Problem beim sortieren mit VBA
09.03.2022 23:25:58
Daniel
Hi
Jedes Range oder Cells ohne Workbook- und Tabellenblattangabe davor beziehen sich immer entweder auf das aktive Tabellenblatt (wenn der Code in einem allgemeinen Modul steht) oder auf das Tabellenblatt des Moduls, wenn der Code in einem Tabellenblattmodul steht.
Das gilt auch dann wenn das Range oder Cells innerhalb von anderen Funktionen steht, bei denen man Workbook und Worksheet davor schon angegeben hat (z.B. Range(Cells(), Cells())) !
Dhan muss IMMER vollständig referenzieren, d.h. mit Workbook und Worksheet vor JEDEM Range und Cells.
Gruß Daniel
AW: Problem beim sortieren mit VBA
10.03.2022 00:51:03
Johannes
Ah wieder was gelernt.
Dachte die Workbook und Sheet Angabe auf das Range vom Range(Cells(), Cells())) reicht.
Dass ich da nicht selber drauf gekommen bin, mal zu versuchen die Cells auch noch zu referenzieren....
Herzlichen Dank!
Grüße.
Anzeige
AW: Problem beim sortieren mit VBA
10.03.2022 06:23:18
Daniel
es ist bei Range(Cells, Cells) sogar so, das du die Angabe des WBook und WSheets vor der Range weglassen darfst, aber nicht vor den Cells, denn es sind die Cells, die die Range definieren und nicht umgekehrt. Außer, der Code befindet sich in einem Tabellenblattmodul, dann ist die Fokussierung auf das Tabellenblatt des Moduls so stark, dass die Angaben vor dem Range und den Cells stehen müssen.
Gruß Daniel

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige