Live-Forum - Die aktuellen Beiträge
Datum
Titel
29.03.2024 13:14:12
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1416to1420
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
Suche über mehrere Tabellenblätter
28.03.2015 13:24:47
Nadja
Einen schönen guten Tag,
ich sitze seit einiger Zeit ratlos über meinem VBA Code und hoffe sehr, dass ihr mir helfen könnt.
Mein Problem: Es soll eine Übersicht pro Kalenderwoche über die Aufgaben verschiedener Mitarbeiter erstellt werden.
Ich habe in einem Excelsheet 12 Tabellenblätter, die mit den Monatsnamen benannt sind. Jeder Monat besteht aus einer Tabelle, in dem die Namen der Mitarbeiter in der ersten Spalte stehen. Daneben stehen die Aufgaben für jeden Tag des Monats. In der Zeile 7 jedes Blattes sind die KW angegeben. Ein weiteres Blatt nennt sich "Plan". Auf dieses Blatt sollen je nach Auswahl der KW die Namen der MA und die Aufgaben der jeweiligen KW kopiert werden. Prinzipiell funktioniert mein Code. Über eine InputBox (die sich in jedem Monat befindet) wird die gewünschte KW abgefragt. Allerdings funktioniert der Code nur, wenn ich eine KW aus dem aktuellen Blatt abfrage. Ich möchte jedoch, dass ich auch bspw. wenn ich im TB März bin den Plan für KW01 erstellen lassen kann. Meine Versuche sind bisher immer gescheitert, weil bei jeder Änderung des Codes erscheint: "Laufzeitfehler 91 - Objektvariable oder With-Blockvariable nicht festgelegt." Markiert wird: " gefundeneKW = Rows(7).Find(gesuchteKW).Select"
Anbei mein Original Code (noch für die Suche im aktuellen Blatt ausgelegt):
Sub Planerstellen()
Dim gesuchteKW As Integer
gesuchteKW = InputBox("KW eingeben", "Plan erstellen")
If gesuchteKW > 0 And gesuchteKW 

Ich hoffe sehr, dass ich mich einigermaßen verständlich ausgedrück habe. Und hoffe auf eure Ratschläge.
Vielen Dank im Voraus! Grüße Nadja

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Suche über mehrere Tabellenblätter
28.03.2015 15:09:00
Michael
Hallo Nadja,
mich wundert, daß es überhaupt geht, denn find gibt ein Range-Objekt zurück...
Function Find(What, [After], [LookIn], [LookAt], [SearchOrder], [SearchDirection As XlSearchDirection = xlNext], [MatchCase], [MatchByte]) As Range
... das Du einer integer-Variablen zuweist.
Hier: https://www.herber.de/mailing/vb/html/xlmthfind.htm findest Du einen Codeschnipsel für die Standardanwendung der Suchfunktion.
Es muß natürlich abgefragt werden, ob der Wert überhaupt gefunden wurde, und wenn Du das über mehrere Blätter haben möchtest, mußt Du prinzipiell mit einer Schleife in jedem einzelnen Blatt suchen.
Man könnte ein (verstecktes?) Blatt anlegen mit einer Referenz, welche KW in welchem Monat steht, um dort nach der KW zu suchen und ins richtige Blatt zu springen.
Oder man ermittelt aus der KW ein Datum, aus dem man den Monat extrahiert; Formeln dazu finden sich hier: http://www.excelformeln.de/formeln.html?welcher=186
Ausprogrammieren mag ich es nicht ohne Beispieldatei.
Eine Beispieldatei finde ich auch insofern wichtig, da mir nicht klar ist, wie Du damit umgehst, wenn sich eine KW über einen Monatwechsel erstreckt.
Schöne Grüße,
Michael

Anzeige
AW: Suche über mehrere Tabellenblätter
28.03.2015 18:20:26
firmus
Hallo Nadja,
Deine Beschreibung ist mir zu ungenau, um Dich mit Deinem Layout unterstützen zu können.
1. Im Monatsblatt ist in Zeile 7 die Wochennummer. Gibt es pro Monat nur eine Woche?
Was ist mit der zweiten und weiteren Wochen im gleichen Monat?
1. Wie kann ich erkennen welche Tätigkeit welcher Mitarbeiter an welchem Tag zu verrichten hat.
Genauer: Wie kann ich das per VBA abgreifen? In welchen Zellen steht welchen Info?
2. Wie sind die Monatsblätter ausgefüllt wenn eine Woche in einem Monat beginnt und im nächsten endet?
In Unkenntnis Deiner genauen Datenstruktur hier ein Ansatz, den ich wählen würde.
1. In jedem Monatsblatt ist pro Mitarbeiter, pro Tätigkeit eine Zeile.
Diese Zeile enthält
Spalte A: Name des MA,
Spalte B: Tag der Tätigkeit (tt.mm.jjjj),
Spalte C: Wochennummer (Formel)
Spalte D: Beschreibung der Tätigkeit
2. im Macro würde ich
a. alle zwölf Monatsblätter in ein Blatt "temp" kopieren (eine Schleife)
b. dieses Blatt "temp" sortieren nach Wochennr., Mitarbeiter, Datum der Tätigkeit, Tätigkeit
c. dann lässt sich ganz einfach aus dem Blatt "temp" Dein Blatt "Plan" erstellen
d. Blatt "temp" wieder loeschen.
Wenn Du Dir das Blatt "temp" sparen willst, wird es mit Wochen, die über die Monatsgrenze gehen,
aufwendiger. Sortierung müsste dann auch noch genauer überlegt werden.
Ich hoffe dieser Ansatz hilft Dir weiter, Zeit zum Kodieren habe ich im Moment leider nicht.
Gruß
Firmus

Anzeige
Zeig doch mal ne BspDatei ... owT
28.03.2015 18:27:33
Matthias

AW: Suche über mehrere Tabellenblätter
28.03.2015 22:22:24
firmus
Hallo Nadja,
habe mir die Klotze verkniffen.
Schau mal ob dies - konform zu meinen vorherigen Überlegungen - für Dich passend ist.
https://www.herber.de/bbs/user/96699.xlsm
Gruß
Firmus

Codevorschlag
30.03.2015 17:33:23
Erich
Hi Nadja,
schau dir diesen Code mal an:

Option Explicit
Sub Planerstellen2()
Dim varTmp, gesuchteKW As Integer
Dim colKW As Long, rngF As Range, gefundeneKW
Dim strM As String, datD As Date, datN As Date, wsQ As Worksheet
Dim colA As Long
varTmp = Application.InputBox("KW eingeben", "Plan erstellen2", Type:=2)
If varTmp = False Then Exit Sub
gesuchteKW = varTmp
If gesuchteKW > 0 And gesuchteKW  .Cells(1, 1) Then
MsgBox "Die Mappe für das Jahr " & Year(datD) & " wird benötigt."
Exit Sub
End If
Set wsQ = Worksheets(strM)                               ' Monatsblatt
varTmp = Application.Match(gesuchteKW, wsQ.Rows(7), 0)   ' suche KW
If IsNumeric(varTmp) Then
colKW = varTmp                                        ' KW-Fund-Spalte
wsQ.Range("C10:C51").Copy Destination:=.Cells(9, 3)   '.Range("c9")
wsQ.Range("C55:C89").Copy Destination:=.Cells(54, 3)  '.Range("c54")
datN = DateSerial(Year(datD), Month(datD) + 1, 1)     ' next Monats-1.
colA = 2 * Application.Min(7, datN - datD)            ' Anz. Spalten ( Year(datD) Then
MsgBox "Die Mappe für das Jahr " & Year(datN) & " wird benötigt."
Else
If colA 
Er basiert auf einigen Annahmen über die Struktur deiner Daten. Wir kennen deine Mappe ja nicht...
Eine Annahme: In Plan!A1 steht das Jahr (2015), das in der Mappe bearbeitet wird.
Weitere Annahme: Pro Woche werden außer den MA-Namen 14 Spalten kopiert, also 2 Spalten pro Tag.
Weitere Annahme: Anzahl und Reihenfolge der MA stimmen auf allen Blättern exakt überein.
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich
Anzeige

336 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige