找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 574|回复: 1

[原创] Lisp向Excel工作簿注入vba代码方法

[复制链接]
发表于 2021-6-30 16:56:50 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
  1. (defun $excel-add-vba$
  2.        (xlapp sh-n VBA-STR run-str lst / item vbproject xlsheet)
  3.           ;向excel里面写vba代码,注入vba代码
  4. ;;;  ($excel-add-vba$
  5. ;;;  xlapp
  6. ;;;  "Sub Lisp_vba()\nMsgBox \"Hello world!\", vbOKOnly, \"Lisp调用Excel\"\nEnd Sub"
  7. ;;;  "(vlax-invoke-method XLAPP (QUOTE RUN) \"Sheet1.Lisp_vba\")"
  8. ;;;  "Sheet1"
  9. ;;;  nil
  10. ;;; )
  11.   (or xlapp (setq xlapp ($xlapp-New$ nil nil nil)))
  12.   (setq  xlsheet
  13.    (vl-catch-all-apply
  14.      'vlax-get-property
  15.      (list (vl-catch-all-apply
  16.        'vlax-get-property
  17.        (list (vl-catch-all-apply
  18.          'vlax-get-property
  19.          (list xlapp 'activeworkbook)
  20.        )
  21.        'Sheets
  22.        )
  23.      )
  24.      'Item
  25.      sh-n
  26.      )
  27.    )
  28.   )
  29.   (setq  VBProject
  30.    (vl-catch-all-apply
  31.      'vlax-get-property
  32.      (list
  33.        (vl-catch-all-apply
  34.          'vlax-get-property
  35.          (list xlapp
  36.          "ActiveWorkbook"
  37.          )
  38.        )
  39.        'VBProject
  40.      )
  41.    )
  42.   )
  43.   (setq  Item (vl-catch-all-apply
  44.          'vlax-invoke-method
  45.          (LIST
  46.      (vl-catch-all-apply
  47.        'vlax-get-property
  48.        (LIST
  49.          VBProject
  50.          'VBComponents
  51.        )
  52.      )
  53.      'Item
  54.      sh-n
  55.          )
  56.        )
  57.   )
  58.   (vl-catch-all-apply
  59.     'vlax-invoke-method
  60.     (LIST
  61.       (vl-catch-all-apply
  62.   'vlax-get-property
  63.   (LIST
  64.     Item
  65.     'CodeModule
  66.   )
  67.       )
  68.       'DeleteLines
  69.       1
  70.       (vl-catch-all-apply
  71.   'vlax-get-property
  72.   (LIST
  73.     (vl-catch-all-apply
  74.       'vlax-get-property
  75.       (LIST
  76.         Item
  77.         'CodeModule
  78.       )
  79.     )
  80.     'CountOfLines
  81.   )
  82.       )
  83.     )
  84.   )          ;删除历史的vba代码
  85.   (vl-catch-all-apply
  86.     'vlax-invoke-method
  87.     (LIST
  88.       (vl-catch-all-apply
  89.   'vlax-get-property
  90.   (LIST
  91.     Item
  92.     'CodeModule
  93.   )
  94.       )
  95.       'AddFromString
  96.       VBA-STR
  97.     )
  98.   )
  99.   (vl-catch-all-apply
  100.     'EVAL
  101.     (list (vl-catch-all-apply 'READ (list run-str)))
  102.   )
  103.   (vl-catch-all-apply
  104.     'vlax-get-property
  105.     (LIST
  106.       (vl-catch-all-apply
  107.   'vlax-get-property
  108.   (LIST
  109.     Item
  110.     'CodeModule
  111.   )
  112.       )
  113.       'CountOfLines
  114.     )
  115.   )          ;返回写入成功的行数
  116. )

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 23个

财富等级: 恭喜发财

发表于 2021-6-30 20:27:58 | 显示全部楼层
既然lisp就可以控制excel,它也是调用的vba的相关代码,那在EXCEL中写入vba,是不是有点脱裤子放屁。意义在哪?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-5-6 13:54 , Processed in 0.323707 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表