excel表格名称的秘密

名称是Excel中的一项强大功能 , 无论是在公式中还是在VBA中运用名称 , 都能带来极大的便利 。
本文主要谈谈在Excel中不被注意到的一些名称的使用 。
Excel内置的名称
Excel有一些内置的名称 , 它们会在特定的环境下自动使用 。
例如 , 设置打印区域后 , Excel会自动命名打印区域为Print_Area , 如下图1所示 。

excel表格名称的秘密

文章插图
图1
如果设置打印标题 , 则Excel会创建名称Print_Titles 。
又如 , 在使用高级筛选获取不重复值列表时 , Excel会自动创建名称Extract , 如图2所示 。
excel表格名称的秘密

文章插图
图2
如果在使用高级筛选时 , 使用了条件 , 除了名称Extract外 , Excel还会自动将条件区域命名为Criteria , 如图3所示 。
excel表格名称的秘密

文章插图
图3
Excel还有其它一些内置名称 , 例如:Consolidate_Area、Database、FilterDatabase、Sheet_Title , 等等 。
因此 , 在VBA代码中 , 如果出现了上述名称 , 你不必感到奇怪 。例如 , 下面的语句删除当前工作表中已经设置的打印区域:
ActiveSheet.Names(“Print_Area”).Delete
在《经典代码解析5:查找并显示部分匹配的数据》中 , VBA代码将名称“Extract”定义为常量 , 在筛选完成后 , 再将该名称代表的区域删除 , 即作为临时数据区域 。
Excel中隐藏的名称空间
认识Excel隐藏的名称空间
Excel隐藏的名称空间是一个属于当前Excel实例的内存区域 , 该区域加载项DLLS(“XLLS”)能够存储临时的名称 。使用这个区域 , 即便没有可利用的宏工作表 , XLLs也能够定义名称 。
隐藏着的名称操作基于XLM函数SET.NAME、GET.NAME和EVALUATE 。当在XLM宏工作表中使用时 , SET.NAME定义一个标准的工作表级名称;当它在XLL中被调用时 , 创建一个应用程序级名称并且将其存储在一个被隐藏的区域中 。
与隐藏着的名称相关的可用的C API命令如下:
Excel4(xlfSetName,&xResult,2,&xName,&xValue);
定义包含xValue的名称xlName 。
Excel4(xlfGetName,&xResult,1,&xName);
获取xlName的定义(例如 , “=1”) , 并将其存储在xResult中 。
Excel4(xlfEvaluate,&xResult,1,&xName);
获取xlName的内容(例如 , 1)并将其存储在xResult中 。
Excel4(xlfSetName,&xResult,1,&xName);
删除xlName(忽略第二个参数) 。
定义在隐藏区域的名称有一些特殊功能 , 这使得它们与标准工作簿名称有很大的不同 。
隐藏的名称空间的特征
在隐藏的名称空间中所定义的名称不属于任何工作簿 , 而属于应用程序本身 。
在Excel的任何地方可以直接访问这些名称 。无论在哪个工作簿中创建了这个名称 , 在任何工作簿中的任何VBA模块、工作表或宏工作表(和任何DLL加载项)中都能直接读取和修改它们 。
隐藏的名称的“生存时间”与当前Excel会话一致 。
如果你在工作簿WB1.xlsx中某个VBA模块中创建了一个名称 , 然后关闭了这个工作簿 , 那么该名称仍然存储在隐藏的命名空间中 。如果你接着打开另一个工作簿WB2.xlsx , 那么该工作簿的VBA过程仍能获取和修改这个隐藏的名称 , 即便它是在WB1.xls中所创建的 。如果没有被任何VBA加载项所限制的话 , 那么在隐藏的名称空间中所定义的名称能被用作永久的“公共变量”访问 。

推荐阅读