Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1216to1220
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

Sheet finden

Sheet finden
Marco
Hallo liebe Excelfreunde,
ich habe wieder ein Problem.
Ich habe ca. 100 Excelsheets in einem Workbook. Im ersten Excelsheet habe ich in Spalte A
alle anderen Excelsheets namentlich erfaßt.
In Spalte B,C,D,E und F möchte ich die wichtigsten Daten aus den anderen Excelsheets aktuell
halten und in diesem Übersichts-Sheet einlesen.
Meine Frage ist mit welchem Syntax suche ich in dem ersten Übersichts-Sheet in Spalte A nach dem gerade geöffneten Sheet?
Ich hab da schon so viel probiert, aber es fehlt einfach ein bisschen :-(
vielen Dank
Marco

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Sheet finden
25.06.2011 08:39:03
Tino
Hallo,
könnte in etwa so funktionieren.
'kommt in ein Modul 
Sub Beispiel()
Dim varRow
With Sheets(1).UsedRange
    varRow = Application.Match(ActiveSheet.Name, .Columns(1), 0)
    If IsNumeric(varRow) Then
        MsgBox ActiveSheet.Name & " gefunden in" & vbCr & _
        .Columns(1).Cells(varRow, 1).Address(External:=True)
    Else
        MsgBox "nicht gefunden", vbExclamation
    End If
End With
End Sub
Gruß Tino
Anzeige
Blattnamen in Liste finden
25.06.2011 08:43:09
Erich
Hi Marco,
probier mal

Sub InBlattListe()
Dim varF As Variant, lngZ As Long
With Worksheets(1)
varF = Application.Match(ActiveSheet.Name, .Columns(1), 0)
If IsError(varF) Then
MsgBox ActiveSheet.Name & " fehlt in der Blattliste", vbCritical
Else
lngZ = CLng(varF)
MsgBox .Cells(lngZ, 1) & " steht in Zelle A" & lngZ
End If
End With
End Sub
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
AW: Sheet finden
25.06.2011 12:05:56
Marco
Hallo Tino, hallo Erich,
ich habe Eure beiden Programme getestet und es ist leider noch nicht das was ich wollte.
Ehrlich habe ich auch Euren Syntax noch nicht 100%ig verstanden. Da brauche ich noch ein paar Minuten.
Ich habe gerade einen Einsatz in der Firma und werde in ca. 2-3 Stunden wieder zu Hause sein.
Dann werde ich mich intensiver damit beschäftigen und melde mich noch einmal.
Ich möchte Euch beiden aber schon jetzt recht herzlich für die schnelle Hilfe danken.
Viele Grüße
Marco
Anzeige
AW: Sheet finden
26.06.2011 09:32:19
Marco
Hallo noch einmal,
ich habe also beide Makros getestet leider ohne Erfolg.
Ich will versuchen meine Frage noch einmal zu erläutern, vielleicht liest ja hier hinten noch jemand.
Hier zunächst mein Code.
Sub Werte_sammeln()
Dim ws As Worksheet
Dim Zeile As Integer
Dim Letzte As Integer
Dim a As Integer
Worksheets("Ergebnis").Select
Zeile = 2                                         ' Zeile der Zielliste
For Each ws In ActiveWorkbook.Worksheets
x = ws.Name
If ws.Name  "Filter" And ws.Name  "Muster" And ws.Name  "Ergebnis" And ws.Name  " _
Bestellblatt" Then
Letzte = ws.Range("A200").End(xlUp).Row    ' letzte Zeile Filterkontrolle
Range("B" & Zeile) = ws.Range("A" & Letzte)  ' Datum letzter Filterkontrolle
Range("C" & Zeile) = ws.Range("B" & Letzte)  ' Name letzter Filterkontrolle
neuDatum = Range("B" & Zeile) + 92
Range("D" & Zeile) = neuDatum
ws.Range("H" & Letzte) = neuDatum
Range("G" & Zeile) = ws.Range("H" & Letzte)  ' Datum nächster Filterkontrolle
Letzte = ws.Range("I200").End(xlUp).Row      ' letzte Zeile Filterwechsel
Range("E" & Zeile) = ws.Range("I" & Letzte)  ' Datum letzter Filterwechsel
Range("F" & Zeile) = ws.Range("J" & Letzte)  ' Name letzter Filterwechsel
'Worksheets("ws.").Select
FWdatum = ws.Range("B" & 2)
Select Case FWdatum
Case "F4", "F5", "F6", "F7", "F8", "G4"
addTage = 365
Case "F9"
addTage = 730
Case "H13", "H14", "A-kohle"
addTage = 1825
End Select
neuDate = ws.Range("I" & Letzte) + addTage
ws.Range("L" & Letzte) = neuDate
Ab hier sollen dann die neu ermittelten Werte in dem Tabellenblatt in eine Übersichtsliste  ( _
Sheet Name  "Ergebnis") übertragen werden.
Worksheets("Ergebnis").Select
For a = 2 To 120 Step 1
If Cells(1, a) = ws Then
Range("G" & Zeile) = neuDate 'ws.Range("L" & Letzte + addTage) ' Datum nächster  _
Filterwechsel
'Zeile = Zeile + 1
Exit For
Next a
End If
End If
Next ws
End Sub

Es ist also notwendig, das der ws.name zunächst im sheet Ergebnis Spalte A gefunden wird.
Eigentlich liegt darin meine Schwierigkeit.
Vielleicht hat noch jemand Lust sich meines Problems anzunehmen
Einen schönen Sonntag
Marco
Anzeige
kein Erfolg? Was heißt das?
26.06.2011 11:36:53
Erich
Hi Marco,
"ich habe also beide Makros getestet leider ohne Erfolg" glaube ich dir nicht.
Wurde gar keine MsgBox angezeigt?
Wurde angezeigt, dass der Name des aktuellen Blatts nicht gefunden wird?
Welches Blatt war das aktive Blatt, als du die beiden Makros getestet hast?
Stand dieses Blatt in der Liste?
Zur Erinnerung: Du hattest uns gefragt:
"Meine Frage ist mit welchem Syntax suche ich in dem ersten Übersichts-Sheet in Spalte A nach dem gerade geöffneten Sheet?"
Den Code habe ich im Zusammenhang mit deiner Fragestellung nicht wirkllioch verstanden.
Du wolltest erst weiter unten im Code ermitteln, wo der Blattname in der Liste auftaucht.
Weit davor schreibst du aber schon Werte in Worksheets("Ergebnis"). Solltest du nicht erst ermitteln,
in welche Zeile die Werte geschrieben werden sollten? Vielleicht habe ich das nicht richtig verstanden.
In deiner Prozedur geht es auch nicht um das gerade geöffnete (aktive?) Blatt,
sondern um (fast) alle Blätter innerhalb einer Schleife. Diese Blätter müssen (und sollten) gar nicht aktiv sein.
Schau dir den folgenden Code mal an. Da sind auch weitere Fragen drin:

Option Explicit                     ' IMMER zu empfehlen!
Sub Werte_sammeln2()
Dim neuDatum, FWdatum, addTage, neuDate ' Warum waren diese nicht deklariert?
Dim ws As Worksheet
'  Dim Zeile As Integer  ' wird nicht mehr gebraucht
Dim Letzte As Integer
Dim a As Integer
Dim varF As Variant, lngZ As Long
Worksheets("Ergebnis").Select
'   Zeile = 2       ' Zeile der Zielliste wird ermittelt, als lngZ
For Each ws In ActiveWorkbook.Worksheets
'      x = ws.Name        ' wird gar nicht verwendet
If ws.Name  "Filter" And ws.Name  "Muster" And _
ws.Name  "Ergebnis" And ws.Name  " Bestellblatt " Then
' ------------------------------------------ Suche Blattnamen in Spalte A
varF = Application.Match(ws.Name, Columns(1), 0)
If IsError(varF) Then
MsgBox ws.Name & " fehlt in der Blattliste", vbCritical
Exit Sub          ' oder was soll dann passieren?
Else
lngZ = CLng(varF)
MsgBox Cells(lngZ, 1) & " steht in Zelle A" & lngZ
End If
' ------------------------------------------ Ende Suche
Letzte = ws.Range("A200").End(xlUp).Row      ' letzte Zeile Filterkontrolle
'statt   Range("B" & lngZ) = ws.Range("A" & Letzte)   ' Datum letzter Filterkontrolle
' besser und kürzer:
Cells(lngZ, 2) = ws.Cells(Letzte, 1)         ' Datum letzter Filterkontrolle
Range("C" & lngZ) = ws.Range("B" & Letzte)  ' Name letzter Filterkontrolle
neuDatum = Range("B" & lngZ) + 92
Range("D" & lngZ) = neuDatum
ws.Range("H" & Letzte) = neuDatum
Range("G" & lngZ) = ws.Range("H" & Letzte)  ' Datum nächster Filterkontrolle
Letzte = ws.Range("I200").End(xlUp).Row      ' letzte Zeile Filterwechsel
Range("E" & lngZ) = ws.Range("I" & Letzte)  ' Datum letzter Filterwechsel
Range("F" & lngZ) = ws.Range("J" & Letzte)  ' Name letzter Filterwechsel
'Worksheets("ws.").Select ' unnötig, das Blatt ist schon aktiv
FWdatum = ws.Range("B" & 2)
Select Case FWdatum
Case "F4", "F5", "F6", "F7", "F8", "G4"
addTage = 365
Case "F9"
addTage = 730
Case "H13", "H14", "A-kohle"
addTage = 1825
End Select
neuDate = ws.Range("I" & Letzte) + addTage
ws.Range("L" & Letzte) = neuDate
Range("G" & lngZ) = neuDate
End If
Next ws
End Sub
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: kein Erfolg? Was heißt das?
27.06.2011 06:50:13
Marco
Hallo Erich,
zunächst vielen Dank für Deine Hilfe. Ich weiß das mein Code nicht richtig rund war und die Fehler
die Du erkannt hast kannte ich teilweise auch.
Dein Code bricht allerdings an dieser Stelle immer ab
varF = Application.Match(ws.Name, Columns(1), 0)
If IsError(varF) Then
MsgBox ws.Name & " fehlt in der Blattliste", vbCritical
Für varF zeigt er mir immer Fehler 2042 Variant Error und danach die MSG Box Bestellblatt fehlt in der Blattliste.
Danach ist das Makro beendet.
Hast Du noch eine Idee?
vielen vielen Dank und viele Grüße
Marco
Anzeige
Leerzeichenproblem?
27.06.2011 07:42:40
Erich
Hi Marco,
hat dir die Meldung "Bestellblatt fehlt in der Blattliste" keinen Hinweis gegeben?
Im Code, den ich gepostet habe, standen vor und hinter Bestellblatt Leerzeichen,
die da wohl nicht hingehören, also " Bestellblatt " statt "Bestellblatt"
Teste mal, nachdem du die beiden Leerzeichen rausgenommen hast, also

If ws.Name  "Filter" And ws.Name  "Muster" And _
ws.Name  "Ergebnis" And ws.Name  "Bestellblatt" Then
Etwas Anderes:
Auf meine Fragen zum Test von Tinos und meinem Kurzcode hast du überhaupt nicht geantwortet.
Also nochmal:
"ich habe also beide Makros getestet leider ohne Erfolg" glaube ich dir nicht.
Wurde gar keine MsgBox angezeigt?
Wurde angezeigt, dass der Name des aktuellen Blatts nicht gefunden wird?
Welches Blatt war das aktive Blatt, als du die beiden Makros getestet hast?
Stand dieses Blatt in der Liste?
Hintergrund: In den beiden kurzen Codes konnte das Leerzeichenproblem beim Bestellblatt nicht auftreten,
weil diese Codes nur das gerade aktive Blatt unabhängig vom Namen verarbeiten.
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: Leerzeichenproblem?
27.06.2011 12:48:20
Marco
Hi Erich,
jetzt läuft Dein Code tatsächlich vielen Dank und vielen Dank auch für Deine Ausdauer mit mir.
Die beiden Leerzeichen waren tatsächlich die Ursache. Tja dafür sind meine Programmierkenntnisse
einfach zu schwach ausgeprägt. Ich müßte mich einfach mehr damit beschäftigen.
Nun bin ich endlich in der Lage mein Sheet Ergebnisse mit den richtigen Daten zu füllen.
Ich habe auch noch einmal Deinen ersten Code getestet.
Hier zeigt er mir bei varF auch Fehler 2042 und danach gleich die MSGBox fehlt in Blattliste.
Hier noch einmal der Code
Sub InBlattListe()
Dim varF As Variant, lngZ As Long
With Worksheets(1)
varF = Application.Match(ActiveSheet.Name, .Columns(1), 0)
If IsError(varF) Then
MsgBox ActiveSheet.Name & " fehlt in der Blattliste", vbCritical
Else
lngZ = CLng(varF)
MsgBox .Cells(lngZ, 1) & " steht in Zelle A" & lngZ
End If
End With
End Sub

Wahrscheinlich nimmt er sich als erstes eines der 4 Sheets, welche ich ausgeschlossen hatte.
Sicher ist es mein Fehler. Ich kann aber leider auch nicht sehen welches ActiveSheet.Name er nimmt.
Noch einmal herzlichsten Dank
Grüsse
Marco
Anzeige
ActiveSheet - was ist das?
27.06.2011 13:05:59
Erich
Hi Marco,
danke für deine Rückmeldung. Schön, dass es nun läuft!
Eine Bemerkung noch zum Test des kurzen Codes, die dir vielleicht beim Verständnis des Codes hilft:
Der Code verarbeitet das ActiveSheet. Das ist einfach nur das Blatt, das im Excelfenster "obenauf" angezeigt wird,
also momentan aktiv ist.
Du erkennst das auch an der Fettschrift des Blattnamens unten im Excel-Blattregister.
Also siehst du tatsächlich schon vor dem Makrostart, welches Blatt der kurze Code verwenden wird.
Wenn du vor dem Starten des Codes ein anderes Blatt aktivierst (auch mal eines, das in der Spalte-A-Liste steht),
dann wird der Code dessen Blattnamen suchen und viellelicht auch finden.
In jedem Fall wird der ActiveSheet.Name in einer MsgBox angezeigt. Du siehst ihn!
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: ActiveSheet - was ist das?
27.06.2011 16:29:58
Marco
Hi Erich,
danke für Deinen Hinweis, auch Dein zuerst geschicktes Makro funktioniert jetzt nach Deiner Erläuterung.
Jetzt habe ich also eine im Ergebnis tatsächlich vorhandenen Datei aktiviert getestet und es klappt.
Naja gibt noch ne Menge Sachen die ich nicht weiß.
Vielen herzlichen Dank das Du Dir soviel Zeit für mich genommen hast und hoffentlich treffen wir uns hier mal wieder.
Viele Grüße
Marco

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige