Excel 2003 - Fernsteuerung - Bei Sortierung beendet sich Programm ohne Meldung

  • VB.NET
  • .NET (FX) 4.0

Es gibt 15 Antworten in diesem Thema. Der letzte Beitrag () ist von MemoAnMichSelbst.

    Excel 2003 - Fernsteuerung - Bei Sortierung beendet sich Programm ohne Meldung

    Aloa,

    ich steuere mal wieder Excel via VB.NET fern.
    Auf dem Client ist ein Excel 2003 installiert.
    Soweit so gut.

    Aber die Befehle:

    VB.NET-Quellcode

    1. Dim WS As Microsoft.Office.Interop.Excel.Worksheet = DirectCast(Excel.ActiveSheet, Microsoft.Office.Interop.Excel.Worksheet)
    2. WS.Sort.SortFields.Add(Excel.Range("A2"), Microsoft.Office.Interop.Excel.XlSortOn.xlSortOnValues, Microsoft.Office.Interop.Excel.XlSortOrder.xlAscending)
    3. WS.Sort.SetRange(Excel.Range("A2:P" & Zeile))
    4. WS.Sort.Header = Microsoft.Office.Interop.Excel.XlYesNoGuess.xlNo
    5. WS.Sort.MatchCase = False
    6. WS.Sort.Orientation = Microsoft.Office.Interop.Excel.XlSortOrientation.xlSortColumns
    7. WS.Sort.SortMethod = Microsoft.Office.Interop.Excel.XlSortMethod.xlPinYin
    8. WS.Sort.Apply()

    sorgen dafür dass das Programm sich OHNE Fehlermeldung abschießt. Ich verstehe nicht wieso er tut was er tut.
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D
    Mach mal auf die erste Zeile einen Haltepunkt und schau dir dort den TraceStack an. Ich würde fast wetten, dort taucht irgendwo eine Funktion auf, die als Handler für ein Form.Load-Event fungiert.
    Weltherrschaft erlangen: 1%
    Ist dein Problem erledigt? -> Dann markiere das Thema bitte entsprechend.
    Waren Beiträge dieser Diskussion dabei hilfreich? -> Dann klick dort jeweils auf den Hilfreich-Button.
    Danke.
    Aloa,

    ich habe hier kein Excel 2003 und der Client hat kein Visual Studio ;)
    Das ist leider nicht möglich.
    Aber in Sachen Formload... Die Funktion liegt in ner eigenen Sub die durch nen Button angesteuert wird und nicht in nem Form_Load.
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D
    @MemoAnMichSelbst Steppe mal ab dem Haltepunkt die Prozedur durch, da siehst Du, in welcher Zeile er abraucht.
    Dann machst Du auf diese Zeile einen Haltepunkt und siehst Dir die Variablen an.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Wie schon gesagt...
    Ich habe kein Excel 2003 hier.
    Bei mir bricht er nicht ab, bei 2013 arbeitet er normal weiter.

    Der Client auf dem noch 2003 installiert ist hat aber kein Visual Studio demnach ist ein Debugging auf dem Rechner, auf dem der Fehler passiert nicht möglich.
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D
    Die Ursache für den Fehler liegt wohl vermutlich darin, dass du irgendeine Methode oder Eigenschaft der Interop-Klasse(n) benutzt, die zwar in Office 2013 enthalten ist, in Office 2003 aber nicht bzw. dort mit einer anderen ID/Signatur implementiert war.

    Dass die Anwendung einfach ohne Meldung abbricht, kann ich hingegen nicht ohne weiteres erklären. Entweder, irgendwo in der Aufrufkette hängt trotzdem noch ein Form.Load-Event mit drin, oder es ist eines dieser unerklärlichen Phänomene, die im Zusammenspiel mit COM-Interop und Speichermanipulation stehen könnten...
    Weltherrschaft erlangen: 1%
    Ist dein Problem erledigt? -> Dann markiere das Thema bitte entsprechend.
    Waren Beiträge dieser Diskussion dabei hilfreich? -> Dann klick dort jeweils auf den Hilfreich-Button.
    Danke.
    Ich weiß es anhand des Loggings.
    Ich habe auf dem Rechner eine Version ohne diese Zeilen installiert und es läuft.
    Jedoch muss ja auch in Excel 2003 zu sagen sein... Sortier mir den ganzen Schmarn. :/
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D
    Na ich habe ja genau das was du vorgeschlagen hast schon gemacht.
    Daher weiß ich ja erst wo es hakt.

    Ich hatte mal gehofft dass hier schon jemand das Gleiche Problem hatte.
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D
    sonne75: Es ist auch ein zusammenhängender Befehl, welcher erst mit .Apply abgeschossen wird.
    Und petatod hat recht.

    Ich muss im Vorfeld die Versionsnummer abfragen und einen klotz an Befehl rausschießen:

    VB.NET-Quellcode

    1. DirectCast(Excel.ActiveSheet, Microsoft.Office.Interop.Excel.Worksheet).Range("A2:P" & Zeile).Sort(Excel.Range("A2"), Microsoft.Office.Interop.Excel.XlSortOrder.xlAscending, , , , , , Microsoft.Office.Interop.Excel.XlYesNoGuess.xlNo, 1, False, Microsoft.Office.Interop.Excel.XlSortOrientation.xlSortColumns, Microsoft.Office.Interop.Excel.XlSortMethod.xlPinYin, Microsoft.Office.Interop.Excel.XlSortDataOption.xlSortNormal, Microsoft.Office.Interop.Excel.XlSortDataOption.xlSortNormal, Microsoft.Office.Interop.Excel.XlSortDataOption.xlSortNormal)
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D
    In dem Fall ja.
    Aber die alte Sortierfunktion unterstützt nur drei Sortierbedingungen.
    Die Neue hingegen weit mehr (glaube 64 warens).
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D