Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1944to1948
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

VGA Hilfe

VGA Hilfe
15.09.2023 15:35:09
Emju7

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VGA Hilfe
15.09.2023 15:40:45
Emju7
Sorry, ich wusste oben nicht wo ich die Fehlerbeschreibung angeben kann.

Also ich habe ein Problem, ich hab ein Workspace. Dort habe ich mehrere Sheets erstellt, mit Informationen wie Straße, Name usw.

Jetzt wollte ich eine "Hauptseite" erstellen, die Einzeilig ist und diese nur bearbeitbar ist.
Das Layout sieht so aus: Firma Name Anschrift E-Mail Tel. Nr. Blatt1 Blatt2 Blatt3 usw. Es geht bis Blatt8.
Die informationen die Eingetragen werden, sollen direkt in die Entsprechenden Blätter eingetrragen werden, aber nur wenn diese angekreuzt sind.
Beispiel: Technikfirma, Max Mustermann, Hallostraße 12, xyz@xyz.de, 1234567 Blatt 1(x) Blatt2() Blatt3() Blatt4(x)

Das heißt die INformationen sollen nur in die 2 Blätter eingetragen werden.

Ich hab bereits einen Code geschrieben, hänge aber schon seit 6 std daran und mir verschiebt es immer die Zeile um 3 nach oben.

Code :

Sub SpeichereNeuenEintrag()
Dim HauptBlatt As Worksheet
Set HauptBlatt = ThisWorkbook.Sheets("Hauptseite")

Dim ZielBlatt As Worksheet
Dim LetzteZeile As Long
Dim Zeile As Long
Dim Firma As String
Dim Name As String
Dim Anschrift As String
Dim Email As String
Dim Telefon As String

' Durchlaufe alle Zeilen in der Tabelle auf der Hauptseite.
For Zeile = 114:48 15.09.2023 To HauptBlatt.Cells(Rows.Count, 1).End(xlUp).Row ' Annahme: Die Daten beginnen in Zeile 2 (Zeile 1 enthält Überschriften).
Firma = HauptBlatt.Cells(Zeile, 1).Value
Name = HauptBlatt.Cells(Zeile, 2).Value
Anschrift = HauptBlatt.Cells(Zeile, 3).Value
Email = HauptBlatt.Cells(Zeile, 4).Value
Telefon = HauptBlatt.Cells(Zeile, 5).Value

' Durchlaufe alle Kategorien und überprüfe, ob ein "x" gesetzt ist.
For Each ZielBlatt In ThisWorkbook.Sheets
If ZielBlatt.Name > "Hauptseite" Then
If HauptBlatt.Cells(Zeile, ZielBlatt.Index + 5).Value = "x" Then ' Kategorien beginnen in Spalte 6 (am6, am7, usw.).
LetzteZeile = ZielBlatt.Cells(Rows.Count, 1).End(xlUp).Row
ZielBlatt.Cells(LetzteZeile + 1, 1).Value = Firma
ZielBlatt.Cells(LetzteZeile + 1, 2).Value = Name
ZielBlatt.Cells(LetzteZeile + 1, 3).Value = Anschrift
ZielBlatt.Cells(LetzteZeile + 1, 4).Value = Email
ZielBlatt.Cells(LetzteZeile + 1, 5).Value = Telefon
End If
End If
Next ZielBlatt
Next Zeile

' Sortiere die Daten in den Zielblättern nach Firma und dann alphabetisch.
For Each ZielBlatt In ThisWorkbook.Sheets
If ZielBlatt.Name > "Hauptseite" Then
ZielBlatt.Sort.SortFields.Clear
ZielBlatt.Sort.SortFields.Add Key:=ZielBlatt.Range("A6"), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
ZielBlatt.Sort.SortFields.Add Key:=ZielBlatt.Range("E20"), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ZielBlatt.Sort
.SetRange ZielBlatt.Range("A1:E" & ZielBlatt.Cells(Rows.Count, 1).End(xlUp).Row)
.Header = xlNo
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End If
Next ZielBlatt
End Sub

Anzeige
AW: VGA Hilfe
15.09.2023 16:37:25
Yal
Hallo Emju,

For Zeile = 114:48 15.09.2023 To HauptBlatt.C ...

Poste bitte deinen Code mithilfe vom Schalftfläche oben "Code <pre..."

Ansonsten: was ist genau die Frage?

VG
Yal
AW: VGA Hilfe
15.09.2023 17:17:05
onur
DAS geht schon mal gar nicht:
Dim Name As String 

Das Wort "Name" ist ein reserviertes VBA-Wort (das du sogar im Code benutzt hast).
VGA Hilfe
15.09.2023 17:53:36
Yal
Hallo Emju,

ich weiss nicht, was ein "Hotkey" ist. Ich kenne Shift, Strg, Alt, AltGr, Capslock, NumLock, ...

Ich sehe in dein Code nicht, was von Tastatur sich beeinflussen lässt.
Könnte es sein, dass im Hauptblatt 3 Zeilen unter der scheinbar letzte befüllte Zeile in Spalte A eine Zelle (oder 3) so etwas wie einen Leerzeichen enthalten?
Es müsste zwar dazu einen "x" in Spalte 6 oder 7 , ... aber dann wären diese Zeilen kopiert, was bei einem Sortierung dann oben gebracht werden.

Code geputzt:
Sub SpeichereNeuenEintrag()

Daten_kopieren
Sortieren
End Sub

Private Sub Daten_kopieren()
Dim Zelle As Range
Dim Arr
Dim ZielBlatt As Worksheet

' Durchlaufe alle Zeilen in der Tabelle auf der Hauptseite.
With ThisWorkbook.Worksheets("Hauptseite")
For Each Zelle In Range(.Range("A2"), .Cells(Rows.Count, 1).End(xlUp)) ' Annahme: Die Daten beginnen in Zeile 2 (Zeile 1 enthält Überschriften).
Arr = Zelle.Resize(1, 5).Value
' Durchlaufe alle Kategorien und überprüfe, ob ein "x" gesetzt ist.
For Each ZielBlatt In ThisWorkbook.Sheets
If ZielBlatt.Name > "Hauptseite" Then
If .Cells(Zell.Row, ZielBlatt.Index + 5).Value = "x" Then ' Annahme: Kategorien beginnen in Spalte 6 (am6, am7, usw.).
ZielBlatt.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Resize(1, 5) = Arr
End If
End If
Next ZielBlatt
Next Zelle
End With
End Sub

