Informationen und Beispiele zum Thema MsgBox | |
---|---|
![]() |
MsgBox-Seite mit Beispielarbeitsmappe aufrufen |
Betrifft: Anzeigen von Tabellenbereichen
von: jeron
Geschrieben am: 20.01.2010 11:09:32
Hallo liebe Excelfreunde,
ich habe ein einfaches Problem, dass ich schon laienhaft gelöst habe, hätte aber gerne noch eine
Anregung zur Optimierung.
Ich habe im Tabellenblatt 1 eine Drop Down Liste ( KW1, KW2, KW3...KW52) in der Kalenderwochen angezeigt werden.
Für jede Kalenderwoche soll jetzt ein Bereich aus einem anderen Tabellenblatt angezeigt werden.
Wichtig hierbei ist zu wissen, dass die angezeigten Bereiche nicht gleich groß sind, ich also gerne mit einer Funktion arbeiten würde, die mir den Inhalt nur anzeigt und nicht einfach den Inhalt des Bereiches kopiert und mir an meiner Anzeigestelle (Tabelle1 B21:I xx) einfügt.
Wenn Auswahl KW1: Dann Anzeigen Bereich aus Tabellenblatt 3 ( B5:I18) in Tabellenblatt 1 B21: I xx
Wenn Auswahl KW2: Dann Anzeigen Bereich aus Tabellenblatt 3 ( B22:I34) in Tabellenblatt 1 B21: I xx
Wenn Auswahl KW3: Dann Anzeigen Bereich aus Tabellenblatt 3 ( B37:I53) in Tabellenblatt 1 B21: I xx
...
...
Bis KW53
Ich habe momentan mit Copy und Paste Makro und If Else, Else if gearbeitet. Finde das aber nicht sehr schön.
Ich würde gerne mit Select Case Arbeiten und mit der besagten Anzeigefunktion
brauche hierzu eine Hilfestellung bei der Definition:
Es können nämlich 3 Variablen vorliegen die ich per Case bestimmen muss
1. Die Arbeitsmappe der Quellinformation
2. Das Tabellenblatt der Quellinformation
3. Der spezielle Bereich der Quellinformation
Für jede Anregung und Hilfestellung bin ich sehr dankbar.
Viele Grüße aus München,
Jeron
Betrifft: AW: Anzeigen von Tabellenbereichen
von: fcs
Geschrieben am: 20.01.2010 13:48:44
Hallo Jeron,
was meinst du mit der Anzeigefunktion?
Ansonsten ist es ja der Wahnsinn was du da im Code machen willst.
Den zu kopierenden Bereich für 52 KW, für mehrer Dateien und ggf. mehrere Tabellenblätter festzulegen.
Da die Menge an Code-text, die du in einem Modul schreiben kannst begrenzt ist, könnte es da Probleme geben.
Besser und pflegeleichter ist es, diese Informationen in einem Tabellenblatt zu hinterlegen und diese Tabelle nach KW, Dateiname, Tabellenblatt zu durchsuchen und den Bereich auszulesen.
Eine Select Case Kontruktion kann wie folgt aus sehen -aber wie geschrieben- bei deinem Vorhaben der schiere Wahnsinn.
Gruß
Franz
Sub Test() Dim sKW As String, sBereich As String Dim sDatei As String Dim sTab As String Dim wks As Worksheet Set wks = ActiveSheet sKW = wks.Range("C2") sDatei = LCase(wks.Range("C3")) 'Dateiname in Kleinbuchstaben sTab = LCase(wks.Range("C4")) 'Tabellenname in Kleinbuchstaben Select Case sKW Case "KW1" Select Case sDatei Case "exceldatei01.xls" Select Case sTab Case "tabelle1": sBereich = "B5:B18" Case "tabelle2": sBereich = "B5:B22" '... usw End Select Case "exceldatei02.xls" Select Case sTab Case "tabelleA": sBereich = "B5:B22" Case "tabelleB": sBereich = "B5:B13" '... usw End Select '... usw End Select Case "KW2": sBereich = "B22:I34" Select Case sDatei Case "exceldatei01.xls" Select Case sTab Case "tabelle1": sBereich = "B5:B18" Case "tabelle2": sBereich = "B5:B22" '... usw End Select Case "exceldatei02.xls" Select Case sTab Case "tabelleA": sBereich = "B5:B22" Case "tabelleB": sBereich = "B5:B13" '... usw End Select '... usw End Select '... usw End Select If sBereich <> "" Then With wks 'Altdaten löschen .Range(.Range("B21"), .Range("B21").End(xlDown).Offset(0, 7)).ClearContents Workbooks(sDatei).Worksheets(sTab).Range(sBereich).Copy .Range("B21").PasteSpecial Paste:=xlPasteFormats .Range("B21").PasteSpecial Paste:=xlPasteValues Application.CutCopyMode = False End With Else MsgBox "Für """ & sKW & """ keine Übereinstimmung in Case-Anweisungen gefunden.", _ vbInformation + vbOKOnly, "Daten-Anzeige" End If End Sub
Betrifft: AW: Anzeigen von Tabellenbereichen
von: jeron
Geschrieben am: 20.01.2010 14:47:09
Hallo Franz,
ja das sieht doch super aus.
Ich glaube aber, dass ein Missverständins vorliegt.
Es gibt 52 Kalenderwochen mit 52 unterschiedlichen Bereichen die sich auf verschiedene Tabellenblätter in nur einer Mappe verteilen.
Die Quelle ist also nur eine bestimmte Arbeitsmappe.
Das heißt ein Case hat eigentlich keine drei Variablen sondern einen festen Wert für die Info Quelldatei, Tabellenblatt und die Info Bereich.
Ich muss demnach nur einmal für alle 52 Cases nur eine QuellArbeitsmappe definieren und dann
für jeden Case halt das bestimmte Tabellenblatt und den bestimmten Bereich:
Ungfähr so:
Für alle Cases gilt die Quelldatei "dateiname auch Pfad möglcih? "
Der Case soll als Grundlage die Info der KW aus der Eingabe ComboBox 1 ziehen.
wenn ComboBox: " KW1"
dann Case "KW1"
mit Tabellenblatt " "
und Bereich " "
der Bereich soll kopiert werden
und in Tabellenblatt 1 ab A41 eingefügt werden.
Bei erneuter Auswahl wird kopierter Bereich gelöscht und ein anderer Inhalt erneut hineinkopiert.
Ich bräuchte bitte deine Hilfe bei der Erstellung der Struktur für die Select Case Anwendung für die Cases die ich definieren muss.
Ich finde die Idee mit der Anlegung einer Quellliste auch nicht schlecht und dann halt mit Filtern zu Arbeiten. Möchte aber hier mit Select Case arbeiten.
Mit Anzeigefunktion meinte ich das der ausgewählte Bereich (in Abhängigkeit der KW) kopiert wird und mir dann immer an einer Stelle in Tabellenblatt1 angezeigt wird.
Ich danke dir schon mal für deine Hilfe und hoffe du kannst mir noch mal unter die Arme greifen.
Beste Grüße,
Jeron
Betrifft: AW: Anzeigen von Tabellenbereichen
von: fcs
Geschrieben am: 21.01.2010 07:20:03
Hallo Jeron,
dann wird die Struktur der SELECT-Anweisung natürlich einfacher und bleibt vom Umfang her im Rahmen.
Ich hab die reine Select-Anweisung auch um das notwendige Drumherum ergänzt, so dass Eingabefehler bzw. fehlende Tabellenblätter im Makro kontrolliert abgefangen werden.
Gruß
Franz
https://www.herber.de/bbs/user/67369.txt
Betrifft: AW: Anzeigen von Tabellenbereichen
von: jeron
Geschrieben am: 21.01.2010 17:43:27
Hallo Franz,
es klappt einfach super und ich bin total happy.
Ich danke dir vielmals für deine Hilfe.
Echt ein geiles Makro, das du da gebaut hast!!
Beste Grüße aus München,
Jeron Bitto