Frame in Excel mit Bildschirm teilen

Hy an euch,

ich würde gern in Excel soetwas wie ein Menü einbinden, d.h. auf der linken Seite wird ein Menü dauerhaft angezeigt, und bei einem jeweiligen Klick wird ein anderes Excelsheet auf der linken Seite angezeigt.

Habe es schon mit Menüpunkt „Fenster–>teilen“ versucht, jedoch wird im geteilten Fenster immer das gleiche Blatt angezeigt.(bzw. in beiden halt das selbe)

der Makrorecorder hilft da leider auch ni viel… :frowning:

Kann man, bzw. wenn ja wie, den Inhalt des geteilten Bildschirms ändern?

Danke im Voraus fürs Gedanken machen…:wink:

matzeerwin…

meinte natürlich rechts sollen die sheets neu angezeigt werden…

Hallo matzeerwin.

Wie das mit einem Frame gehen soll, da habe ich momentan keine Vorstellung davon. Hier aber etwas, das Dich möglicherweise interessieren könnte: Eine benutzerdefinierte Symbolleiste

Wenn Du das Beispiel ausprobieren möchtest, kannst Du folgenden Code ins Codefenster von „DieseArbeitsmappe“ kopieren:

Private Sub Workbook\_Activate()
 Application.CommandBars("MeineEigene").Enabled = True
End Sub

Private Sub Workbook\_BeforeClose(Cancel As Boolean)
 WorkbookClose = True
End Sub

Private Sub Workbook\_Deactivate()
 Application.CommandBars("MeineEigene").Enabled = False
 If WorkbookClose = True Then
 Application.CommandBars("MeineEigene").Delete
 End If
End Sub

Private Sub Workbook\_Open()
 Toolbar
End Sub

Danach müßtest Du noch ein Modul einfügen, in das der nachstehende Code gehört:

Public WorkbookClose As Boolean

Public tbrAppName As CommandBar
 Public mnu1 As CommandBarControl
 Public mnu11 As CommandBarButton
 Public mnu12 As CommandBarButton
 Public mnu2 As CommandBarControl
 Public mnu21 As CommandBarButton
 Public mnu22 As CommandBarButton

Sub Toolbar()

 Set tbrAppName = CommandBars.Add(Name:="MeineEigene", Position:=msoBarLeft, Temporary:=False)
 With tbrAppName

 Set mnu1 = .Controls.Add(Type:=msoControlPopup, Before:=.Controls.Count + 1)
 With mnu1
 .Caption = "Menü1"
 Set mnu11 = .Controls.Add(Type:=msoControlButton, ID:=1851)
 mnu11.Style = msoButtonCaption
 mnu11.Caption = "Button1.1"
 mnu11.OnAction = "Button11"
 Set mnu12 = .Controls.Add(Type:=msoControlButton, ID:=1851)
 mnu12.Style = msoButtonCaption
 mnu12.Caption = "Button1.2"
 mnu12.OnAction = "Button12"
 End With

 Set mnu2 = .Controls.Add(Type:=msoControlPopup, Before:=.Controls.Count + 1)
 With mnu2
 .Caption = "Menü2"
 Set mnu21 = .Controls.Add(Type:=msoControlButton, ID:=1851)
 mnu21.Style = msoButtonCaption
 mnu21.Caption = "Button2.1"
 mnu21.OnAction = "Button21"
 Set mnu22 = .Controls.Add(Type:=msoControlButton, ID:=1851)
 mnu22.Style = msoButtonCaption
 mnu22.Caption = "Button2.2"
 mnu22.OnAction = "Button22"
 End With
 .Visible = True
 End With

End Sub

Sub Button11()
 MsgBox "Button 1.1 wurde geklickt"
End Sub

Sub Button12()
 MsgBox "Button 1.2 wurde geklickt"
End Sub

Sub Button21()
 MsgBox "Button 2.1 wurde geklickt"
End Sub

Sub Button22()
 MsgBox "Button 2.2 wurde geklickt"
End Sub

Dann die Datei einmal speichern, Excel beenden und die Datei wieder öffnen.

Es erschein dann eine links fixierte Symbolleiste mit 2 Menüs und 4 Buttons.

Vielleicht kannst Du damit ja etwas anfangen.

VG
Carsten

Grüezi Erwin

ich würde gern in Excel soetwas wie ein Menü einbinden, d.h.
auf der linken Seite wird ein Menü dauerhaft angezeigt, und
bei einem jeweiligen Klick wird ein anderes Excelsheet auf der
linken Seite angezeigt.

Habe es schon mit Menüpunkt „Fenster–>teilen“ versucht,
jedoch wird im geteilten Fenster immer das gleiche Blatt
angezeigt.(bzw. in beiden halt das selbe)

Kann man, bzw. wenn ja wie, den Inhalt des geteilten
Bildschirms ändern?

Du könntest ein zweites Fenster darstellen lassen (mit Fenster/Neu) und in diesem dann ebenfalls ein Blatt deiner Datei anzeigen. Wenn Du die Fenster dann nebeneinander anordnest kannst Du die Grenzen so einstellen, dass das eine schmal und das andere breiter angezeigt wird.

Die Steuerung der Anzeige der Tabellenblätter kannst Du dann per VBA vornehmen.

Alternativ könntest Du auch eine Symbolleiste mit Buttons drauf erzeugen und diese am linken Bildschirmrand andocken, dann bist Du völlig unabhänig von den Fenstern.

Mit freundlichen Grüssen

Thomas Ramel

  • MVP für MS-Excel -

Hallo matzeerwin.

Ändert sich der Inhalt der Tabellen, die du dir einzeigen lassen willst?

Ich hätte noch eine - wahrscheinlich unkonventionelle - Methode

Erstelle dir als Tabelle1 deine Ansichtstabelle und richte dir dort das Fenster teilen ein. Das Menü könntest du ja zum Beispiel in Spalte A hineinschreiben. Jede Tabelle, die du dir nun rechts vom Menü anzeigen lassen möchtest erstellst du in einem Extra-Tabellenblatt.

Wenn du nun in deiner Übersichtstabelle die Tabelle2 sehen möchtest, lässt du dir einfach den ganzen Inhalt von Tabelle2 in deine Übersichtstabelle kopieren (ab Spalte B wenn in Spalte A das Menü ist). Das hängt aber natürlich sehr stark davon ab, was in Tabelle2 drin steht. Probleme kann es natürlich geben, wenn du Formel oder dergleichen hast, die du in der Übersicht benutzen möchtest. Ansonsten könnte das wie folgt aussehen:

Sub tab2_zeigen()

Sheets(2).Range(„A1:AA124“).Copy 'Tabelle2 ist im Tabellenblatt 2
Sheets(1).Range(„B1“).PasteSpecial Paste:=xlPasteValues, _ Operation:=xlNone, SkipBlanks:=False, Transpose:=False

End Sub

Hab ich mir grad so überlegt, müsste funktionieren, wobei hier wirklich nur die Werte kopiert werden. Range(„A1:AA124“) gibt dabei den Bereich in Tabelle2 an, den du dir ansehen möchtest - müsste angepasst werden. Insgesamt natürlich recht unflexibel.

Grüße, Aiko.

hy erstmal an euch…

vielen Dank für eure Antworten…hätte gar nicht gedacht, dass es gleich so viele verschiedene Antworten gibt… :smile:

zur Idee von Karsten:

Idee find ich erstmal klasse. wäre jetzt nur die Frage, ob es möglich ist, in dem Menü noch Unterpunkte anzuzeigen bzw. möglich wird es schon sein, nur wie…:wink:…brauche nämlich mehrere Ebenen im Menü…hab schon selber eins gebaut, was aussieht und funktioniert wie das im SAP…also mit nach unten aufklappen und so…(kann leider kein Bild reinstellen…)…aber wirklich klasse Idee, Danke noch mal…

zur Idee von Thomas
genau das habe ich gestern auch versucht…:smile:…mein Problem ist nur die beiden Fenster per VBA so zu ändern, dass die Titelzeile fehlt und möglichst noch der Fensterrand…also so, dass wirklich nur der inhalt sichtbar ist…weiter weiß ich dann auch leider nicht, wie ich den Inhalt von dem neu erzeugten Fenster per VBA ändere…vielleicht hast du ja noch mal so ne gute Idee…Danke dir auch noch mal dafür…

zur Idee von Aiko
auch die Idee ist gut…ist mir auch schon in den Sinn gekommen nur habe ich zum Bsp. in den Tabellen, die ich anzeigen lassen will auch Diagramme mit optionbuttons und anderen Steuerelementen, was ziemlich aufwendig wäre, das zu kopieren…weiterhin habe ich auch Formeln wie Bereich.Verschieben() welche sehr verschachtelt sind um in den Diagrammen einzelne Datenreihen auszublenden…
da fällt die Idee leider komplett raus aber Danke auch dir, Idee war ja auch super…

würd mich über eure Antworten freuen…:smile:

bis später…
mfg matzeerwin

Hallo matzeerwin.

Du kannst den kompletten Menü-Baum immer tiefer kaskadieren, indem Du einem CommandBarControl vom Typ msoControlPopup ein weiteres CommandBarControl vom Typ msoControlPopup hinzufügst und wieder und wieder. Am Ende kommt natürlich dann ein CommandBarButton oder möglicherweise auch eine CommandBarComboBox. Du kannst den Schaltflächen auch Bilder verpassen, mit Shortcuts versehen usw. usw.

Falls Du Dich für eine solche Variante entscheidest, wirst Du dich sicherlich über die angenehme Bedienbarkeit Deiner Datei freuen. Ich kann es jedenfalls nur empfehlen.

VG
Carsten

Hallo Carsten,

vielen Dank für deine Antwort und sorry für die späte Frage…habe an den We´s kein Internet.
habe mich heute wieder rangesetzt und habe wohl im Code irgendwas falsch gemacht.

Public Sub toolbar()

Set cmdbar = CommandBars.Add(„Menü“, msoBarLeft, , False)

With cmdbar

Set men1 = .Controls.Add(msoControlPopup)
With men1
.Caption = „Men1“
With men11
Set men11 = .Controls.Add(msoControlPopup)
With men11
.Caption = „Men11“
Set men111 = .Controls.Add(msoControlPopup)
With men111
.Caption = „Men111“
Set men1111 = .Controls.Add_(msoControlButton)
men1111.Caption = „Men1111“

Set men1112 = .Controls.Add_(msoControlButton)
men1112.Caption = „Men1112“
End With
Set men112 = .Controls.Add_(msoControlButton)
men112.Caption = „Men112“
End With
Set men12 = .Controls.Add(msoControlButton)
men12.Caption = „Men12“
End With
End With
Set men2 = .Controls.Add(msoControlButton)
men2.Caption = „Men2“
End With

End Sub

Die Deklaration ist:

Public cmdbar As CommandBar
Public men1 As CommandBarControl
Public men11 As CommandBarControl
Public men12 As CommandBarControl
Public men111 As CommandBarControl
Public men112 As CommandBarControl
Public men1111 As CommandBarButton
Public men1112 As CommandBarButton
Public men2 As CommandBarButton

ich sollte doch eigentlich (wenn ich noch ein Untermenü haben will) der Commandbarcontrol vom Typ msocontrolpopup eine weitere Commandbarcontrol vom Typ msocontrolpopup zuweisen.
Ich habe da wohl in der Deklaration was falsch gemacht.
Der Fehler ist: ungültiger Prozeduraufruf oder ungültiges Argument und zwar in der Zeile: Set cmdbar = CommandBars.Add(„Menü“, msoBarLeft, , False)

Verstehe leider den Fehler nicht…Würde mich über Hilfe sehr freuen. Danke schonmal wieder im Voraus…

mfg matzeerwin…

hey Carsten,

habs jetzt selber noch hinbekommen…hatte erstens vergessen die leiste auf Visible zu stellen u ausserdem hab ich vergessen die Leiste wieder zu löschen…also alles gefunden, jetzt funzts…

hab nochmals dank…werde weiter an deiner Idee arbeiten…:smile: