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

Ich glaube ich bin blind!

Ich glaube ich bin blind!
13.02.2021 11:07:32
Herbert_Grom
Hallo,
ich sehe den Wald vor lauter Bäumen nicht! Ich möchte eine Datei öffnen und in Tabelle1 in der Zeile 4 (a) dann, aus den Daten der Spalten A & B & D einen String bilden. Ich habe das mit dem nachfolgenden Code versucht und bekomme in der Zeile unter ".Activate" eine Fehlermeldung. Könnt ihr mir bitte sagen, wo ich da den Fehler habe, denn ich sehe es einfach nicht! Dafür vielen Dank im Voraus!
Servus
   Dim wkbQuelle As Workbook, wkbZiel As Workbook, iLastRow%, a%
Dim si9_neu_String$, si9_alt_String$
iLastRow = Cells(1048576, 1).End(xlUp).Row
For a = 4 To iLastRow
Set wkbQuelle = Workbooks.Open(ThisWorkbook.Path & "\i9neu.xls")
With sQuelle
.Activate
iLastRow = Sheets("Tabelle1").Cells(1048576, 1).End(xlUp).Row
si9_neu_String = .Sheets("Tabelle1").Range("A" & a) & .Range("B" & a) & .Range("D" & a) _
End With

14
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Ich glaube ich bin blind!
13.02.2021 11:12:05
Hajo_Zi
es fehlt ein set füt SQuelle
lösche .activate und vor Sheets ein Punkt.

AW: Ich glaube ich bin blind!
13.02.2021 11:14:22
Herbert_Grom
Hallo Hajo,
sorry, das hatte ich nur vergessen mit "wkbQuelle" zu ersetzen. Der Fehler kommt trotzdem ab der Zeile mit dem 2. "iLastRow".
Servus
AW: Ich glaube ich bin blind!
13.02.2021 11:19:26
Herbert_Grom
Jetzt habe ich den Fehler für das 2. "iLastRow" gefunden, denn diese AM ist noch eine "xls" mit 65536 Zeilen. Nun meckert er nur noch bei dem "si9_neu_String". Was mache ich da falsch?
AW: Ich glaube ich bin blind!
13.02.2021 11:27:58
Hajo_Zi
vor .Range("B" & a) & .Range("D" & a) _
fehlt die Tabelle und am Ende Fehlt auch die Fortsetzungszeile, da _
Gruß Hajo
Anzeige
.Sheets("Tabelle1").Range("A" & a) & .Range("B" &
13.02.2021 11:28:59
RPP63
Moin!
Falsche Referenzierung!
Sowohl .Sheets als auch (das zweite und dritte) .Range beziehen sich auf WkbQuelle.
Ein Workbook hat aber keine Zellen!
Also
With Sheets("Tabelle1")
si9_neu_String = .Range & .Range & .Range
End With
Gruß Ralf
AW: Ich glaube ich bin blind!
13.02.2021 11:23:01
Hajo_Zi
Version ohne Relevanz stimmt nicht
1048576 Zeilen gibt es erst ab 2007.
besser
Cells(Rows.Count, 1).End(xlUp).Row
Gruß Hajo
AW: Ich glaube ich bin blind!
13.02.2021 11:28:46
Herbert_Grom
Hallo Hajo,
auch das ist besser. Und jetzt klappts auch mit dem String.
   Dim wkbQuelle As Workbook, wkbZiel As Workbook, iLastRow%, a%
Dim si9_neu_String$, si9_alt_String$
iLastRow = Cells(Rows.Count, 1).End(xlUp).Row
For a = 4 To iLastRow
Set wkbQuelle = Workbooks.Open(ThisWorkbook.Path & "\i9neu.xls")
With wkbQuelle
iLastRow = .Sheets("Tabelle1").Cells(Rows.Count, 1).End(xlUp).Row
si9_neu_String = .Sheets("Tabelle1").Range("A" & a) & _
.Sheets("Tabelle1").Range("B" & a) & _
.Sheets("Tabelle1").Range("D" & a)
End With
Servus
Anzeige
AW: Ich glaube ich bin blind!
13.02.2021 11:44:26
Werner
Hallo,
sorry, aber meiner Meinung nach ist auch an diesem Code so einiges verquer:
1. Du ermittelst die letzte belegte Zelle im gerade aktiven Blatt, so gewollt?
2. Öffnest du eine Datei und ermittelst im Blatt 1 die letzte belegte Zeile. Du verwendest dazu die gleiche Variable wie bei Punkt 1, womit du deren Wert änderst.
3. Hast du die SET Anweisung in der For Schleife und öffnest bei jedem Durchlauf die Datei
Public Sub aaa()
Dim wkbQuelle As Workbook, wkbZiel As Workbook, iLastRow%, a%
Set wkbQuelle = Workbooks.Open(ThisWorkbook.Path & "\i9neu.xls")
With sQuelle.Worksheets("Tabelle1")
iLastRow = .Cells(.Rows.Count, 1).End(xlUp).Row
For a = 4 To iLastRow
.Range("A" & a) = .Range("A" & a) & .Range("B" & a) & .Range("D" & a)
Next a
End With
Set wkbQuelle = Nothing
End Sub
Abgesehen davon würde ich das nicht per Scheife machen. In einer freien Spalte per Formel die Zellenwerte verketten, die Werte aus dieser Spalte in Spalte A kopieren und die Hilfsspalte anschließend leeren.
Gruß Werner
Anzeige
AW: Ich glaube ich bin blind!
13.02.2021 11:53:18
Herbert_Grom
Hallo Werner,
da hast du natürlich recht. Aber durch das ständige neu probieren, versucht man es mit allen (un)mögliche Varianten. Gefällt dir diese besser, oder habe ich immer noch etwas übersehen?
   Dim wkbQuelle As Workbook, wkbZiel As Workbook, iLastRow%, a%
Dim si9_neu_String$, si9_alt_String$
iLastRow = Cells(Rows.Count, 1).End(xlUp).Row
Application.ScreenUpdating = False
Set wkbZiel = Workbooks.Open(ThisWorkbook.Path & "\i9.xlsm")
Set wkbQuelle = Workbooks.Open(ThisWorkbook.Path & "\i9neu.xls")
For a = 4 To iLastRow
With wkbQuelle
.Activate
iLastRow = .Sheets("Tabelle1").Cells(Rows.Count, 1).End(xlUp).Row
si9_neu_String = .Sheets("Tabelle1").Range("A" & a) & _
.Sheets("Tabelle1").Range("B" & a) & _
.Sheets("Tabelle1").Range("D" & a)
End With
With wkbZiel
.Activate
si9_alt_String = .Sheets("Tabelle1").Range("A" & a) & _
.Sheets("Tabelle1").Range("B" & a) & _
.Sheets("Tabelle1").Range("D" & a)
End With
Servus
Anzeige
AW: Ich glaube ich bin blind!
13.02.2021 12:00:54
Werner
Hallo,
wenn du mal den kompletten Code posten würdest, dann kann man auch was sagen.
For allem hat hier keine eine Ahnung was du eigentlich machen willst
Das Problem mit iLastRow ist immer noch drin.
Und mit dem Code-Teil den du hier postest kann man sagen, dass du dir bei jedem Schleifendurchlauf die Variable si9_neu_String und si9_alt_String überschreibst und du am Ende letztlich jeweils nur den Wert aus der letzten Zelle drin hast.
Das aber wahrscheinlich nur dadurch, dass der Rest vom Code fehlt und du da irgendwas mit den Variablen anstellst, was ich aber nicht weiß.
Gruß Werner
Anzeige
AW: Ich glaube ich bin blind!
13.02.2021 12:12:18
Herbert_Grom
Hallo Werner,
iLastRow 2x ist gewollt. Den ganzen Code kann ich nicht posten, da er noch nicht fertig ist. Aber wir können es jetzt abschließen, denn das was ich wissen wollte, habe ich nun und es funzt so weit alles. Vielen Dank.
Servus
AW: Ja, du hast schon wieder was übersehen...
14.02.2021 16:23:03
EtoPHG
Herbert,
und zwar hier:
iLastRow = .Sheets("Tabelle1").Cells(Rows.Count, 1).End(xlUp).Row

muss heissen:
iLastRow = .Sheets("Tabelle1").Cells(.Rows.Count, 1).End(xlUp).Row

ich predige schon seit Jahren: Richtig Referenzieren! Rows.Count bezieht sich immer auf das aktive Sheet (was zwar bei Deinem Code das entsprechende ist, aber meiner Meinung nach ist das vorhergehende .Activate völlig überflüssig und vermutlich aus Verzweiflung entstanden!). Bei der Ermittlung der letzten Zelle mit .End(xlup)sollte sich der .Rows.Count also immer auf das gleiche Objekt (Tabelleblatt) beziehe, denn gerade wenn z.B. Blätter aus alter Zeit und neuer Zeit gemixt verwendet werden kann das zum Fehler führen. Zudem ist dann auch egal, ob der Code z.B. während eine aktiven Diagramblatts läuft, was wiederum bei unreferenziertem Rows.Count zu einem bei Anfängern völlig schwer verständlichem Fehler führt.
P.S. die Verwendung von fixen Zeilennummern lehnte ich schon immer ab.
Gruess Hansueli
Anzeige
AW: Ja, du hast schon wieder was übersehen...
14.02.2021 16:29:24
Herbert_Grom
Grüezi Hansueli,
da hast du natürlich völlig recht! Der . muss da hin! Mercie vielmals!
Lass es dir gut gehen und bleib gesund!
Servus
AW: Jetzt war ich blind...
14.02.2021 16:33:56
EtoPHG
Herbert,
Da Rede ich von richtig Referenzieren und mach einen Referenzfehler!
Da du dummerweise nur das Workbook referenzierst, muss es bei deinem Code also heissen:
iLastRow = .Sheets("Tabelle1").Cells(.Sheets("Tabelle1").Rows.Count, 1).End(xlUp).Row
Gruess Hansueli

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige