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

VBA Makro startet bei And nicht

VBA Makro startet bei And nicht
02.03.2021 10:03:47
Patrick
Hallo zusammen,
es geht um folgenden VBA Code:
Option Explicit

Sub Spartacus_ID_hinzufügen()
Dim wkb1 As Workbook
Dim wkb2 As Workbook
Dim wksSpartacusID As Worksheet
Dim wksSINAUebrsichtsliste As Worksheet
Dim spartacuszeile As Integer, v4zeile As Integer
Set wksSINAUebrsichtsliste = Workbooks("SINA_Übersichtsliste_Win10_2020 V4_test2.xlsm"). _
Worksheets(1)
Set wksSpartacusID = Workbooks("SINA_Übersichtsliste_Win10_2020 V4_test2.xlsm").Worksheets(  _
_
2)
For v4zeile = 2 To 50
'wksB.Cells(Rows.Count, 1).End(xlUp).Row
For spartacuszeile = 2 To wksSpartacusID.Cells(Rows.Count, 1).End(xlUp).Row
If wksSINAUebrsichtsliste.Cells(v4zeile, 10) = wksSpartacusID.Cells( _
spartacuszeile, 1) And wksSINAUebrsichtsliste.Cells(v4zeile, 11) = wksSpartacusID.Cells( _
spartacuszeile, 2) Then
wksSINAUebrsichtsliste.Cells(v4zeile, 12) = wksSpartacusID.Cells( _
spartacuszeile, 3)
wksSINAUebrsichtsliste.Cells(v4zeile, 49) = spartacuszeile
End If
Next spartacuszeile
Next v4zeilee
End Sub

Es geht um zwei Tabellen. Grundsätzlich stehen in der einen Tabelle2 in den Spalten Name, Vorname und ein Zahlenwert. Zeilenanzahl von Tabellle2 ist insgesamt über 16000. Nun wird in der ersten For Schleife mit Zeile zwei der Tabelle1 begonnen. Der Wert des Feldes Name und Vorname (cells 10 und 11) der Tabelle1 wird mit den Cells 1 und 2 der Tabelle2 verglichen und bei true in Cells 12 der Zahlenwert von Tabelle2 Cell 3 eingetragen. Dies soll über alle Einträge von Tabelle1 laufen (50 ist hier nur als Test).
Allerdings wird das Makro beim ausführen nicht gestartet. D.h. es ist für kurze Zeit der Kreis zu sehen, aber es erfolgen keine Eintragungen.
Es wurden Test gemacht. Zum einen wurde die and Bedingung entfernt, was tadellos funktioniert, aber eben bei Namensgleichheit ein Problem besteht. Ich habe auch eine kleine Tabelle erstellt, um die grundsätzliche Funktion zu testen, was ebenfalls positiv verläuft.
Ich kann nicht erkennen, wo hier das Problem liegt. Sind Excel die Datenengen zu groß oder stimmt etwas in meinem Code nicht?
Vielen Dank für jede Hilfe.
Gruß
Patrick.

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Makro startet bei And nicht
02.03.2021 10:24:09
Werner
Hallo,
also hier hast du möglicherweise ein Referenzierungsproblem
For spartacuszeile = 2 To wksSpartacusID.Cells(Rows.Count, 1).End(xlUp).Row

Ohne den WB/Blattnamen vor dem Rows.Count ermittelst du die letzte belegte Zelle auf dem Tabellenblatt, auf dem du dich aktuell befindest. Sollte das nicht das selbe sein wie wksSpartacusID, dann ermittelst du die letzte belegte Zelle in der falschen Mappe/Tabellenblatt.
Dann deklarierst du eine Variable:
v4zeile As Integer

Im Code verwendest du aber:
 Next v4zeilee

Versuch mal:
Option Explicit
Sub Spartacus_ID_hinzufügen()
Dim wkb1 As Workbook, wkb2 As Workbook
Dim wksSpartacusID As Worksheet, wksSINAUebrsichtsliste As Worksheet
Dim spartacuszeile As Long, v4zeile As Long
Set wksSINAUebrsichtsliste = _
Workbooks("SINA_Übersichtsliste_Win10_2020 V4_test2.xlsm").Worksheets(1)
Set wksSpartacusID = _
Workbooks("SINA_Übersichtsliste_Win10_2020 V4_test2.xlsm").Worksheets(2)
For v4zeile = 2 To 50
With wksSpartacusID
For spartacuszeile = 2 To .Cells(.Rows.Count, 1).End(xlUp).Row
If wksSINAUebrsichtsliste.Cells(v4zeile, 10) = .Cells(spartacuszeile, 1) _
And wksSINAUebrsichtsliste.Cells(v4zeile, 11) = .Cells(spartacuszeile, 2) Then
wksSINAUebrsichtsliste.Cells(v4zeile, 12) = .Cells(spartacuszeile, 3)
wksSINAUebrsichtsliste.Cells(v4zeile, 49) = spartacuszeile
End If
Next spartacuszeile
End With
Next v4zeile
End Sub
Benutze Option Explicit, dann werden dir nicht deklarierte Variable angemeckert (soweit es sich bei dir um einen Kopierfehler handelt bei Next v4zeilee).
Wenn es nicht klappt, dann wird es ohne deine Mappe schwierig. Zur Not Daten raus schmeißen und die Datei auf das Notwendige einkürzen. Das Problem/Fehler sollte halt noch nachvollziehbar sein.
Gruß Werner

Anzeige
@Werner
02.03.2021 11:14:18
Rudi
Hallo,
Ohne den WB/Blattnamen vor dem Rows.Count ermittelst du die letzte belegte Zelle auf dem Tabellenblatt, auf dem du dich aktuell befindest.
Unsinn! Rows.Count gibt die max. Anzahl Zeilen der aktiven XL-Version zurück. Hier 1048576.
Die Ermittlung der letzten Zelle ist korrekt. Es sei denn, es ist ein Filter aktiv. Dann ist das Ergebnis falsch, falls die letzte Zelle ausgeblendet ist.
Gruß
Rudi

AW: @Rudi
02.03.2021 11:22:32
Klaus
Rows.Count gibt die max. Anzahl Zeilen der aktiven XL-Version zurück
Rows.Count gibt tatsächlich die Anzahl Zeilen des aktiven Arbeitsblattes zurück, sonst wäre es ja nicht referenziebar. Die Anzahl Zeilen ist aber in jedem Arbeitsblatt gleich, man kann ja nicht ein Sheet in xl2003 und ein zweites Sheet der selben Datei in xl2016 speichern. Insofern ist das nur ein akademisch interessanter Unterschied.
Extremer Ausnahmefall:
A1048576 ist gefüllt oder gefiltert. Das dürfte aber tatsächlich nie vorkommen.
LG,
kLaus

Anzeige
was erzählst du mir?
02.03.2021 11:58:28
Rudi
Hallo,
Rows.Count gibt tatsächlich die Anzahl Zeilen des aktiven Arbeitsblattes zurück,
Stimmt. Wenn es eine .xls ist dann 65536, sonst 1048576.
Worum es mir ging: Es ist nicht nötig, auf Worksheet.Rows.Count zu referenzieren.
Gruß
Rudi

AW: was erzählst du mir?
02.03.2021 12:30:51
Nepumuk
Hallo Rudi,
da lass das mal aus einem Diagrammblatt laufen. :-)
Gruß
Nepumuk

wo du Recht hast, ...
02.03.2021 13:26:27
Rudi
... hast du Recht.
Auf einem Dialog geht's auch schief.
:-)
Gruß
Rudi

AW: @Klaus M. auch das ist falsch
02.03.2021 16:38:55
EtoPHG
Hallo Klaus,
Man kann durchaus Worksheets (nicht Sheet! siehe Diskussion weiter unten) mit unterschiedlicher Anzahl Zeilen (1048576 und/oder 65536) in der gleichen Arbeitsmappe haben.
Das wurde schon vor über 10 Jahren bewiesen!
Gruess Hansueli

Anzeige
AW: @Klaus M. auch das ist falsch
02.03.2021 17:03:05
Daniel
naja, wer das macht handelt aber sicherlich bewusst, denn zufällig bekommt man sowas ja nicht hin.
was eher vorkommen kann, dass man mit zwei unterschiedlichen Dateien arbeitet, wovon eine eine noch eine alte xls-Datei ist und eine eine neue xlsx/m/b.
da kann es dann schnell passieren, dass man ohne Referenzierung in der falschen datei landet und dann Probleme bekommt.
Gruß Daniel

AW: VBA Makro startet bei And nicht
02.03.2021 10:29:00
Werner
Hallo,
hier, das With natürlich außerhalb der beiden For Schleifen.
With wksSpartacusID
For v4zeile = 2 To 50
For spartacuszeile = 2 To .Cells(.Rows.Count, 1).End(xlUp).Row
If wksSINAUebrsichtsliste.Cells(v4zeile, 10) = .Cells(spartacuszeile, 1) _
And wksSINAUebrsichtsliste.Cells(v4zeile, 11) = .Cells(spartacuszeile, 2) Then
wksSINAUebrsichtsliste.Cells(v4zeile, 12) = .Cells(spartacuszeile, 3)
wksSINAUebrsichtsliste.Cells(v4zeile, 49) = spartacuszeile
End If
Next spartacuszeile
Next v4zeile
End With
Gruß Werner
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige