Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

C Sharp - xlsRange.sort beim zweitem Aufruf error lierfert

Frage Entwicklung VB for Applications

Mitglied: KaiserQQ7

KaiserQQ7 (Level 1) - Jetzt verbinden

30.08.2011, aktualisiert 18.10.2012, 3349 Aufrufe, 5 Kommentare

Hallo,

warum taucht einen Fehler beim zweiten Aufruf von folgender Funktion:

01.
        public static void sortByQty() 
02.
03.
            Excel.Range rngSort = ws.get_Range("I5", missing); 
04.
            string rngSortVal        = Convert.ToString(rngSort.Value2); 
05.
             
06.
            rngSort.Activate(); 
07.
            rngSort.Cells.Select(); 
08.
 
09.
            rngSort.Sort(rngSort.Columns[1, missing], 
10.
                         Excel.XlSortOrder.xlDescending, 
11.
                         rngSort.Columns[2, missing], 
12.
                         missing, 
13.
                         Excel.XlSortOrder.xlDescending, 
14.
                         missing, 
15.
                         Excel.XlSortOrder.xlDescending,  
16.
                         Excel.XlYesNoGuess.xlYes, 
17.
                         missing, missing,  
18.
                         Excel.XlSortOrientation.xlSortColumns, 
19.
                         Excel.XlSortMethod.xlPinYin,  
20.
                         Excel.XlSortDataOption.xlSortTextAsNumbers, 
21.
                         Excel.XlSortDataOption.xlSortTextAsNumbers, 
22.
                         Excel.XlSortDataOption.xlSortTextAsNumbers);         
23.
        }

[Edit Biber] Codeformatiert [/Edit]
Mitglied: Biber
30.08.2011, aktualisiert 18.10.2012
Moin KaiserQQ7,

du hast ja nun vor einem Monat hier im selben Bereich eine baugleiche Frage Eine Excel Tabelle sortieren nach Spalte I ab der Zeile 5 absteigend using c sharp gepostet.

Vor einem Monat lautete die Zustandsbeschreibung bzw. das konkrete Problem, an dem wir Helferlein ansetzen könnten
ich habe die folgende Code gefunden aber taucht ein fehler:

Damals hattest du noch in einem Kommentar ergänzt:
Zitat von KaiserQQ7:
ich mache gerade einen Add-In für Excel und ich brauche diese Funktion innerhalb der Code.

Jetzt hast du einen kompletten Monat an diesem Add-In rumgeschraubt und dieses "SortbyQty()"-Funktiönchen hat nun
  • einen Namen, damit es aufgerufen werden kann
  • Codeformatierung, damit wir es lesen können
  • ein paar just for fun-Variablen, die gesetzt und nie benötigt werden
  • und immer noch denselben Fehler, den wir schon vor 4 Wochen nicht genannt bekamen.

Bitte, damit wir vor den ganzen rasant nahenden Weihnachtseinkäufen fertig werden:

  • Wie zeigt sich oder was ist der Fehler? Hat der einen Fehlercode/Fehlertext?
  • wie/von wo wird die Funktion aufgerufen? Von einem Ribbon-Button? Über Kontext-Menü? Aus der Garage über WLAN?
  • sprechen wir von der gleichen Excel-Version, nämlich Excel 93 für Solaris? Oder benutzt du eine andere Version, wenn ja --> WTAF??

Bitte gib uns wenigstens ene Chance, irgendwelche sinnvollen Antworten zu versuchen.

Grüße
Biber

P.S. Wegen des Meister-Yoda-Titels
C Sharp - xlsRange.sort beim zweitem Aufruf error lierfert
und des wiederholten orientierungslosen Auf-, Ab- oder Wegtauchens dieser angefangenen Sätze
warum taucht einen Fehler beim zweiten Aufruf von folgender Funktion:

Ja, wo tauchen se denn?!?

--> Falls du der deutschen Sprache nicht so geläufig bist oder umgekehrt, kannst du auch gern auf denglisch oder whattheheck fragen.
Meine PraktikantInnen können auch französisch - beschreib also den Fehler in irgendeiner ###-Sprache.
Aber beschreib ihn bitte.
Bitte warten ..
Mitglied: KaiserQQ7
02.09.2011 um 11:23 Uhr
Also es geht um die Zutaten einer Produkt, und wie diese Zutaten auf einer Packung stehen sollen, wie foldend:

Zutat_1*, Zutat_2*, Zutat_3* (Prozent %), ....., Zutat_n*.

also sternchen und dann komma und dann leerzeichen (und wenn bestimmte Prozent für jede Zutat gibt dann muss wie bei "Zutat_3" danach stehen) und die letzte Zutat muss mit Punkt gefolgt.

und diese Daten sind in einer Excel "Sheet_1" und sieht wie folgend aus:

Version-------Zutaten----------------Prozent
1----------------Zutat_1*----------------30
1----------------Zutat_2*
1----------------Zutat_3*----------------27
1----------------Zutat_1*----------------20
2----------------Zutat_1*----------------30
2----------------Zutat_2*
2----------------Zutat_3*----------------27
3----------------Zutat_1*----------------30
3----------------Zutat_2*
3----------------Zutat_3*----------------27

1. muss diese Tabelle nach Version gefiltert
2. unter Zutaten einer Version kann eine Zutat mehere Mals tauchen (wie bei Version 1, Zutat_1 taucht 2 Mal)
3. wenn eine Zutat einer Version mehere Mals tauchen sollte, muss nur eine Zutat davon beibehalten und ihre Prozent Value besteht aus der Summe aller anderen (die
gleiche Zutat-Name hat und danach von der Tabelle gelöscht werden). Als beispiel: Wähle Version = 1, dann Zutat_1 taucht zwei mal und eine davon wird gelöscht und ihre Prozent Value ist
die Summe 30+27 = 57.

Step 1: Wähle Version = 1 (Spalte Version filtern)

Version -------Zutaten-------------- Prozent
1 ----------------Zutat_1*---------------- 30
1----------------Zutat_2* ----------------
1----------------Zutat_3* ---------------- 27
1----------------Zutat_1*---------------- 20

Step 2: Lösche die wiederholte Zutat, und fass ihre Prozent mit einer gleichnamige Zutat

Version--------Zutaten---------------Prozent
1----------------Zutat_1*---------------- 57
1----------------Zutat_2*----------------
1----------------Zutat_3*---------------- 27

Step 3: Sortiere die ganze Tabelle Nach Prozent absteigend:

Version--------Zutaten----------------Prozent
1----------------Zutat_1*----------------57
1----------------Zutat_3*----------------27
1----------------Zutat_2*----------------


UND Dann das ende Ergibniss muss in "Sheet_3" geschrieben werden und sieht so aus:

Zutat_1* (57 %), Zutat_3* (27 %), Zutat_2*.

Das war die Aufgabestellung bis jetzt.
und dafür habe ich einen Excel Add-Ins mit C Sharp gemacht. Und in der Folgende Code Tritt den Fehler:

Fehler Meldung:
Unable to get the Sort property of the Range class.
Eine COMException-Ausnahme wird ausgelöst, wenn ein nicht erkanntes HRESULT von einem COM-Methodenaufruf zurückgegeben wird.

Code:

01.
 
02.
        public static Excel.Application app     = Rezepturprogramm.Globals.ThisAddIn.Application; 
03.
        public static Excel.Workbook    wb      = app.ActiveWorkbook; 
04.
        public static Excel.Worksheet   ws      = wb.ActiveSheet; 
05.
 
06.
 
07.
        public static void sortByNewQty() 
08.
09.
 
10.
            Excel.Range rngSort = ws.get_Range("I5", missing); 
11.
            string rngSortVal   = Convert.ToString(rngSort.Value2); 
12.
 
13.
            rngSort.Sort(rngSort.Columns[1, missing], Excel.XlSortOrder.xlDescending, 
14.
                         rngSort.Columns[2, missing], missing, Excel.XlSortOrder.xlDescending, 
15.
                         missing, Excel.XlSortOrder.xlDescending,  
16.
                         Excel.XlYesNoGuess.xlYes, missing, missing,  
17.
                         Excel.XlSortOrientation.xlSortColumns, 
18.
                         Excel.XlSortMethod.xlPinYin,  
19.
                         Excel.XlSortDataOption.xlSortNormal, 
20.
                         Excel.XlSortDataOption.xlSortNormal, 
21.
                         Excel.XlSortDataOption.xlSortNormal); 
22.
  
23.
24.
 
Bitte warten ..
Mitglied: Biber
02.09.2011 um 13:03 Uhr
Moin KaiserQQ7,

danke für die Infos.

Als ch deinen Eroffnungspost überflogen hatte (und deine jetzt genauere Fehlerbeschreibung noch nicht kannte) hatte ich drei vage Verdachtsmomente.

  • es könnte sein, dass die (wo auch immer) gesetzte Variable "ws" auf das falsche Worksheet zeigt [ich jedenfalls hätte das Ziel-workSheet lieber immer explizit als "Ein-WorkSheet-namens-Babe" oder ähnlich in der sortbyNewQty() ermittelt
  • oder aber die Range-Angabe ist zum Sortieren ungeeignet, weil sie sich nur auf eine Zelle bezieht (das "I5" ist doch sicher nur die zelle I5 und kein named range). Eine Zelle nach zwei Spalten sortieren könnte Excel verweigern, dachte ich mir.
  • oder aber, die dritte Vermutung, die überflüssige Zeile "String mgSortval=ConvertToString(mgSort.Value2)" geht in den Dutt, weil in Value2 im zweiten Durchgang ein double Wert steht und du damit natürlich die Convert.ToString() in die Knie zwingst.

Könntest du bitte mal die Zeile "String mgSortval=ConvertToString(...." auskommentieren, um einen der drei Fälle auzuschliessen?

Zusatzfragen
  • der Fehler tritt immer erst beim 2ten Aufruf auf?
  • die Variable "Ws" wird ein einziges Mal global gesetzt? Oder wird die mehrfach auf jeweils ActiveSheet() umgebogen?

Grüße
Biber

[Edit] Sorry, die 3 Global/public-Zeilen oberhalb der Function waren noch da, als ich meine Fragen geschrieben habe.[/Edit]
Bitte warten ..
Mitglied: KaiserQQ7
02.09.2011 um 13:27 Uhr
Hallo Biber,

ich habe auch so probiert statt ws:

static Excel.Worksheet sheet_1 = (Excel.Worksheet)wb.Worksheets["sheet_1"];

hat aber trotzdem nicht geklappt.

der Fehler tritt immer erst beim 2ten Aufruf auf?
JA, beim ersten Mal ist alles super nur wenn ich den "button" nochmal anklicke dann kommt diesen Fehler.

die Variable "Ws" wird ein einziges Mal global gesetzt? Oder wird die mehrfach auf jeweils ActiveWorkSheet() umgebogen?

das sieht wie folgt aus(Global):

public static Excel.Application app = Rezepturprogramm.Globals.ThisAddIn.Application;
public static Excel.Workbook wb = app.ActiveWorkbook;
public static Excel.Worksheet ws = wb.ActiveSheet;

und weil ich nur 3 Sheets habe, habe ich die folgende Zeilen auch hinzugeschrieben:

static Excel.Worksheet sheet_1 = (Excel.Worksheet)wb.Worksheets["sheet_1"];
static Excel.Worksheet sheet_2 = (Excel.Worksheet)wb.Worksheets["sheet_2"];
static Excel.Worksheet sheet_3 = (Excel.Worksheet)wb.Worksheets["sheet_3"];

damit ich die aktive sheet wechseln kann. Als bsp.:

ws = sheet_1;
// hier wird sheet_1 als aktive sheet sein oder ?!

Und noch eine Sache, wegen mein Add-Ins, wenn ich den Workbook schließe, und neue öffne, dann funktioniert die funktionen nicht mehr. ich muss erst mal das ganze Excel Programm schließen und dann neustarten damit das gut funktioniert. Ich habe das Gefühl, es liegt daran dass den Range nicht wieder freigegeben wird oder nicht übergeschrieben wird.


VG
Kaiser
Bitte warten ..
Mitglied: Biber
02.09.2011 um 13:52 Uhr
Moin KaiserQQ7,

ich bin da ja auch nur interessierter Laie, aber nach meinem Gefühl sind da ein paar zuviel variablen "static".

Wenn ich Excel wäre (was die Götter verhüten mögen), dann würde ich die Variable "ws" genau auf das Workbook setzen, was beim allerersten AddIn-start zufällig das "app.ActiveWorkbook" ist.
Das mag ja gewährleistet sein, dass dieses auch immer das "richtige" ist. Ich würde es dennoch mit Namen ansprechen ( app.WorkBook["Babe] oder ähnlich.

Und kannst du nochmal das Verhalten prüfen, wenn explizit am Ende der SortbyQty() das Range-Object destroyed wird (rngSort = Nothing) ?

Vielleicht ist da ja die ins Nirvana zeigende Referenz.

Grüße
Biber
Bitte warten ..
Ähnliche Inhalte
Entwicklung
C Sharp Datagrid: Error handling
gelöst Frage von adminstEntwicklung3 Kommentare

Guten Morgen zusammen Ich habe eine kleine Frage an die Speziallisten unter euch. Ich habe eine kleine Datagrid in ...

IDE & Editoren
IDE für C-Sharp und C++ auf Windows
gelöst Frage von BugdroidIDE & Editoren8 Kommentare

Hallo, Ich nutze derzeit Visual Studio, aber auf Dauer ist es mir etwas zu Ressourcenfressend und für meine Zwecke ...

C und C++
C Sharp XAML Universal
Frage von DippsC und C++3 Kommentare

Hallo ich versuche gerade mit C#2015 ein Projekt Universal XAML zu erstellen um auf einem Raberry PI 2 mit ...

C und C++
C-sharp SearchPattern (Regex)
Frage von YanmaiC und C++6 Kommentare

Hallo ihr Administratoren, ich verwende ein AUtocpmpletemenu Plugin. Dort habe ich Snippets, die dann sozusagen completed werden. Beim erstellen ...

Neue Wissensbeiträge
Windows 10

Windows 10 Fall Creators Update - Neue Funktion Hyper-V Standardswitch kann ggf. Fehler bei Proxy Configs verursachen

Erfahrungsbericht von rzlbrnft vor 1 StundeWindows 101 Kommentar

Hallo Kollegen, Da wir die Gefahr lieben, haben wir bei einigen Usern nun mittlerweile das Creators Update drauf. Einige ...

Sicherheit

TLS-Zertifikat und privater Schlüssel von Microsofts Dynamics 365 geleakt

Information von Penny.Cilin vor 3 StundenSicherheit

Microsoft hat versehentlich das TLS-Zertifikat inklusive dem privaten Schlüssel seiner Business-Anwendung Dynamics 365 geleakt. TLS-Zertifikat und privater Schlüssel von ...

Viren und Trojaner

Deaktivierter Keylogger in HP Notebooks entdeckt

Information von bitcoin vor 1 TagViren und Trojaner2 Kommentare

Ein Grund mehr warum man Vorinstallationen der Hersteller immer blank bügeln sollte Der deaktivierte Keylogger findet sich im vorinstallierten ...

Router & Routing

Lets Encrypt kommt auf die FritzBox

Information von bitcoin vor 1 TagRouter & Routing

In der neuesten Labor-Version der FB7490 integriert AVM unter anderem einen Let's Encrypt Client für Zugriffe auf das Webinterface ...

Heiß diskutierte Inhalte
Netzwerkmanagement
Firefox Profieles im Roaming
gelöst Frage von Hendrik2586Netzwerkmanagement17 Kommentare

Hallo liebe Leute. :) Ich hab da ein kleines Problem, welches anscheinend nicht unbekannt ist. Wir nutzen hier in ...

LAN, WAN, Wireless
Brainstorming, einfachste Option 1 getrenntes LAN (mit WAN zugang)
Frage von 132954LAN, WAN, Wireless13 Kommentare

Hi, folgendes: Wir bekommen eine Glasfaser Leitung, Und das sollte Optional so aussehen: Ein Modem/Router für das WAN, ein ...

Batch & Shell
Trusted Sites für alle User auf dem PC einpflegen
Frage von xXTaKuZaXxBatch & Shell12 Kommentare

Aufgabestellung: Es sollen auf 1 PC (bzw. mehreren PCs) vertrauenswürdige Sites per Powershell eingetragen werden, die für alle User ...

Netzwerkgrundlagen
Hi eine blöde frage. xD
Frage von 132954Netzwerkgrundlagen12 Kommentare

Also: Habe 2012 r2 essentials neuinstalliert, allerdings installiert diese version ja gleich diesen gangen AD kram mit, den hab ...