Tabellenblatt mit Wert finden, Tabellenblattnummer ausgeben
#1
Hallo verehrtes Forum,

ich wende mich mal wieder mit einer Frage an Euch.
Ich möchte ein Workbook aus 12 Sheets nach dem Datumsbereich aus Datum1 und Datum2 durchsuchen.
Der Datumsbereich soll dann kopiert werden und in eine andere Datei geschrieben werden.

Der unten stehende Teil eines Codes basiert auf einer Datei, bei der ich ein einzelnes Tabellenblatt nach dem Datumsberich durchsuche und funktioniert wie gewünscht.


Es müsste also die Variable isheet (siehe letzte Zeile des Codes) ausgelesen werden.
Weiß jemand eine Lösung?


____________________________
For i = 2 To Sheets.Count

wsQuelle.Sheets(i).Select

For Each zelle3 In wsQuelle.Sheets(i).Range(Cells(8, 1), Cells(Rows.Count, 1).End(xlUp))
   
   If wsQuelle.Sheets(i).Cells(zelle3.Row, 1) = Datum1 Then
       irow3 = zelle3.Row

End If

Next zelle3


For Each zelle4 In wsQuelle.Sheets(i).Range(Cells(8, 9), Cells(Rows.Count, 1).End(xlUp))
   
   If wsQuelle.Sheets(i).Cells(zelle4.Row, 1) = Datum2 Then
   irow4 = zelle4.Row
   
   End If
   

Next zelle4

Next i

wsQuelle.Sheets(isheet).Range(Cells(irow3, 1), Cells(irow4, 9)).Copy


Gruß

tmessers
Top
#2
Hallo,

wenn ich nichts falsch verstehe, dann dise Zeile:

wsQuelle.Sheets(isheet).Range(Cells(irow3, 1), Cells(irow4, 9)).Copy

so:

wsQuelle.Sheets(i).Range(Cells(irow3, 1), Cells(irow4, 9)).Copy

vor die Zeile

Next i


Man kann Deinen Code sicher effektiver machen, wenn man den genauen Tabellenaufbau kennt.
Wenn Du aber zufrieden bist mit dem Ergebnis, dann nutze ihn ruhig weiter.
Gruß Atilla
[-] Folgende(r) 1 Nutzer sagt Danke an atilla für diesen Beitrag:
  • tmessers
Top
#3
Hallo tmessers,

aber bitte nicht das Präfix "ws" für ein Workbook.
helmut

Für mich ist die Möglichkeit in Excel an Zellen und Bereichen Namen zu vergeben die wichtigste Funktionalität.
Sie macht Formeln und den VBA-code verständlicher. Für Makros gilt die Regel: "Nur über benannte Bereiche auf den Inhalt der Zellen zugreifen."
Und wofür sind Regeln da? Um nachzudenken bevor man sie bricht.





[-] Folgende(r) 1 Nutzer sagt Danke an Ego für diesen Beitrag:
  • tmessers
Top
#4
@atilla

Ich habe Deinen Tipp ausprobiert.
Die Umstellung erzeugt im Ablauf den "Laufzeitfehler '1004': Anwendungs- oder objektdefinierter Fehler".
Top
#5
@helmut

Natürlich nicht Blush .
Top
#6
Hallo tmessers,

man müsste den gesamten Code sehen, um zu erkennen wo was wie definiert wurde.

Und vielleicht könntest Du noch einmal mit andren Worten erklären was Du kopieren möchtest.
Gruß Atilla
[-] Folgende(r) 1 Nutzer sagt Danke an atilla für diesen Beitrag:
  • tmessers
Top
#7
Hallo tmessers

du must auch sicherstellen dass deine Zeilen-Varaiablen auch eine Zeilennummer und auch die richtigen Zeilennummern im richtigen Blatt haben.

also hinter "FOR I = 2...." folgende Zeilen einfügen:
  • irow3 = 0
  • irow4 = 0
und die Kopierzeile in eine If-Verzweigung setzen:
  • IF irow3 > 0 AND irow4 >= irow3 THEN
  •    ...
  • END IF
helmut

Für mich ist die Möglichkeit in Excel an Zellen und Bereichen Namen zu vergeben die wichtigste Funktionalität.
Sie macht Formeln und den VBA-code verständlicher. Für Makros gilt die Regel: "Nur über benannte Bereiche auf den Inhalt der Zellen zugreifen."
Und wofür sind Regeln da? Um nachzudenken bevor man sie bricht.





[-] Folgende(r) 1 Nutzer sagt Danke an Ego für diesen Beitrag:
  • tmessers
Top
#8
Hallo tmessers

sorry, hab ein zweites Mal auf antworten gedrückt.
helmut

Für mich ist die Möglichkeit in Excel an Zellen und Bereichen Namen zu vergeben die wichtigste Funktionalität.
Sie macht Formeln und den VBA-code verständlicher. Für Makros gilt die Regel: "Nur über benannte Bereiche auf den Inhalt der Zellen zugreifen."
Und wofür sind Regeln da? Um nachzudenken bevor man sie bricht.





Top
#9
@Atilla


Ich habe eine Excel-Datei (XX). In dieser befindet sich der Code, der die geschlossene Datei (YY) öffnet.

In dieser zu öffnenden Datei (YY) befinden sich 13 Tabellenblätter
Das erste ist für mich nicht relevant. Die 12 folgenden Sheets entsprechen den 12 Monaten des Jahres. 

In einem Userform in der Datei XX gebe ich Datum1 und Datum 2 ein.
Mein Code soll nun die Tabellenblätter (2) bis (13) in YY nach dem Datumsbereich durchsuchen.
Danach soll dieser Bereich in XX kopiert werden.


Wie bereits geschrieben, funktioniert der Code, wenn ich nur ein Tabellenblatt durchsuchen muss.

Gruß

tmessers
Top
#10
Hallo,

was Du beachten und/oder ergänzen solltest hat Helmut schon erklärt.

Da Du dich in der aktiven Mappe in den selectierten Tabellen bewegst,
ginge unter Berücksichtigung der von Helmut erwähnten Dinge folgendes:


Code:
For i = 2 To Sheets.Count
 irow3 = 0
 irow4 = 0
 Sheets(i).Select

 For Each zelle3 In Range(Cells(8, 1), Cells(Rows.Count, 1).End(xlUp))
   If Cells(zelle3.Row, 1) = Datum1 Then
     irow3 = zelle3.Row
   End If
 Next zelle3
 
 For Each zelle4 In Range(Cells(8, 9), Cells(Rows.Count, 1).End(xlUp))
   If Cells(zelle4.Row, 1) = Datum2 Then
     irow4 = zelle4.Row
   End If
 Next zelle4

 If irow3 * irow4 > 0 Then
   Range(Cells(irow3, 1), Cells(irow4, 9)).Copy
 End If

Next i
Gruß Atilla
[-] Folgende(r) 1 Nutzer sagt Danke an atilla für diesen Beitrag:
  • tmessers
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste