Announcement

Collapse
No announcement yet.

CommandBars

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • CommandBars

    Hallo Forum,

    komme leider nicht weiter. Ich habe keine Ahnung, warum es mir nicht gelingt, mittels diesen Codes eine Excel-Instanz mit ausgeblendeten Menüleisten zu öffnen.

    Imports System
    Imports System.IO
    Imports System.Text
    Imports Microsoft.Office.Core

    Private Sub OpenDatei(ByVal sDateiname As String)
    Dim xlApp As Excel.Application
    Dim xlMappe As Excel.Workbook
    Dim xlCB As CommandBar
    If DateiGeoeffnet(sDateiname) = False Then
    xlApp = CreateObject("Excel.Application") 'alternativ xlApp = New Excel.Application
    For Each xlCB In xlApp.CommandBars
    xlCB.Enabled = False
    Next
    xlMappe = xlApp.Workbooks.Open(sDateiname)

    An der Stelle xlApp.CommandBars kriege ich folgende Fehlermeldung beim Debuggen:
    Bibliothek nicht registriert. (Ausnahme von HRESULT: 0x8002801D (TYPE_E_LIBNOTREGISTERED))
    Die Assembly alleine stürzt komplett ab, einschließlich Excel.

    M.E. hab ich alles korrekt eingebunden, es gibt auch im Editor keine Fehler und läßt sich Problemlos schreiben?
    Was brauch ich denn alles für Verweise?

    Vielen Dank für Hilfe
    Jörg

  • #2
    Hallo,

    das Mixen von früher und später Bindung ist nur in seltenen Fällen gerechtfertig. Bei dem folgenden Beispiel (das ausschließlich auf die PIA's von Microsoft Excel 2003 zugreift) tritt das Problem nicht auf:

    <div style="font-family: Courier New; font-size: 10pt; color: black; background: white; border-top: windowtext 1pt solid; padding-top: 0pt; border-left: windowtext 1pt solid; padding-left: 0pt; border-right: windowtext 1pt solid; padding-right: 0pt; border-bottom: windowtext 1pt solid; padding-bottom: 0pt;"><p style="margin: 0px;"><span style="color: green;">' Microsoft Excel 11.0 Object Library als Verweis hinzuf&#252;gen</span></p><p style="margin: 0px;"><span style="color: blue;">Imports</span> Excel = Microsoft.Office.Interop.Excel</p><p style="margin: 0px;"><span style="color: blue;">Imports</span> Microsoft.Office.Core</p><p style="margin: 0px;">&nbsp;</p><p style="margin: 0px;"><span style="color: blue;">Public</span> <span style="color: blue;">Class</span> Form1</p><p style="margin: 0px;">&nbsp;</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; <span style="color: blue;">Dim</span> aExcelApp <span style="color: blue;">As</span> Excel.Application</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; <span style="color: blue;">Dim</span> aWB <span style="color: blue;">As</span> Excel.Workbook</p><p style="margin: 0px;">&nbsp;</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; <span style="color: blue;">Private</span> <span style="color: blue;">Sub</span> Button1_Click(<span style="color: blue;">ByVal</span> sender <span style="color: blue;">As</span> System.Object, _</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp; <span style="color: blue;">ByVal</span> e <span style="color: blue;">As</span> System.EventArgs) <span style="color: blue;">Handles</span> Button1.Click</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; aExcelApp = <span style="color: blue;">New</span> Excel.Application</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; aWB = aExcelApp.Workbooks.Open(<span style="color: #a31515;">"C:\Temp\Test.xls"</span>)</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: blue;">For</span> <span style="color: blue;">Each</span> aCB <span style="color: blue;">As</span> CommandBar <span style="color: blue;">In</span> aExcelApp.CommandBars</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; aCB.Enabled = <span style="color: blue;">False</span></p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: blue;">Next</span></p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; aExcelApp.Interactive = <span style="color: blue;">True</span></p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; aExcelApp.Visible = <span style="color: blue;">True</span></p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; MessageBox.Show(<span style="color: #a31515;">"Excel ist sichtbar"</span>)</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; aWB.Close()</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; aExcelApp.Quit()</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; <span style="color: blue;">End</span> <span style="color: blue;">Sub</span></p><p style="margin: 0px;"><span style="color: blue;">End</span> <span style="color: blue;">Class</span></p></div>

    Comment


    • #3
      Bindung

      Danke für die schnelle Antwort

      1. Beim Einbinden der Microsoft Excel 10.0 Object Library kriege ich irgendwie die Syntax mit Microsoft.office.interop.Exel nicht angeboten - werde versuchen die 11.0 einzubinden und hoffe das funktioniert dann auch mit Excel2000.

      2. Kannst Du mir mal kurz erklären, wo genau ich frühe und späte Bindung mixe?

      Danke
      Jörg

      Comment


      • #4
        Hallo,

        der Aufruf von CreateObject("Excel.Application") fordert eine Instanz des COM-Objekts von Excel an, dessen Versionsnummer zur Kompilierungszeit nicht feststeht. Erst zur Laufzeit tauscht Windows die ProgID (Excel.Application") in der Registry des Rechners gegen die CLSID der installierten Excel-Version ein.

        Microsoft stellt die bei der frühen Bindung genutzten PIA's (Primary Interop Assembly) erst ab Office XP zur Verfügung, wobei erst ab Office 2003 die PIA im Office-Setup (... Option .NET Programmierunterstützung...) integriert ist (die Office XP-PIAs müssen separate heruntergeladen und installiert werden). Bei der frühen Bindung wird die eigene .NET-Anwendung eng an die Versionsnummer der PIA und somit an die Versionsnummer der MS Office-Anwendungen gebunden.

        Ohne PIA (also im Fall von Excel 2000) würde ich ausschließlich nur mit der späten Bindung arbeiten und keinen Verweis auf Excel in das Projekt aufnehmen. Der Zugriff könnte dann so aussehen:

        <div style="font-family: Courier New; font-size: 10pt; color: black; background: white; border-top: windowtext 1pt solid; padding-top: 0pt; border-left: windowtext 1pt solid; padding-left: 0pt; border-right: windowtext 1pt solid; padding-right: 0pt; border-bottom: windowtext 1pt solid; padding-bottom: 0pt;"><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: blue;">Dim</span> XlApp <span style="color: blue;">As</span> <span style="color: blue;">Object</span></p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: blue;">Dim</span> XlBook <span style="color: blue;">As</span> <span style="color: blue;">Object</span></p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: blue;">Dim</span> XlWorkBooks <span style="color: blue;">As</span> <span style="color: blue;">Object</span></p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: blue;">Dim</span> XlSheet <span style="color: blue;">As</span> <span style="color: blue;">Object</span></p><p style="margin: 0px;">&nbsp;</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: blue;">Try</span></p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: green;">' Versuch 1: Auf laufende Instanz aus der ROT aufschalten</span></p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; XlApp = GetObject(<span style="color: #a31515;">"Excel.Application"</span>)</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: blue;">Catch</span> err <span style="color: blue;">As</span> System.Exception</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: blue;">Try</span></p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: green;">' Versuch 2: Neue Instanz anfordern</span></p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; XlApp = CreateObject(<span style="color: #a31515;">"Excel.Application"</span>)</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: blue;">Catch</span> ex <span style="color: blue;">As</span> Exception</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; MessageBox.Show(<span style="color: #a31515;">"Automation-Instanz von Excel kann nicht angefordert werden,"</span>, _</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; <span style="color: #a31515;">"Fehler"</span>, MessageBoxButtons.OK, MessageBoxIcon.Error)</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: blue;">End</span> <span style="color: blue;">Try</span></p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: blue;">End</span> <span style="color: blue;">Try</span></p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; XlApp.ScreenUpdating = <span style="color: blue;">False</span></p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; XlWorkBooks = XlApp.Workbooks</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; XlBook = XlWorkBooks.Add</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; XlSheet = XlBook.worksheets(1)</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; XlSheet.activate()</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: green;">' Spalten&#252;berschrift</span></p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: blue;">Dim</span> Col <span style="color: blue;">As</span> <span style="color: blue;">Integer</span></p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: blue;">For</span> Col = 1 <span style="color: blue;">To</span> 3</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; XlSheet.cells(1, Col).font.bold = <span style="color: blue;">True</span></p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; XlSheet.cells(1, Col) = <span style="color: blue;">String</span>.Format(<span style="color: #a31515;">"Spalte {0}"</span>, Col)</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: blue;">Next</span> Col</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; XlApp.screenupdating = <span style="color: blue;">True</span></p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: green;">' Benutzer soll mit Excel-GUI arbeiten</span></p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; XlApp.usercontrol = <span style="color: blue;">True</span></p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: blue;">Dim</span> ApplicationObject <span style="color: blue;">As</span> <span style="color: blue;">Object</span></p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ApplicationObject = XlSheet.application</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: green;">' Excel anzeigen</span></p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ApplicationObject.visible = <span style="color: blue;">True</span></p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; MessageBox.Show(<span style="color: #a31515;">"Excel ist sichtbar"</span>)</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: green;">' Automation-Instanz von Excel schlie&#223;en</span></p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; XlBook.Close(SaveChanges:=<span style="color: blue;">False</span>)</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; XlApp.Quit()</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: green;">' Verweise auf die Interface-Zeiger freigegeben</span></p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Marshal.ReleaseComObject(ApplicationObject)</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Marshal.ReleaseComObject(XlSheet)</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Marshal.ReleaseComObject(XlBook)</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Marshal.ReleaseComObject(XlWorkBooks)</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Marshal.ReleaseComObject(XlApp)</p></div>
        Zuletzt editiert von Andreas Kosch; 06.02.2007, 14:51.

        Comment


        • #5
          wundersam

          OK,

          danke für die ausführliche Erklärung, Excel erscheint tatsächlich.
          Bliebe nur noch das Problem mit den Menüleisten.

          Darf ich raten?
          Dim xlCB as Object
          For each xlCB in xlApp.Commandbars
          ...

          klappt auf Anhieb nicht.
          Tausend Dank
          Jörg

          Comment


          • #6
            Hallo,

            das folgende Beispiel demonstriert das Verbergen der CommandBars über die späte Bindung:

            <div style="font-family: Courier New; font-size: 10pt; color: black; background: white; border-top: windowtext 1pt solid; padding-top: 0pt; border-left: windowtext 1pt solid; padding-left: 0pt; border-right: windowtext 1pt solid; padding-right: 0pt; border-bottom: windowtext 1pt solid; padding-bottom: 0pt;"><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: blue;">Dim</span> XlApp <span style="color: blue;">As</span> <span style="color: blue;">Object</span></p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: blue;">Dim</span> XlBook <span style="color: blue;">As</span> <span style="color: blue;">Object</span></p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: blue;">Dim</span> XlWorkBooks <span style="color: blue;">As</span> <span style="color: blue;">Object</span></p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: blue;">Dim</span> XlSheet <span style="color: blue;">As</span> <span style="color: blue;">Object</span></p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: blue;">Try</span></p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: green;">' Versuch 1: Auf laufende Instanz aus der ROT aufschalten</span></p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; XlApp = GetObject(<span style="color: #a31515;">"Excel.Application"</span>)</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: blue;">Catch</span> err <span style="color: blue;">As</span> System.Exception</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: blue;">Try</span></p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: green;">' Versuch 2: Neue Instanz anfordern</span></p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; XlApp = CreateObject(<span style="color: #a31515;">"Excel.Application"</span>)</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: blue;">Catch</span> ex <span style="color: blue;">As</span> Exception</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; MessageBox.Show(<span style="color: #a31515;">"Automation-Instanz von Excel kann nicht angefordert werden,"</span>, _</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: #a31515;">"Fehler"</span>, MessageBoxButtons.OK, MessageBoxIcon.Error)</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: blue;">End</span> <span style="color: blue;">Try</span></p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: blue;">End</span> <span style="color: blue;">Try</span></p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; XlApp.ScreenUpdating = <span style="color: blue;">False</span></p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; XlWorkBooks = XlApp.Workbooks</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; XlBook = XlWorkBooks.Add</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: green;">'</span></p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: green;">' CommandBars &#252;ber die sp&#228;te Bindung verbergen</span></p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: green;">'</span></p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: blue;">For</span> <span style="color: blue;">Each</span> aCB <span style="color: blue;">As</span> <span style="color: blue;">Object</span> <span style="color: blue;">In</span> XlApp.CommandBars</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: blue;">If</span> aCB.Visible <span style="color: blue;">Then</span></p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; aCB.Enabled = <span style="color: blue;">False</span></p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: blue;">End</span> <span style="color: blue;">If</span></p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: blue;">Next</span></p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; XlSheet = XlBook.worksheets(1)</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; XlSheet.activate()</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: green;">' Spalten&#252;berschrift</span></p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: blue;">Dim</span> Col <span style="color: blue;">As</span> <span style="color: blue;">Integer</span></p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: blue;">For</span> Col = 1 <span style="color: blue;">To</span> 3</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; XlSheet.cells(1, Col).font.bold = <span style="color: blue;">True</span></p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; XlSheet.cells(1, Col) = <span style="color: blue;">String</span>.Format(<span style="color: #a31515;">"Spalte {0}"</span>, Col)</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: blue;">Next</span> Col</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; XlApp.screenupdating = <span style="color: blue;">True</span></p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: green;">' Benutzer soll mit Excel-GUI arbeiten</span></p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; XlApp.usercontrol = <span style="color: blue;">True</span></p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: blue;">Dim</span> ApplicationObject <span style="color: blue;">As</span> <span style="color: blue;">Object</span></p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ApplicationObject = XlSheet.application</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: green;">' Excel anzeigen</span></p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ApplicationObject.visible = <span style="color: blue;">True</span></p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; MessageBox.Show(<span style="color: #a31515;">"Excel ist sichtbar"</span>)</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: green;">' Automation-Instanz von Excel schlie&#223;en</span></p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; XlBook.Close(SaveChanges:=<span style="color: blue;">False</span>)</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; XlApp.Quit()</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: green;">' Verweise auf die Interface-Zeiger freigegeben</span></p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Marshal.ReleaseComObject(ApplicationObject)</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Marshal.ReleaseComObject(XlSheet)</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Marshal.ReleaseComObject(XlBook)</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Marshal.ReleaseComObject(XlWorkBooks)</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Marshal.ReleaseComObject(XlApp)</p></div>

            Comment


            • #7
              Funtioniert ...

              tatsächlich, auch mit Workbook.open

              Noch eine letzte Frage. Die xlApp kann vom User geschlossen werden (also nicht so wie im Code) und eine Userform poppt dann wieder auf. Mit der Möglichkeit zur Auswahl anderer Workbooks. Diese werden jeweils in Anlehnung an obigen Code geöffnet.

              Kann man das so machen oder bekomme ich dann Probleme mit den
              Verweisen auf die Interface-Zeiger.

              Tausend Dank
              Jörg

              Comment


              • #8
                Hallo,

                wenn der Anwender das Workbook oder gar Excel in eigener Regie schließen darf, wäre es ideal, wenn sich die eigene Anwendung über AddHandler auf die Excel-Ereignisse aufschalten würde. In diesem Fall könnten die Verweise auf die Wrapper-Assembly sofort auf Nothing gesetzt werden.

                Wenn generell zuerst über GetObject("Excel.Application") nach einer bereits ausgeführten Excel-Instanz gesucht wird, kann der Aufwand der Reaktion auf die Excel-Ereignisse jedoch vermieden werden. Die Anwendung muss zu Beginn des Zugriffs in einem Try..Catch-Zweig prüfen, ob der alte Interfacezeiger auf das Application-Objekt noch gültig ist. Wenn nicht, werden alle Verweise auf Nothing gesetzt und frisch angefordert.

                Comment

                Working...
                X