Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

Hi zusammen,

hab mal wieder son Excelproblem...

Ich möchte, dass das mein Programm eine Spalte alphabetisch sprtiert.

Ich dneke mal, dass es mit "range.sort" gehen müsste, aber der Funktion müssen 15 Parameter übergeben werden und ich bekomme die nicht zusammen...

Hat jemand ne Idee oder muss es doch mit einer anderen Funktion gemacht werden?

Danke,

PibeY2k

Leider sind sie nicht alle Optional, einige sind auch long.

Ich habe im Netz dieses hier gefunden, aber leiger nur mit 12 Parametern..

range_new.Sort(COleVariant("A1"),long("xlAscending"),COleVariant("A1"),

COleVariant(long("xlSortValue"),VT_I4),long("xlAscending"),COleVariant("A1"),

long("xlAscending"),long("xlNo"),COleVariant(long(1),VT_I4),COleVariant((long)FALSE, VT_BOOL) ,

long("xlSortRows"),long("xlPinYin"));

Wenn ich jetzt noch 3 Parameter, covOptional dranhänge, sagt er mir auch, dass die Sort Methode fehlerhaft ist....

Originally posted by PibeY2k

long("xlAscending")

Mal abgesehen davon, dass das so nicht klappen kann, sind alle Parameter im Automatisierungsinterface Variants. Es sollte also mit 15mal covOptional klappen.

Die Version mit 12 Parametern ist übrigens die von Excel 2000.

Originally posted by Klotzkopp

Mal abgesehen davon, dass das so nicht klappen kann, sind alle Parameter im Automatisierungsinterface Variants. Es sollte also mit 15mal covOptional klappen.

Die Version mit 12 Parametern ist übrigens die von Excel 2000.

Oh ja ich erinner mich, dass ist beim öffnen ja genau so, dass für Excel 2000 weniger Parameter benutzt werden.

ok, ich habe jetzt 15 mal covOptional hingeschrieben, dann gibt er mir folgenden fehler aus

error C2664: 'Sort' : Konvertierung des Parameters 2 von 'class COleVariant' in 'long' nicht moeglich

Kein benutzerdefinierter Konvertierungsoperator verfuegbar, der diese Konvertierung durchfuehren kann, oder der Operator kann nicht aufgerufen werden

Originally posted by PibeY2k

error C2664: 'Sort' : Konvertierung des Parameters 2 von 'class COleVariant' in 'long' nicht moeglich

Eigenartig. Wie hast du das Automatisierungsinterface eingebunden? Importierst du die Typbibliothek oder hast du den Klassenassitenten verwendet? Wenn letzteres, wie sieht die Methodendeklaration von Range::Sort aus?

Das Automatisierungsinterface habe ich genau nach der Anleitung in der MSDN eingebunden.

http://support.microsoft.com/default.aspx?scid=kb;EN-US;178749

in den Klassen ist die Methode so beschrieben.

void Range::Sort(const VARIANT& Key1, long Order1, const VARIANT& Key2, const VARIANT& Type, long Order2, const VARIANT& Key3, long Order3, long Header, const VARIANT& OrderCustom, const VARIANT& MatchCase, long Orientation, long SortMethod, 

		const VARIANT& IgnoreControlCharacters, const VARIANT& IgnoreDiacritics, const VARIANT& IgnoreKashida)

{

	static BYTE parms[] =

		VTS_VARIANT VTS_I4 VTS_VARIANT VTS_VARIANT VTS_I4 VTS_VARIANT VTS_I4 VTS_I4 VTS_VARIANT VTS_VARIANT VTS_I4 VTS_I4 VTS_VARIANT VTS_VARIANT VTS_VARIANT;

	InvokeHelper(0x370, DISPATCH_METHOD, VT_EMPTY, NULL, parms,

		 &Key1, Order1, &Key2, &Type, Order2, &Key3, Order3, Header, &OrderCustom, &MatchCase, Orientation, SortMethod, &IgnoreControlCharacters, &IgnoreDiacritics, &IgnoreKashida);

}

Ok, ich habe eine Lösung bei CodeGuru gefunden...

Er sortiert jetzt 3 Spalten Aufsteigend, ohne Überschrift

VARIANT var;

	LPDISPATCH lpdisp;

	range = sheet.GetRange(COleVariant("A2"),COleVariant("C10"));

                //Hier habe ich A2 genommen, damit er die Überschrift nicht mitsortiert

	range.Select();


	lpdisp =sheet.GetRange(COleVariant("A1"),COleVariant("A1"));

	var.vt = VT_DISPATCH; 

	var.pdispVal = lpdisp; 

	range.Sort(var, //key

	1L , //order

	covOptional, //optional key2

	covOptional, // optional type

	1L, // order2 

	covOptional, //key3

	1L,// order3

	2L , // header

	COleVariant((long)1), // order custom Normal 

	covFalse, // case insensitive

	1L , //orientation

	1L, // Sort method

	covTrue,

	covTrue,

	covTrue);


	ASSERT(lpdisp);

	range.AttachDispatch(lpdisp);

Aber warum bei Order nur 1L bzw 2L steht, habe ich nicht so ganz verstanden....

PibeY2k

Originally posted by PibeY2k

Aber warum bei Order nur 1L bzw 2L steht, habe ich nicht so ganz verstanden....

Das kann ich dir erklären. Diese ganzen xl-Dinger (wie xlSortValue, xlAscending, xlNo) sind symbolische Konstanten für Zahlenwerte. Leider kann man die von C++ aus nicht benutzen, sondern man muss die Zahlenwerte selbst kennen. Das L kennzeichnet einfach nur den Datentyp als long.

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.