Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
504to508
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
504to508
504to508
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Blätter in Excel Datei hintereinander ansprechen

Blätter in Excel Datei hintereinander ansprechen
27.10.2004 09:05:29
Eva
Hallo,
mit folgendem Code lese ich Daten aus einer externen Excel Datei aus. Mein Problem liegt beim Definieren des automatischen Zugriffs auf hintereinander liegenden Blättern nach dem wsOverview. Es folgen etwa 44 weitere Blätter, die ich nach dem Muster ansprechen möchte.
wsOverview = tbl01
if ... then
tbl01=tbl01+ (1?)
end if
Wie müsste ich also vorgehen?
Danke,
Eva
Dim wsOverview As Object
Dim wsAuslesenBSC_Abt As Object
Dim ZeileActual As Long
Dim ZeileLower As Long
Dim ZeileUpper As Long
Dim ZeileAuslesen As Long
Dim wbStandortziele As Object

Set wsOverview = Workbooks("Template_IFD_Standortziele_04_05.xls").Worksheets("Overview")
Set wsAuslesenBSC_Abt = Workbooks("Risikoverfolgung07102004.xls").Worksheets("Auslesen BSC_Abt")
Set wbStandortziele = Workbooks("Template_IFD_Standortziele_04_05.xls")

ZeileAuslesen = 6
wbStandortziele.wsOverview = tbl01

For ZeileActual = 9 To 259 Step 5
ZeileLower = ZeileActual + 4
ZeileUpper = ZeileActual + 3


If wsOverview.Cells(ZeileUpper, 13) > wsOverview.Cells(ZeileLower, 13) Then
'rot
If wsOverview.Cells(ZeileActual, 13) wsOverview.Cells(ZeileActual, 13).Copy
wsAuslesenBSC_Abt.Cells(ZeileAuslesen, 4).PasteSpecial Paste:=xlValues
wsAuslesenBSC_Abt.Cells(ZeileAuslesen, 4).Select
Selection.FormatConditions.Delete
Selection.Interior.ColorIndex = 3
wsOverview.Range(wsOverview.Cells(ZeileActual, 2), wsOverview.Cells(ZeileActual, 3)).Copy
wsAuslesenBSC_Abt.Cells(ZeileAuslesen, 1).PasteSpecial Paste:=xlValues
wsOverview.Cells(ZeileActual, 5).Copy
wsAuslesenBSC_Abt.Cells(ZeileAuslesen, 3).PasteSpecial Paste:=xlValues

'Auslesen der sheets erst über Auflösung der Zellverbindung mgl.
ws9.Activate
ws9.Range("I36:R36").Select
With Selection
.Orientation = 0
.AddIndent = False
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
ws9.Range("I36,M36,S36,T36").Copy
wsAuslesenBSC_Abt.Range("F6").PasteSpecial Paste:=xlValues


ZeileAuslesen = ZeileAuslesen + 1
End If

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
For Each WS in ThisWorkbook.Worksheets
ChrisL
Hi Eva
Den Code habe ich nicht nachvollzogen, aber so kannst du alle Tabellenblätter ansprechen...

Sub t()
Dim WS As Worksheet
For Each WS In ThisWorkbook.Worksheets
MsgBox WS.Name
Next WS
End Sub

Gruss
Chris
AW: For Each WS in ThisWorkbook.Worksheets
27.10.2004 09:56:15
Eva
Hallo Chris,
mit dem Code bewege ich mich schon in einer For ... Next Schleife, sodass dein Vorschlag mit For each meine eigentliche For ... Next Schleife konterkariert. Der Sprung zum nächsten Tabellenblatt soll auch erst mit dem nächsten Durchlauf der For ... Next Schleife geschehen. Gibt es eine andere Möglichkeit?
im wsOverview As Object
Dim wsAuslesenBSC_Abt As Object
Dim ZeileActual As Long
Dim ZeileLower As Long
Dim ZeileUpper As Long
Dim ZeileAuslesen As Long
Dim wbStandortziele As Object
Set wsOverview = Workbooks("Template_IFD_Standortziele_04_05.xls").Worksheets("Overview")
Set wsAuslesenBSC_Abt = Workbooks("Risikoverfolgung07102004.xls").Worksheets("Auslesen BSC_Abt")
Set wbStandortziele = Workbooks("Template_IFD_Standortziele_04_05.xls")
ZeileAuslesen = 6
wbStandortziele.wsOverview = tbl01
For ZeileActual = 9 To 259 Step 5
ZeileLower = ZeileActual + 4
ZeileUpper = ZeileActual + 3
If wsOverview.Cells(ZeileUpper, 13) > wsOverview.Cells(ZeileLower, 13) Then
'rot
If wsOverview.Cells(ZeileActual, 13) wsOverview.Cells(ZeileActual, 13).Copy
wsAuslesenBSC_Abt.Cells(ZeileAuslesen, 4).PasteSpecial Paste:=xlValues
wsAuslesenBSC_Abt.Cells(ZeileAuslesen, 4).Select
Selection.FormatConditions.Delete
Selection.Interior.ColorIndex = 3
wsOverview.Range(wsOverview.Cells(ZeileActual, 2), wsOverview.Cells(ZeileActual, 3)).Copy
wsAuslesenBSC_Abt.Cells(ZeileAuslesen, 1).PasteSpecial Paste:=xlValues
wsOverview.Cells(ZeileActual, 5).Copy
wsAuslesenBSC_Abt.Cells(ZeileAuslesen, 3).PasteSpecial Paste:=xlValues
'Auslesen der sheets erst über Auflösung der Zellverbindung mgl.
ws9.Activate
ws9.Range("I36:R36").Select
With Selection
.Orientation = 0
.AddIndent = False
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
ws9.Range("I36,M36,S36,T36").Copy
wsAuslesenBSC_Abt.Range("F6").PasteSpecial Paste:=xlValues
ZeileAuslesen = ZeileAuslesen + 1
End If
Danke und Gruß,
Eva
Anzeige
AW: For Each WS in ThisWorkbook.Worksheets
ChrisL
Hi Eva
Etwas schwierig zu beantworten, wenn man den Zusammenhang nicht kennt. Alles was ich erkenne ist ein For ohne Next.
Vielleicht kannst du mal ein vereinfachtes Beispiel im Anhang bereitstellen.
Gruss
Chris
AW: For Each WS in ThisWorkbook.Worksheets
27.10.2004 10:20:35
Eva
Hallo Chris,
vielleicht können wir das Hochladen umgehen. Mein Anliegen liegt im Auslesen von Werten aus dem Grunddatenblatt wbStandortziele.wsOverview. Über if ... then umgehe ich das Auslesen bedingter Formatierungen in der ZeileActual, die immer der Ausgangspunkt für ein eventuelles Auslesen (im Falle von kritischen, d.h. gelben und roten Kennzahlen)ist. Die For ... Next Schleife automatisiert ein eventuelles Auslesen, weil die Werte in ZeileActual aller 5 Schritte nach dem gleichen Muster zu prüfen sind.
Innerhalb der For ... Next Schleife haben die if ... then Anweisungen das Ziel die gelben bzw. roten Kennzahlen zu finden und zugehörige Werte in eine externe Datei (Risikoverfolgung) einzulesen.
Mein Problem liegt bei der Anweisung:
'Auslesen der sheets erst über Auflösung der Zellverbindung mgl.
wbStandortziele.Activate
ws9.Range("I36:R36").Select 'bei Monatsabfrage gleich die ganze mögliche Matrix ansprechen
With Selection
.Orientation = 0
.AddIndent = False
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
ws9.Range("I36,M36,S36,T36").Copy
wsAuslesenBSC_Abt.Range("F6").PasteSpecial Paste:=xlValues
Sobald durch die For ... next Schleife ein neuer Werte aus ZeileActual geprüft wird, soll auch in der obigen Anweisung eine Tabelle (ws9 + 1) weitergerückt werden, da weitere auszulesende Werte zu dem Wert aus ZeileActual dort abgelegt sind.
Die Reihenfolge der Tabellen ist folgendermaßen: Overview, Liefertreue Logik usw. (44 tbl insgesamt).
hier der vollständige Code (natürlich mit next ...):

Sub Auslesen()
Dim wsOverview As Object
Dim wsAuslesenBSC_Abt As Object
Dim ZeileActual As Long
Dim ZeileLower As Long
Dim ZeileUpper As Long
Dim ZeileAuslesen As Long
Dim wbStandortziele As Object
Dim wsLiefertreue As Object
Dim tbl01 As Long
Set wsOverview = Workbooks("Template_IFD_Standortziele_04_05.xls").Worksheets("Overview")
Set wsAuslesenBSC_Abt = Workbooks("Risikoverfolgung07102004.xls").Worksheets("Auslesen BSC_Abt")
Set wbStandortziele = Workbooks("Template_IFD_Standortziele_04_05.xls")
Set wsLiefertreue = Workbooks("Template_IFD_Standortziele_04_05.xls").Worksheets("Liefertreue Logik")
ZeileAuslesen = 6
wbStandortziele.wsLiefertreue = tbl01
tbl01 = 1
For ZeileActual = 9 To 259 Step 5
ZeileLower = ZeileActual + 4
ZeileUpper = ZeileActual + 3
If wsOverview.Cells(ZeileUpper, 13) > wsOverview.Cells(ZeileLower, 13) Then
'rot
If wsOverview.Cells(ZeileActual, 13) < wsOverview.Cells(ZeileLower, 13) Then
wsOverview.Cells(ZeileActual, 13).Copy
wsAuslesenBSC_Abt.Cells(ZeileAuslesen, 4).PasteSpecial Paste:=xlValues
wsAuslesenBSC_Abt.Cells(ZeileAuslesen, 4).Select
Selection.FormatConditions.Delete
Selection.Interior.ColorIndex = 3
wsOverview.Range(wsOverview.Cells(ZeileActual, 2), wsOverview.Cells(ZeileActual, 3)).Copy
wsAuslesenBSC_Abt.Cells(ZeileAuslesen, 1).PasteSpecial Paste:=xlValues
wsOverview.Cells(ZeileActual, 5).Copy
wsAuslesenBSC_Abt.Cells(ZeileAuslesen, 3).PasteSpecial Paste:=xlValues
'Auslesen der sheets erst über Auflösung der Zellverbindung mgl.
wbStandortziele.Activate
tbl01.Range("I36:R36").Select   'bei Monatsabfrage gleich die ganze mögliche Matrix ansprechen
With Selection
.Orientation = 0
.AddIndent = False
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
tbl01.Range("I36,M36,S36,T36").Copy
wsAuslesenBSC_Abt.Range("F6").PasteSpecial Paste:=xlValues
tbl01 = tbl01 + 1
ZeileAuslesen = ZeileAuslesen + 1
End If
'gelb
End If
If wsOverview.Cells(ZeileUpper, 13) < wsOverview.Cells(ZeileLower, 13) Then
'rot
If wsOverview.Cells(ZeileActual, 13) > wsOverview.Cells(ZeileLower, 13) Then
wsOverview.Cells(ZeileActual, 13).Copy
wsAuslesenBSC_Abt.Cells(ZeileAuslesen, 4).PasteSpecial Paste:=xlValues
wsAuslesenBSC_Abt.Cells(ZeileAuslesen, 4).Select
Selection.FormatConditions.Delete
Selection.Interior.ColorIndex = 3
ZeileAuslesen = ZeileAuslesen + 1
End If
'gelb
End If
If wsOverview.Cells(ZeileUpper, 13) = wsOverview.Cells(ZeileLower, 13) Then
wsOverview.Cells(ZeileActual, 13).Copy
wsAuslesenBSC_Abt.Cells(ZeileAuslesen, 4).PasteSpecial Paste:=xlValues
wsAuslesenBSC_Abt.Cells(ZeileAuslesen, 4).Select
Selection.FormatConditions.Delete
Selection.Interior.ColorIndex = 7
ZeileAuslesen = ZeileAuslesen + 1
End If
Next ZeileActual
End Sub

Mit großem Dank,
Eva
Anzeige
AW: For Each WS in ThisWorkbook.Worksheets
ChrisL
Hi Eva
Für dich ist vielleicht alles ganz logisch, aber mir fällt es schwer mit vernünftigem Aufwand das Beispiel zu rekonstruieren.
Aber ich verstehe ganz grundsätzlich nicht, wieso du nicht nach folgendem Muster vorgehen kannst.

Sub t()
Dim WS As Worksheet
Dim iZeile As Integer
For Each WS In ThisWorkbook.Worksheets
For iZeile = 9 To 259 Step 5
If WS.Cells(iZeile, 9) = "Bedingung" Then
' blabla
End If
Next iZeile
Next WS
End Sub

Gruss
Chris
AW: For Each WS in ThisWorkbook.Worksheets
27.10.2004 11:00:06
Eva
Hallo Chris,
alles klar.
Wenn ich dein Beispiel deute, dann durchläuft Excel die innere Schleife und liest Daten aus. Sobald aber die nächste iZeile im wsOverview (Grundblatt der Datei) angesprochen wird, erfolgt kein Ansprechen eines nachfolgenden sheets.
Muster
iZeile = 9
Bedingung bla bla prüfen
eine Bedingung trifft zu, sodass wsLiefertreue (liegt nach wsOverview) angesprochen wird
next
iZeile = 14
Bedingung bla bla prüfen
Bedingung trifft wieder zu, nun aber wsForecast (liegt nach wsLiefertreue) ansprechen
Im wsOverview habe ich nach dem Muster die For ... next Schleife aufgebaut, wobei die Zeile ZeileAuslesen, die sich ähnlich den worksheets ändert, wenn die nächste iZeile (bei mir ZeileActual) durch for next angesprochen wird. Nur lässt sich das leichter definieren über
ZeileAuslesen = 6
For ZeileActual = 9 To 259 Step 5
'bla bla
ZeileAuslesen = ZeileAuslesen + 1
next ZeileActual
Geht das bei den ws nicht auch abzubilden?
---Eva
Anzeige
AW: For Each WS in ThisWorkbook.Worksheets
ChrisL
Hi Eva
neues Beispiel...