Private Sub Sortieren()
Dim ws As Worksheet
' Sortiere die Daten in den Zielblättern nach Firma und dann alphabetisch.
For Each ws In ThisWorkbook.Worksheets
If ws.Name > "Hauptseite" Then
With ws.Sort
.SortFields.Clear
.SortFields.Add Key:=ws.Range("A1"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
.SortFields.Add Key:=ws.Range("B1"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
.SetRange ws.Range("A1:E" & ws.Cells(Rows.Count, 1).End(xlUp).Row)
.Header = xlNo
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End If
Next ws
End Sub


Diese Code-Zeile ist unstabil:
If .Cells(Zell.Row, ZielBlatt.Index + 5).Value = "x" Then ' Annahme: Kategorien beginnen in Spalte 6 (am6, am7, usw.).

Hauptblatt hat Index 1, daher die erste Zielblatt 2, gelesene Spalte für den "x": Spalte 7
Arbeite lieber mit den Blattname in einer Überschriftzeile:
Private Function X_lesen(Zeile As Long, Blattname As String) As Boolean

Dim R
On Error Resume Next
'suche den Blattname im Überschrift (Zeile 1)
With Worksheets("Hauptseite")
Set R = .Rows(1).Find(Blattname)
If Not R Is Nothing Then X_lesen = LCase(Trim(.Cells(Zeile, R.Column).Value)) = "x"
End If
End Function


dann wird es
If X_Lesen(Zell.Row, ZielBlatt.Name) Then ' Annahme: Kategorien beginnen in Spalte 6 (am6, am7, usw.).


VG
Yal
Anzeige
AW: VGA Hilfe
15.09.2023 16:43:56
Emju7
Sub SpeichereNeuenEintrag()
Dim HauptBlatt As Worksheet
Set HauptBlatt = ThisWorkbook.Sheets("Hauptseite")

Dim ZielBlatt As Worksheet
Dim LetzteZeile As Long
Dim Zeile As Long
Dim Firma As String
Dim Name As String
Dim Anschrift As String
Dim Email As String
Dim Telefon As String

' Durchlaufe alle Zeilen in der Tabelle auf der Hauptseite.
For Zeile = 2 To HauptBlatt.Cells(Rows.Count, 1).End(xlUp).Row ' Annahme: Die Daten beginnen in Zeile 2 (Zeile 1 enthält Überschriften).
Firma = HauptBlatt.Cells(Zeile, 1).Value
Name = HauptBlatt.Cells(Zeile, 2).Value
Anschrift = HauptBlatt.Cells(Zeile, 3).Value
Email = HauptBlatt.Cells(Zeile, 4).Value
Telefon = HauptBlatt.Cells(Zeile, 5).Value

' Durchlaufe alle Kategorien und überprüfe, ob ein "x" gesetzt ist.
For Each ZielBlatt In ThisWorkbook.Sheets
If ZielBlatt.Name > "Hauptseite" Then
If HauptBlatt.Cells(Zeile, ZielBlatt.Index + 5).Value = "x" Then ' Annahme: Kategorien beginnen in Spalte 6 (am6, am7, usw.).
LetzteZeile = ZielBlatt.Cells(Rows.Count, 1).End(xlUp).Row
ZielBlatt.Cells(LetzteZeile + 1, 1).Value = Firma
ZielBlatt.Cells(LetzteZeile + 1, 2).Value = Name
ZielBlatt.Cells(LetzteZeile + 1, 3).Value = Anschrift
ZielBlatt.Cells(LetzteZeile + 1, 4).Value = Email
ZielBlatt.Cells(LetzteZeile + 1, 5).Value = Telefon
End If
End If
Next ZielBlatt
Next Zeile

' Sortiere die Daten in den Zielblättern nach Firma und dann alphabetisch.
For Each ZielBlatt In ThisWorkbook.Sheets
If ZielBlatt.Name > "Hauptseite" Then
ZielBlatt.Sort.SortFields.Clear
ZielBlatt.Sort.SortFields.Add Key:=ZielBlatt.Range("A1"), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
ZielBlatt.Sort.SortFields.Add Key:=ZielBlatt.Range("B1"), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ZielBlatt.Sort
.SetRange ZielBlatt.Range("A1:E" & ZielBlatt.Cells(Rows.Count, 1).End(xlUp).Row)
.Header = xlNo
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End If
Next ZielBlatt
End Sub


Problem erneut: Wenn der Hotkey aktiv ist, springt Excel 3 Zeilen nach oben und alles wird durcheinander.
Ich gehe von einem Sortier Problem aus. Hab aber das Problem noch nicht gefunden.
Alphabetisch sortiert er immerhin und wenn man den Hotkey erneut ausführt, erstellt er einen neuen Eintrag, den er genauso sortiert.
Das einzige Problem besteht also darin, das die Excel Tabelle an sich, nicht um 3 Zeilen verrutscht.
Anzeige
VGA Hilfe
15.09.2023 21:04:04
Piet
Hallo

schau dir bitte deine Sortierroutine mal genauer an. Da ist sicher der Wurm drin!!
Du setzt die Sortieradresse auf "A1" und "B1", unten steht aber xlHeader auf xlNo= KEINE Überschrift! Das kann nicht klappen!
Entweder beginnst du mit Zeile 2 = "A2" und "B2", oder setzt xlHeader auf xlYes. Probier es bitte selbst aus.

mfg Piet

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige