Excel4/Excel12
Gilt für: Excel 2013 | Office 2013 | Visual Studio
Ruft eine interne Microsoft Excel-Arbeitsblattfunktion, eine Makroblattfunktion oder einen Befehl oder einen reinen XLL-Befehl aus einer DLL/XLL- oder Coderessource auf.
Alle aktuellen Versionen von Excel unterstützen Excel4. Ab Excel 2007 wird Excel12 unterstützt.
Diese Funktionen können nur aufgerufen werden, wenn Excel die Steuerung an die DLL oder XLL übergeben hat. Sie können auch aufgerufen werden, wenn Excel die Steuerung indirekt über einen Aufruf von Visual Basic for Applications (VBA) übergeben hat. Sie können nicht zu einem anderen Zeitpunkt aufgerufen werden. Sie können beispielsweise nicht während aufrufen der DllMain-Funktion oder in anderen Fällen, wenn das Betriebssystem die DLL aufgerufen hat, oder von einem thread aufgerufen werden, der von der DLL erstellt wurde.
Die Excel4v- und Excel12v-Funktionen akzeptieren ihre Argumente als Array, während die Excel4 - und Excel12-Funktionen ihre Argumente als Liste variabler Länge im Stapel akzeptieren. In allen anderen Aspekten verhält sich Excel4 wie Excel4v, und Excel12 verhält sich genauso wie Excel12v.
int Excel4(int iFunction, LPXLOPER pxRes, int iCount, LPXLOPER argument1, ...);
int Excel12(int iFunction, LPXLOPER12 pxRes, int iCount, LPXLOPER12 argument1, ...);
Parameter
iFunction (int)
Eine Zahl, die den Befehl, die Funktion oder die spezielle Funktion angibt, die Sie aufrufen möchten. Eine Liste der gültigen iFunction-Werte finden Sie im folgenden Abschnitt "Hinweise".
pxRes (LPXLOPER oder LPXLOPER12)
Ein Zeiger auf eine XLOPER (mit Excel4) oder eine XLOPER12 (mit Excel12), die das Ergebnis der ausgewerteten Funktion enthält.
iCount (int)
Die Anzahl der nachfolgenden Argumente, die an die Funktion übergeben werden. In Excel-Versionen bis 2003 kann dies eine beliebige Zahl von 0 bis 30 sein. Ab Excel 2007 kann dies eine beliebige Zahl zwischen 0 und 255 sein.
argument1, ... (LPXLOPER oder LPXLOPER12)
Die optionalen Argumente für die Funktion. Alle Argumente müssen Zeiger auf XLOPER - oder XLOPER12-Werte sein.
Rückgabewert
Gibt einen der folgenden ganzzahligen Werte (int) zurück.
Wert | Rückgabecode | Beschreibung |
---|---|---|
0 | xlretSuccess | Die Funktion wurde erfolgreich aufgerufen. Dies bedeutet nicht, dass die Funktion keinen Excel-Fehlerwert zurückgegeben hat. Um dies herauszufinden, müssen Sie sich den Typ und den Wert des resultierenden pxRes-Parameters ansehen. |
1 | xlretAbort | Der Befehl oder die Funktion wurde nicht ordnungsgemäß beendet (interner Abbruch). Dies kann auftreten, wenn sich ein XLM-Makroblatt durch Aufrufen von CLOSE selbst schließt oder wenn Excel nicht genügend Arbeitsspeicher hat. Wenn Excel diesen Fehler zurückgibt, muss die aufrufende Funktion sofort beendet werden. Die DLL darf xlFree nur vor dem Beenden aufrufen. Alle anderen Aufrufe der C-API sind nicht zulässig. Der Benutzer kann jede Arbeit interaktiv speichern, indem er den Befehl Speichern im Menü Datei verwendet. |
2 | xlretInvXlfn | Eine ungültige Funktionsnummer wurde angegeben. Wenn Sie Konstanten aus der Xlcall.h-Headerdatei verwenden, sollte dies nur auftreten, wenn Sie etwas aufrufen, das in der von Ihnen ausgeführten Excel-Version nicht unterstützt wird. |
4 | xlretInvCount | Es wurde eine ungültige Anzahl von Argumenten eingegeben. In Versionen bis Excel 2003 beträgt die maximale Anzahl von Argumenten, die eine Funktion annehmen kann, 30. Ab Excel 2007 beträgt die maximale Anzahl 255. Einige erfordern eine feste oder minimale Anzahl von Argumenten. |
8 | xlretInvXloper | Eine ungültige XLOPER - oder XLOPER12 wurde an die Funktion übergeben, oder ein Argument des falschen Typs wurde verwendet. |
16 | xlretStackOvfl | Es ist ein Stapelüberlauf aufgetreten. Verwenden Sie xlStack , um die Menge an Platz auf dem Stapel zu überwachen. Vermeiden Sie es nach Möglichkeit, sehr große lokale (automatische) Arrays und Strukturen auf dem Stapel zuzuordnen. sie statisch zu machen. (Beachten Sie, dass ein Stapelüberlauf auftreten kann, ohne erkannt zu werden.) |
32 | xlretFailed | Fehler bei einer befehlsäquivalenten Funktion. Dies entspricht einem Makrobefehl, der das Dialogfeld "Makrofehlerwarnung" anzeigt. |
64 | xlretUncalced | Es wurde versucht, eine Zelle zu dereferenzieren, die noch nicht berechnet wurde, da sie nach der aktuellen Zelle neu berechnet werden soll. In diesem Fall sollte die DLL die Steuerung sofort an Excel zurückgeben. Die DLL darf xlFree nur vor dem Beenden aufrufen. Alle anderen Aufrufe der C-API sind nicht zulässig. Weitere Informationen dazu, welche Funktionen auf die Werte von Zellen zugreifen können, die nicht neu berechnet wurden, finden Sie unter Befehle, Funktionen und Zustände in Excel. |
128 | xlretNotThreadSafe | Es wurde versucht, eine Funktion aufzurufen, die während einer Multithread-Neuberechnung der Arbeitsmappe nicht threadsicher ist oder möglicherweise nicht ist. Ab Excel 2007 wird dieser Wert zurückgegeben und nur innerhalb von XLL-Arbeitsblattfunktionen als threadsicher deklariert. |
256 | xlRetInvAsynchronousContext | Das asynchrone Funktionshandle ist ungültig. Dieser Wert wird nur von Excel 2010 verwendet. |
512 | xlRetNotClusterSafe | Der Aufruf wird in Clustern nicht unterstützt. Dieser Wert wird nur von Excel 2010 verwendet. |
Hinweise
Gültige iFunction-Werte
Gültige iFunction-Werte sind alle xlf...- oder xlc...- Konstanten, die in der Xlcall.h-Headerdatei definiert sind, oder eine der folgenden speziellen Funktionen.
- xlAbort
- xlEnableXLMsgs
- xlGetInst
- xlSheetNm
- xlCoerce
- xlFree
- xlGetName
- xlStack
- xlDefineBinaryName
- xlGetBinaryName
- xlSet
- xlUDF
- xlDisableXLMsgs
- xlGetHwnd
- xlSheetId
Verschiedene Funktionstypen
Excel4 und Excel12 unterscheiden sich zwischen drei Klassen von Funktionen. Die Funktionen werden nach den drei Zuständen klassifiziert, in denen Excel die DLL aufrufen kann.
- Klasse 1 gilt, wenn die DLL als Ergebnis einer Neuberechnung aus einem Arbeitsblatt aufgerufen wird.
- Klasse 2 gilt, wenn die DLL innerhalb eines Funktionsmakros oder eines Arbeitsblatts aufgerufen wird, in dem sie mit einem Nummernzeichen (#) im Texttyp registriert wurde.
- Klasse 3 gilt, wenn eine DLL über ein Objekt, ein Makro, ein Menü, eine Symbolleiste, eine Tastenkombination, eine ExecuteExcel4Macro-Methode oder den Befehl Extras/Makro/Ausführen aufgerufen wird. Weitere Informationen finden Sie unter Befehle, Funktionen und Zustände in Excel.
Die folgende Tabelle zeigt, welche Funktionen in den einzelnen Klassen gültig sind.
Klasse 1 | Klasse 2 | Klasse 3 |
---|---|---|
Beliebige Arbeitsblattfunktion Jede nur XLL-xl... -Funktion mit Ausnahme von xlSet. xlfCaller |
Beliebige Arbeitsblattfunktion Jede xl...- Funktion mit Ausnahme von xlSet. Makroblattfunktionen, einschließlich xlfCaller, die einen Wert zurückgeben, aber keine Aktion ausführen, die sich auf den Arbeitsbereich oder eine geöffnete Arbeitsmappe auswirkt. |
Jede Funktion, einschließlich xlSet - und befehlsäquivalenter Funktionen. |
Anzeigen des Dialogfelds für eine Command-Equivalent-Funktion
Wenn eine befehlsäquivalente Funktion über ein zugeordnetes Dialogfeld verfügt, können Sie das xlPrompt-Bit in iFunction festlegen. Dies bedeutet, dass Excel das entsprechende Dialogfeld anzeigt, bevor der Befehl ausgeführt wird.
Schreiben internationaler DLLs
Wenn Sie das xlIntl-Bit in iFunction festlegen, wird die Funktion oder der Befehl so ausgeführt, als würde sie von einem internationalen Makroblatt aufgerufen. Dies bedeutet, dass sich der Befehl wie in der US-Version von Excel verhält, auch wenn er unter einer internationalen (lokalisierten) Version ausgeführt wird.
xlretUncalced oder xlretAbort
Nachdem Sie einen dieser Rückgabewerte erhalten haben, muss Die DLL sauber und die Steuerung sofort an Excel zurückgeben. Rückrufe in Excel über die C-API mit Ausnahme von xlFree werden deaktiviert, nachdem sie einen dieser Rückgabewerte erhalten haben.
Beispiel
Im folgenden Beispiel wird die Excel12-Funktion verwendet, um die Zelle auszuwählen, aus der sie aufgerufen wurde.
Dieses Codebeispiel ist Teil eines umfangreicheren Beispiels, das im Excel 2010 XLL SDK an der folgenden Stelle bereitgestellt wird, an der Sie das SDK installiert haben:
\Samples\Example\Example.c.
Hinweis
Diese Funktion ruft ein Befehlsmakro (xlcSelect) auf und funktioniert daher nur, wenn es von einem XLM-Makroblatt aufgerufen wird.
short WINAPI Excel12Example(void)
{
XLOPER12 xRes;
Excel12(xlfCaller, &xRes, 0);
Excel12(xlcSelect, 0, 1, (LPXLOPER12)&xRes);
Excel12(xlFree, 0, 1, (LPXLOPER12)&xRes);
return 1;
}