我试图在AutoLisp和Excel之间为一系列的单元格工作。我知道如何使用Excel多种方式选择单元格,但我只能看到一种通过AutoLisp选择单元格的方法。如何将VBA代码中显示的第二个方法转换为AutoLisp?
VBA代码:
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 SubAutoLisp代码:
(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发布于 2022-07-01 18:04:32
按照干净的格式,可以使用一些附加变量重写VBA中的代码。
重写VBA代码:
'' Method 2
set wsCell1 = ws.Cells(1, 1)
set wsCell2 = ws.Cells(6, 22)
Set wsRange = ws.Range(wsCell1, wsCell2)通过这种修改,AutoLisp代码中的方法2可以用相同的方式编写。
AutoLisp代码:
;; 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)https://stackoverflow.com/questions/72638486
复制相似问题