首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Autolisp选择Excel范围

使用Autolisp选择Excel范围
EN

Stack Overflow用户
提问于 2022-06-15 22:24:06
回答 1查看 229关注 0票数 0

我试图在AutoLisp和Excel之间为一系列的单元格工作。我知道如何使用Excel多种方式选择单元格,但我只能看到一种通过AutoLisp选择单元格的方法。如何将VBA代码中显示的第二个方法转换为AutoLisp?

VBA代码:

代码语言:javascript
复制
Option Explicit
Public Sub Temp()
    '' Variable Declarations
    Dim wb As ThisWorkbook
    Dim ws As Worksheet
    Dim wsRange As Range
    
    '' Initializing Variables
    Set wb = ThisWorkbook
    Set ws = wb.Sheets(1)
    ws.Activate
    
    '' Method 1
    Set wsRange = ws.Range("$A$1:$V$6")
    wsRange.Select
    Stop
    ws.Cells(1, 1).Select
    Stop
    
    '' Method 2
    Set wsRange = ws.Range(ws.Cells(1, 1), ws.Cells(6, 22))
    wsRange.Select
End Sub

AutoLisp代码:

代码语言:javascript
复制
(setq *ExcelApp* nil)
(defun C:fcnTest(/ 
    $ExcelFile Allwbs Workbook ;------;
    Sheets Worksheet wsRange objRange ;
    );Variable Declarations

    ;; Overhead
    (setq $ExcelFile "C:\\Users\\[UserName]\\Desktop\\Test.xlsx")
    (setq *ExcelApp* (vlax-get-or-create-object "Excel.Application"))
    (setq Allwbs (vlax-get-property *ExcelApp* 'WorkBooks))
    (setq Workbook (vlax-invoke-method Allwbs 'Open $ExcelFile))
    (setq Sheets (vlax-get-property Workbook "Sheets"))
    (setq Worksheet (vlax-get-property Sheets 'Item 1))
    
    ;; Method 1
    (setq wsRange (vlax-get-property Worksheet 'Cells))
    (setq objRange (vlax-get-property wsRange "Range" "$A$1:$V$6"))
   (vlax-invoke-method objRange 'Select)

    ;; Method 2
    ;; ???
    
    ;; Releasing Excel Application
    (vlax-release-object *ExcelApp*)(gc); Releasing from memory
    (setq *ExcelApp* nil);--------------; Setting variable to nothing
);defun C:fcnTest
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-07-01 18:04:32

按照干净的格式,可以使用一些附加变量重写VBA中的代码。

重写VBA代码:

代码语言:javascript
复制
'' Method 2
set wsCell1 = ws.Cells(1, 1)
set wsCell2 = ws.Cells(6, 22)
Set wsRange = ws.Range(wsCell1, wsCell2)

通过这种修改,AutoLisp代码中的方法2可以用相同的方式编写。

AutoLisp代码:

代码语言:javascript
复制
;; Method 2
(setq objCell1 (vlax-get-property Worksheet 'Cells 1 1))
(setq objCell2 (vlax-get-property Worksheet 'Cells 6 22))
(setq objRange (vlax-get-property wsRange "Range" objCell1 objCell2))
(vlax-invoke-method objRange 'Select)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72638486

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档