HOW TO: How do I define a named range on an Excel worksheet?
Reference: Q0031
Article last modified on 26-June-2006
The information in this article applies to:
- XLL+ for Visual Studio 2005 - 5.0
- XLL+ for Visual Studio .NET - 4.2, 4.3.1, 5.0
- XLL+ for Visual Studio 6 - 3, 4.1, 4.2, 4.3.1, 5.0
HOW TO: How do I define a named range on an Excel worksheet?
Question
How do I define a named range on an Excel Worksheet?
Answer
Use the CXlMacros::DefineName
method.
Construct a reference to the range which you wish to name. Pass the reference
to CXlMacros::DefineName
along with the name you want to apply to
it.
Note that this code can only be used during Macro functions or event handlers. It cannot be called from a worksheet function.
Example
//{{XLP_SRC(MyDefineName) // NOTE - the FunctionWizard will add and remove mapping code here. // DO NOT EDIT what you see in these blocks of generated code! IMPLEMENT_XLLFN2(MyDefineName, "R", "MyDefineName", "", "User Defined", "No description provided", "", "appscope=1\0" , 2) extern "C" __declspec( dllexport ) LPXLOPER MyDefineName() { XLL_FIX_STATE; CXlOper xloResult; //}}XLP_SRC CXlOper xloActive, xloRef, xloRef2; // Get a reference to cell B2 in the active worksheet if (!xloActive.GetActiveCell()) return CXlOper::RetError(xlerrNA); CXlRef xlrB2(1, 1); xloRef.FromMRef(&xlrB2, 1, xloActive.GetSheetId()); // Define a name in cell B2 if (CXlMacros::DefineName("MyName", xloRef) != 0) { CXllApp::XlMessageBox("Failed to define name", XlMessageBoxTypeExclamation); return CXlOper::RetError(xlerrNA); } // Insert a formula that uses it in cell C2 CString formula = "=MyName*2"; CXlRef xlrC2(1, 2); xloRef2.FromMRef(&xlrC2, 1, xloActive.GetSheetId()); xloRef2.SetFormulaIntl(formula); return xloResult.Ret(); }
Getting the current value of a named range
The code below shows how to retrieve the range referred to by a named range.
//{{XLP_SRC(MyGetName) // NOTE - the FunctionWizard will add and remove mapping code here. // DO NOT EDIT what you see in these blocks of generated code! IMPLEMENT_XLLFN2(MyGetName, "R", "MyGetName", "", "User Defined", "No description provided", "", "appscope=1\0", 2) extern "C" __declspec( dllexport ) LPXLOPER MyGetName() { XLL_FIX_STATE; CXlOper xloResult; //}}XLP_SRC // Get the name 'MyName' CString nameValue; if (CXlMacros::GetName(nameValue, CXlOper("!MyName")) != 0) { CXllApp::XlMessageBox("Failed to get name", XlMessageBoxTypeExclamation); return CXlOper::RetError(xlerrNA); } // Display the name CXllApp::XlMessageBox("MyName:'" + nameValue + "'", XlMessageBoxTypeInformation); return xloResult.Ret(); }
See also
CXlMacros::DefineName() in the online documentation.
CXlMacros::GetName() in the online documentation.