Sub t()
Dim WS As Worksheet
Dim iZeile As Integer
For Each WS In ThisWorkbook.Worksheets
If WS.Name <> "Overview" Then
For iZeile = 9 To 259 Step 5
If WS.Cells(iZeile, 9) = "Bedingung" Then Exit For
Next iZeile
End If
Next WS
End Sub

Das Blatt "Overview" muss vermutlich ausgeschlossen werden. Wenn Bedingung erfüllt, verlässt er die For..Next Schleife (iZeile) und macht mit dem nächsten Blatt weiter.
Gruss
Chris
Ausschluss eines weiterer ws
27.10.2004 11:50:12
Eva
Hi Chris,
ich setzes es grad um
Habe noch ein ws, dass auszuschließen ist; Excel nimmt aber diesen Ausdruck nicht an If wsStandort.Name "Overview" And "How to use" Then.
Wo liegt der Trick nun?
Gruß,
Eva
Anzeige
AW: Ausschluss eines weiterer ws
ChrisL
Hi Eva
If WS.Name "A" And WS.Name "B" Then
Gruss
Chris
AW: Ausschluss eines weiterer ws
27.10.2004 13:07:27
Eva
Hallo Chris,
ich kann die for ... each Schleife nicht nachvollziehen.
Es gibt schon ein Problem beim Ansprechen von wsStandort (bei dir ws)
Beim Überwachen der Prozedur zeigt sich, dass wsStandort von Excel nicht erkannt wird.
Eine Definierung meinerseits schlug fehl ( wsStandort = Workbooks("Template_IFD_Standortziele_04_05.xls").Sheets)
Danke im Voraus (mal wieder)
Eva

Sub Auslesen()
Dim wsOverview As Object
Dim wsAuslesenBSC_Abt As Object
Dim ZeileActual As Long
Dim ZeileLower As Long
Dim ZeileUpper As Long
Dim ZeileAuslesen As Long
Dim wbStandortziele As Object
Dim wsStandort As Worksheet
Set wsOverview = Workbooks("Template_IFD_Standortziele_04_05.xls").Worksheets("Overview")
Set wsAuslesenBSC_Abt = Workbooks("Risikoverfolgung07102004.xls").Worksheets("Auslesen BSC_Abt")
Set wbStandortziele = Workbooks("Template_IFD_Standortziele_04_05.xls")
ZeileAuslesen = 6
For Each wsStandort In wbStandortziele.Worksheets
If wsStandort.Name <> "Overview" And wsStandort.Name <> "How to use" Then
For ZeileActual = 9 To 259 Step 5
ZeileLower = ZeileActual + 4
ZeileUpper = ZeileActual + 3
If wsOverview.Cells(ZeileUpper, 13) > wsOverview.Cells(ZeileLower, 13) Then
'rot
'Auslesen der sheets erst über Auflösung der Zellverbindung mgl.
wsStandort.Range("I36:R36").Select
With Selection
.Orientation = 0
.AddIndent = False
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
wsStandort.Range("I36,M36,S36,T36").Copy
wsAuslesenBSC_Abt.Range("F6").PasteSpecial Paste:=xlValues
ZeileAuslesen = ZeileAuslesen + 1
Exit For
End If
End If
Next ZeileActual
End If
Next wsStandort
End Sub

Anzeige
AW: Ausschluss eines weiterer ws
ChrisL
Hi Eva
Die Mappe solltest als Workbook und nicht als Object deklarieren.
Ansonsten kann ich den Fehler nicht nachvollziehen.
Hier nochmals ein Beispiel.

Sub t()
Dim wbStandortziele As Workbook
Dim wsStandort As Worksheet
Set wbStandortziele = Workbooks("Template_IFD_Standortziele_04_05.xls")
For Each wsStandort In wbStandortziele.Worksheets
MsgBox wsStandort.Name
Next wsStandort
End Sub

Gruss
Chris
AW: Blätter in Excel Datei hintereinander ansprechen
Joachim
Hallo Eva,
eine Schleife durch alle Blätter könnte so aussehen :
For a = 1 To Sheets.Count
Sheets(a).Select
Next a
Gruß
Joachim
Anzeige
AW: Blätter in Excel Datei hintereinander ansprechen
27.10.2004 10:04:15
Eva
Hallo Joachim,
danke für deinen Hinweis. Nur verwende ich in meinem Code schon eine For ... Next Schleife, sodass eine innere Schleife nach diesem Muster mein Anliegen aushöhlt.
Gibt es noch weitere Möglichkeiten?
Danke,
Eva

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige