Programmieren für die Einzeldokumentschnittstelle (Single Document Interface, SDI) in Excel

Überlegungen für das Programmieren für die Einzeldokumentschnittstelle in Excel.

Vergleichen von Einzeldokumentschnittstellen (SDI) und Schnittstellen für mehrere Dokumente (MDI) in Excel 2010 und Excel 2013

Eine neue Funktion in Excel 2013 stellt die Einzeldokumentschnittstelle (Single Document Interface, SDI) dar. SDI ist eine Methode für die Organisation der grafischen Benutzeroberflächenanwendungen in einzelne Fenster, die vom Fenster-Manager des Betriebssystems getrennt gehandhabt werden. Jedes Excel-Fenster kann in Excel 2013 nur eine Arbeitsmappe enthalten und hat eine eigene Menüband-Benutzeroberfläche (Abbildung 1). Standardmäßig wird beim Öffnen einer neuen Arbeitsmappe diese in einem neuen Excel-Fenster angezeigt, selbst bei gleicher Excel-Instanz.

Abbildung 1: Einzeldokumentschnittstelle in Excel 2013

Oberfläche mit nur einem Dokument in Excel 2013

Diese steht im Gegensatz zur Schnittstelle mit mehreren Dokumenten (Multiple Document Interface, MDI), in der ein einzelnes übergeordnetes Fenster mehrere geschachtelte untergeordnete Fenster enthält, wobei nur das übergeordnete Fenster über ein Menü oder eine Symbolleiste verfügt. Jede Arbeitsmappe in einer Instanz von Excel verwendet in Excel 2010 eine gemeinsame Menüband-Benutzeroberfläche (Abbildung 2).

Abbildung 2: Schnittstelle mit mehreren Dokumenten in Excel 2010

Oberfläche mit mehreren Dokumenten in Excel 2010

Excel 2010 verwendet MDI. Dies bedeutet, dass es ein einzelnes Fenster auf Anwendungsebene mit allen Arbeitsmappen gibt, die in einer bestimmten Instanz von Excel geöffnet sind. Die Fenster der Arbeitsmappe können innerhalb des Excel-App-Fensters angeordnet werden, wobei alle die gleiche Menüband-Benutzeroberfläche verwenden. SDI in Excel bedeutet, dass jede Arbeitsmappe über ein eigenes App-Fenster der obersten Ebene und eine eigene entsprechende Menüband-Benutzeroberfläche verfügt.

Hinweis

Es gibt keine MDI-Kompatibilitätsoption in Excel.

In Systemen mit zwei Monitoren können mit der SDI in Excel zwei Arbeitsmappen nebeneinander verglichen werden, indem Sie jede Arbeitsmappe auf einen anderen Monitor ziehen. Jede Arbeitsmappe funktioniert unabhängig voneinander.

Führen Sie die folgenden Schritte durch, um SDI und MDI in Aktion zu sehen, wenn Excel 2010 und Excel 2013 zur Verfügung stehen.

So vergleichen Sie die Anzahl der Prozesse für MDI- und SDI-Schnittstellen

  1. Starten Sie im Windows-Startmenü Excel 2010.
  2. Starten Sie eine zweite Instanz von Excel. Stellen Sie sicher, dass zwei Excel-Fenster angezeigt werden.
  3. Wählen Sie auf der Windows-Taskleiste Task-Manager starten. Manager.
  4. Wählen Sie die Registerkarte Prozesse, und scrollen Sie so weit nach unten, bis zwei Excel.exe-Einträge angezeigt werden. Auf diese Weise können Sie erkennen, dass Excel standardmäßig bei jedem Öffnen eine neue Instanz öffnet (Excel mit zwei Instanzen).
  5. Schließen Sie die zwei Instanzen von Excel.
  6. Wählen Sie im Windows-Startmenü Excel 2013.
  7. Starten Sie eine zweite Instanz von Excel. Stellen Sie sicher, dass zwei Excel-Fenster angezeigt werden.
  8. Starten Sie den Task-Manager erneut.
  9. Scrollen Sie auf der Registerkarte Prozesse nach unten, bis Excel.exeangezeigt wird. Beachten Sie, dass die zwei Arbeitsmappen in der gleichen Instanz von Excel enthalten sind, obwohl Sie zwei Instanzen von Excel geöffnet haben.

Führen Sie die folgenden Schritte durch, um zu sehen, wie SDI und MDI innerhalb einer Instanz von Excel funktionieren.

So vergleichen Sie die Anzahl von Excel-Instanzen für MDI- und SDI-Schnittstellen

  1. Wählen Sie im Windows-Startmenü Excel 2010.
  2. Wählen Sie zum Aktivieren das Excel-Fenster, und stellen Sie sicher, dass Arbeitsmappe1 die aktuelle Arbeitsmappe ist.
  3. Drücken Sie zum Öffnen einer anderen Arbeitsmappe STRG+N. Stellen Sie sicher, dass Arbeitsmappe2 die aktuelle Arbeitsmappe ist.
  4. Minimieren Sie Arbeitsmappe2, und zeigen Sie Arbeitsmappe1 an. Beide Arbeitsmappen sind in der gleichen Instanz von Excel enthalten.
  5. Schließen Sie Excel.
  6. Wählen Sie im Windows-Startmenü Excel 2013.
  7. Wählen Sie zum Aktivieren das Excel-Fenster, und stellen Sie sicher, dass Arbeitsmappe1 die aktuelle Arbeitsmappe ist.
  8. Drücken Sie zum Öffnen einer anderen Arbeitsmappe STRG+N. Stellen Sie sicher, dass Arbeitsmappe2 in einem separaten Fenster (jedoch in der gleichen Instanz von Excel) geöffnet ist.
  9. Schließen Sie Excel.

Hinweis

Sie können mehrere Instanzen von Excel öffnen, indem Sie den folgenden Befehlszeilenschalter verwenden: excel.exe /x. Diese Option startet Excel in einem neuen Prozess.

In diesem Artikel wird die Implementierung der SDI in die Excel-Benutzeroberfläche und die Auswirkungen auf die Programmierbarkeit in Excel beschrieben.

Änderungen an der Benutzeroberfläche

Wenn Sie sich nach dem Öffnen einer Excel-Arbeitsmappe genau ansehen, werden die Fensterzustandsschaltflächen ( Minimieren, Maximieren und Wiederherstellen) in der oberen rechten Ecke des Menübands nicht mehr angezeigt. Abbildung 3 enthält die Fensterzustandschaltflächen, die in Excel und Excel 2007 verfügbar sind. Da die Fenster der obersten Ebene jetzt direkt mit einer einzelnen Arbeitsmappe oder Arbeitsmappenansicht verknüpft sind, ist die Benutzeroberfläche der Fensterverwaltung in Excel nicht mehr notwendig.

Abbildung 3: Benutzeroberfläche der Fensterzustandsverwaltung in Excel 2010

Windows-Statusbenutzeroberfläche in Excel 2010

Zudem werden ab Excel mehrere Arbeitsmappenfenster, wie in Abbildung 4 dargestellt, nicht länger innerhalb eines einzelnen Fensters einer Excel-Instanz angezeigt.

Abbildung 4: Mehrere Arbeitsmappen in einem einzelnen Fenster einer Excel-Instanz

Mehrere Arbeitsmappen in einer einzelnen Excel-Instanz

Neuberechnung und Formeln

Neuberechnungen in Excel sind weiterhin "global", was bedeutet, dass sie arbeitsmappenübergreifend in derselben Instanz von Excel auftreten. Formeln, die auf Arbeitsmappen verweisen, die in derselben Instanz von Excel geöffnet sind, werden gemeinsam an Berechnungen beteiligt und verwenden denselben Arbeitsmappenberechnungsmodus (automatisch, automatisch mit Ausnahme von Datentabellen und manuell).

In MDI gibt es nur eine Bearbeitungsleiste, um alle geöffneten Arbeitsmappen in dieser Instanz von Excel zu handhaben. In SDI gibt es eine Bearbeitungsleiste pro Arbeitsmappe. Beim Bearbeiten von Arbeitsmappenübergreifenden Verweisen in SDI in einer Formel wird die derzeit bearbeitete Formel, wie in Abbildung 5 dargestellt, sowohl in den Quell- als auch Zielarbeitsmappen-Bearbeitungsleisten angezeigt.

Abbildung 5: Aktualisieren von Arbeitsmappenübergreifenden Formeln

Aktualisieren arbeitsmappenübergreifender Formeln

Benutzerdefinierte Aufgabenbereiche

An ein Fenster der obersten Ebene angefügte benutzerdefinierte Aufgabenbereiche in MDI sind nun an ein bestimmtes Fenster einer Arbeitsmappe in SDI angehängt. Beim Wechsel zu einer anderen Arbeitsmappe wird das Arbeitsmappenfenster aktiviert, an das nicht unbedingt der benutzerdefinierte Aufgabenbereich angefügt ist, wenn der Entwicklercode nicht speziell zum Anzeigen des benutzerdefinierten Aufgabenbereichs für diese Arbeitsmappe aktualisiert wurde.

Zusammenfassend möchten Sie als Entwickler Folgendes ausführen:

  • Stellen Sie sicher, dass Sie für alle Arbeitsmappen, in denen der benutzerdefinierte Aufgabenbereich angezeigt werden soll, Code schreiben, um dies explizit zu tun.
  • Sie möchten sicherstellen, dass alle benutzerdefinierten Aufgabenbereiche auf allen Instanzen explizit aktualisiert werden, wenn alle benutzerdefinierten Aufgabenbereiche den gleichen Zustand aufweisen sollen. Wenn ein Benutzer beispielsweise ein Kontrollkästchen aktiviert, soll dies auf alle benutzerdefinierten Aufgabenbereich in allen Excel-Instanzen angewendet werden.

Benutzerdefinierte Menübänder

Benutzerdefinierte Registerkarten und Steuerelemente des Menübands, die eine einzelne Menüband-Benutzeroberfläche pro Anwendungsinstanz in vorherigen Versionen von Excel vorgesehen haben, sind nun auf dem Menüband jeder Arbeitsmappe in Excel vorhanden. Während Entwickler des benutzerdefinierten Menübands in MDI sich keine Gedanken über mehrere Instanzen der Steuerelemente in verschiedenen Instanzen der Menüband-Benutzeroberfläche in Excel machen müssen, müssen Sie dieses Szenario in SDI berücksichtigen.

Wenn Sie alle Steuerelemente der Menüband-Benutzeroberfläche in geöffneten Arbeitsmappen im gleichen Zustand beibehalten möchten, müssen Sie Folgendes ausführen:

  • Stellen Sie sicher, dass der Code alle Arbeitsmappenfenster durchlaufen und den Zustand der Steuerelemente aktualisieren kann.

ODER

  • Lassen Sie den Zustand der Steuerelemente zwischenspeichern, sodass beim Wechsel zu einer anderen Arbeitsmappe durch den Benutzer dieses Ereignis erfasst wird und die Steuerelemente im Rahmen des Fensterwechsels aktualisiert werden.

Berücksichtigen Sie darüber hinaus den Fall, in dem Sie Code zum Hinzufügen eines benutzerdefinierten UI-Steuerelements mithilfe von Application.Commandbar für den Zugriff auf das Menüband entwickeln. Wenn Sie zu einem späteren Zeitpunkt auf dieses Steuerelement zugreifen möchten, muss der Code die Tatsache berücksichtigen, dass die aktive Arbeitsmappe möglicherweise von der Arbeitsmappe abweicht, als das Steuerelement hinzugefügt wurde.

Überlegungen für VBA-Code

Mit der Umstellung auf SDI bleiben alle Fenstermethoden, Ereignisse und Eigenschaften von Excel auf Anwendungsebene nicht betroffen und funktionieren wie in früheren Excel-Versionen (z Application.ActiveWindow. B. , Application.Windowsusw.).

In Excel arbeiten alle Fenstermethoden, Ereignisse und Eigenschaften auf Arbeitsmappenebene jetzt im Fenster der obersten Ebene (z. B. wird das Workbook.WindowActivate Ereignis weiterhin ausgelöst, wenn Sie zu einer bestimmten Arbeitsmappe wechseln, das Ereignis wird weiterhin ausgelöst, wenn die Workbook.Resize Größe dieser Arbeitsmappe geändert wird, und ThisWorkbook.Windows(1).Height, ThisWorkbook.Windows(1).Width, ThisWorkbook.Windows(1).LeftThisWorkbook.Windows(1).Right, , ThisWorkbook.Windows(1).MinimizeuswThisWorkbook.Windows(1).Maximize. werden im Fenster der obersten Ebene für die aktive Arbeitsmappe ausgeführt).

Sonderfälle werden in der folgenden Tabelle aufgeführt.

Tabelle 1. Objektverhaltensmodell mit der SDI

Funktion Beschreibung SDI-Auswirkungen
Application.Visible Gibt einen Boolean-Wert zurück, der bestimmt, ob das Objekt sichtbar ist, oder legt diesen Wert fest. Lese-/Schreibzugriff. Wenn alle Fenster ausgeblendet sind:
  • Application.Visible wird zu False

  • Wenn Application.Visible auf True festgelegt ist, werden alle ausgeblendeten Fenster eingeblendet.

  • Wenn ein Dokument über die Shell geöffnet wird, wird nur dieses Fenster angezeigt, und Application.Visible ist nun auf True festgelegt.

Außerdem:
  • Application.Visible = False blendet alles aus, und Application.Visible = True blendet alles ein, wobei alle Einstellungen auf Dokumentebene ignoriert werden.

  • Wenn alle Fenster mit der Einstellung auf Fensterebene ausgeblendet sind, wird die Eigenschaft auf Anwendungsebene ebenfalls aktiviert.

  • Wenn mindestens ein Fenster angezeigt wird, ist die Einstellung auf Anwendungsebene auf True festgelegt.

Application.ShowWindowsInTaskbar True, wenn eine separate Schaltfläche der Windows-Taskleiste für jede geöffnete Arbeitsmappe vorhanden ist. Der Standardwert ist True. Boolescher Wert mit Lese-/Schreibzugriff. Diese Einstellung ist in Excel veraltet.
Application.Caption Gibt einen String-Wert zurück, der den auf der Titelleiste des Hauptfensters von Microsoft Excel angezeigten Namen darstellt, oder legt diesen Wert fest. Aktualisiert alle Fenster für die betreffende Instanz von Excel.
Application.Hwnd Gibt einen Long-Wert zurück, der die Zugriffsnummer des Fensters auf der obersten Ebene des Microsoft Excel-Fensters anzeigt. Schreibgeschützt. Gibt das aktive Fensterhandle zurück.
Application.FormulaBarHeight Ermöglicht dem Benutzer, die Höhe der Bearbeitungsleiste in Zeilen anzugeben. Long mit Lese-/Schreibzugriff. Wird nur auf das aktive Arbeitsmappenfenster angewendet, und nicht auf alle Fenster für diese Instanz von Excel.
Application.DisplayFormulaBar True, wenn die Bearbeitungsleiste angezeigt wird. Lese-/Schreibzugriff - Boolean. Wird auf alle Fenster für diese Instanz von Excel angewendet.
Workbook.Windows Gibt eine Windows-Auflistung zurück, die alle Fenster in der angegebenen Arbeitsmappe darstellt. Schreibgeschütztes Windows-Objekt. Keine Änderungen im Verhalten. Gibt die Fensterauflistung für diese Arbeitsmappe wie Aufgabenbereiche, zusätzliche Ansichten zurück.
Workbook.WindowResize Tritt auf, wenn die Größe des Arbeitsmappenfensters geändert wird. Keine Änderungen im Verhalten. Wird ausgelöst, wenn ein Arbeitsmappenfenster (der obersten Ebene) geändert wird.
Window.Caption Gibt einen Variant-Wert zurück, der den Namen darstellt, der in der Titelleiste des Dokumentfensters angezeigt wird, oder legt diesen wert fest. Keine Änderungen im Verhalten.
Workbook.Protect(Password, Structure, Windows) Schützt eine Arbeitsmappe, sodass sie nicht geändert werden kann. Der Fensterstrukturschutz wird unabhängig vom Wert des Windows-Parameters (True oder False) NICHT aktiviert. Wenn True angegeben ist, wird kein Laufzeitfehler angezeigt, aber dieser Teil des Prozeduraufrufs gibt ein NO-OP zurück.

Hinweis

Es sind keine Änderungen am benutzerdefinierten Code erforderlich, sodass XML-Befehle weiterhin wie erwartet in SDI in Excel funktionieren.

Veraltete Windows-Option „Arbeitsmappe schützen“

In SDI verfügt jede Arbeitsmappe über ein Fenster auf oberster Ebene, das wiederhergestellt, minimiert und geschlossen werden kann. Sie werden feststellen, dass dieses Fenster auf oberster Ebene nicht verschoben, geschlossen und seine Größe nicht geändert werden kann, und dass die Windows-Option „Arbeitsmappe schützen" in Excel nicht mehr verfügbar ist (Abbildung 6). In Tabelle 2 wird diese Aktion detaillierter beschrieben.

Abbildung 6 Windows-Option des Dialogfelds „Arbeitsmappe schützen“ ist deaktiviert

Windows-Option des Dialogs

Aktion Verhalten
Öffnen einer Arbeitsmappe, die in einer früheren Version von Excel mit aktiviertem Fensterschutz erstellt wurde Excel erkennt die Attribute zu Fensterspeicherort und -größe, der Benutzer wird jedoch nicht daran gehindert, diese Fenster anzuordnen oder zu schließen.
Anzeigen des Dialogfelds Struktur und Fenster schützen Excel zeigt das Dialogfeld an, aber die Option Windows ist deaktiviert.

Lösungen für SDI-Probleme

Der folgende Abschnitt enthält Problemumgehungen für Probleme, die beim Verwenden der SDI auftreten können.

  • Eine Arbeitsmappe kann nicht durch Klicken auf die rote Schaltfläche "X" Schließen geschlossen werden, wenn diese Arbeitsmappe programmgesteuert über ein modales Benutzerformular geöffnet wird. Problemumgehung: Fügen Sie den folgenden Code zur Layout-Ereignisprozedur des Benutzerformulars hinzu, und öffnen Sie das Benutzerformular dann ohne Modus.

      Private Sub UserForm_Layout()
          Static fSetModal As Boolean
          If fSetModal = False Then
              fSetModal = True
              Me.Hide
              Me.Show 1
          End If
      End Sub
    

    Eine andere Möglichkeit zur Problemumgehung: Öffnen Sie das Arbeitsmappenfenster, aktiveren Sie ein anderes Fenster, und aktivieren Sie dann das Arbeitsmappenfenster erneut. Sie müssten nun in der Lage sein, die Arbeitsmappe mithilfe der Schaltfläche Schließen schließen zu können.

  • Angenommen, Ihr VBA-Code öffnet mehrere Arbeitsmappen und verwendet die DataEntryMode-Eigenschaft , um die Dateneingabe und das Schließen von Arbeitsmappen zu steuern. Da im Excel-SDI-Modell jede Arbeitsmappe in einem eigenen Prozess enthalten ist, erkennt die dataEntryMode-Eigenschaft , die in einer Arbeitsmappe verwendet wird, das Vorhandensein einer anderen Arbeitsmappe nicht und hat daher wenig bis gar keine Auswirkung auf deren Interaktion. Um dieses Problem zu umgehen, gibt es eine Reihe von Optionen. Sie können die zusätzlichen Arbeitsmappen oder Arbeitsblätter mit Window.Visible = False bzw Sheet.Visible = False. ausblenden. Erkennen und abbrechen sie schließende Ereignisse mithilfe Workbook.BeforeClose(Cancel) = Truevon .

  • Zu Excel-Arbeitsmappen über Befehlsleistencode hinzugefügte Symbolleisten werden nicht angezeigt, bis die Arbeitsmappe geschlossen und erneut geöffnet wird. Das Verwenden von Befehlsleisten zum Anpassen der Benutzeroberfläche ist seit Excel 2007 veraltet. Die optimale Lösung besteht darin, die Menüband-Benutzeroberfläche mithilfe von XML-Dateien, wie im Artikel Customizing the 2007 Office Fluent Ribbon for Developers beschrieben, anzupassen.

    Eine weitere Möglichkeit besteht darin, ein Ereignis auf Anwendungsebene zu verwenden, um das Öffnen neuer Arbeitsmappen zu erkennen und dann anstelle von Arbeitsmappen zum Hinzufügen des Menüband-Steuerelements zu verwenden Application.Windows . Dazu können Sie den folgenden Beispielcode verwenden.

      Private Sub Workbook_Open()
          ToolBarsAdd
      End Sub
    
      Sub ToolBarsAdd()
          Dim oBar As CommandBar
    
          ToolBarsDelete
          Set oBar = Application.CommandBars.Add(Name:="MyToolBar")
          '
          With oBar
              With .Controls.Add(Type:=msoControlButton)
                  .OnAction = "SayHello"
                  .FaceId = 800
              End With
          End With
          oBar.Visible = True
      End Sub
    
      Sub SayHello()
          MsgBox "Hello from '" & ActiveWorkbook.Name & "'"
      End Sub
    

    Der folgende Code wird dann verwendet, um die Symbolleiste zu entfernen, bevor die Arbeitsmappe geschlossen wird.

      Private Sub Workbook_BeforeClose(Cancel As Boolean)
          ToolBarsDelete
      End Sub
    
      Sub ToolBarsDelete()
      Dim wnd As Window
      On Error Resume Next
          For Each wnd In Application.Windows
              wnd.Activate
              Application.CommandBars("MyToolBar ").Delete
          Next wnd
      End Sub
    
  • In Excel 2010 wird ein modusloses Benutzerformular standardmäßig als Fenster der obersten Ebene über allen Excel-Fenstern angezeigt. In Excel 2013 wird ein Benutzerformular ohne Status nur oberhalb des Arbeitsmappenfensters angezeigt, das aktiv war, als das Benutzerformular angezeigt wurde. Excel Most Valuable Professional (MVP) Jan Karel Pieterse bietet eine Erläuterung des Problems und eine Lösung auf seiner Webseite unter https://www.jkp-ads.com/articles/keepuserformontop.asp.

Zusammenfassung

Die neue Benutzeroberfläche für einzelne Dokumente in Excel 2013 erleichtert das Arbeiten mit mehreren Arbeitsmappen. Sie können die Arbeitsmappen sogar auf verschiedene Monitore ziehen. Sie müssen nur daran denken, dass es nur ein Fenster der obersten Ebene und ein Menü des Menübands für die Benutzeroberfläche pro Arbeitsmappe gibt. Dies kann es erfordern, dass Sie vorhandenen Code aktualisieren, um den Status von Steuerelementen und Einstellungen zwischenzuspeichern, wenn Sie von Arbeitsmappe zu Arbeitsmappe wechseln.

Siehe auch

Support und Feedback

Haben Sie Fragen oder Feedback zu Office VBA oder zu dieser Dokumentation? Unter Office VBA-Support und Feedback finden Sie Hilfestellung zu den Möglichkeiten, wie Sie Support erhalten und Feedback abgeben können.