如何将VBA通过Cells指定Excel范围的写法转换为AutoLisp代码
AutoLisp实现Excel双Cells参数指定范围选取
实现逻辑对应
VBA中第二种范围选取方法的核心是不依赖硬编码的A1样式地址字符串,通过传入两个以行号、列号定位的Cells单元格对象作为Range属性的边界参数:第一个参数为选取范围的左上角单元格,第二个为选取范围的右下角单元格。对应VBA核心实现为:
Set wsRange = ws.Range(ws.Cells(1, 1), ws.Cells(6, 22))
AutoLisp通过vlax系列函数操作Excel COM对象时,多参数直接按传入顺序跟在属性名后即可,不需要做特殊参数封装。
Method2可运行代码
将以下代码填入现有AutoLisp框架的;; Method 2注释下方空缺位置,即可实现和VBA方法2完全一致的效果:
;; Method 2:通过起止行号、列号定义选取范围 ;; 定位范围左上角单元格:第1行第1列(对应A1单元格) (setq startCell (vlax-get-property Worksheet 'Cells 1 1)) ;; 定位范围右下角单元格:第6行第22列(对应V6单元格) (setq endCell (vlax-get-property Worksheet 'Cells 6 22)) ;; 传入两个边界单元格生成目标Range对象 (setq objRange (vlax-get-property Worksheet "Range" startCell endCell)) ;; 执行范围选中操作 (vlax-invoke-method objRange 'Select) ;; 可选操作:释放临时单元格COM对象,避免Excel后台进程残留 (vlax-release-object startCell) (vlax-release-object endCell)
使用注意事项
- 行号、列号均从1开始计数,和Excel原生规则完全一致,不需要做序号转换,例如第22列对应V列、第6行即为工作表从上往下数第6行
- 如果需要选中的范围所在工作表未激活,可在选中操作前添加
(vlax-invoke-method Worksheet 'Activate)代码激活目标工作表,避免跨工作表调用Select方法报错 - 可将起止行号、列号替换为自定义变量,实现动态范围选取,不需要硬编码固定数值
内容的提问来源于stack exchange,提问作者G Beck
相关产品推荐
相关产品推荐

