Grrr1337 发表于 2018-2-23 08:56:46

确定程序ID

是否可以通过了解库we#039;是否已从VBAIDE访问
I'我试图学习一些VBA代码,更精确地将它们翻译成lisp代码
问题是:案例1假设您在excel应用程序内访问VBAIDE,但如何发现他使用的应用程序的程序id是“1”;擅长应用程序
那么下次在其他应用程序中使用VBA时,你会知道吗
例如,使用Word中的VBA操作Excel,反之亦然
因为在一些代码I和039中;我试着理解,这家伙只是从:
[代码这让我很困惑,因为VBA代码缺少CreateObject函数,在LISP中是(vlax create object progid):
CreateObject("progid")
I和#039;我猜他访问了Acrobat应用程序,我不知道;我不知道程序id,我依靠运气找到合适的对象,使用M.Puckett#039;s _FindProjIDs subfo.

JohnK 发表于 2018-2-23 09:31:57


对象.程序IDhttps://msdn.microsoft.com/en-us/library/aa263181(v=vs.60)。aspx,但为了帮助您回答更大的问题:
您有几个选项来;访问(&lt);stuff&gt&QUOTE;。您可以使用;COM对象“;或;“自动化”;(注意:'Automation'是'COM&35;039;light。)您可能想了解一下'Automation&35e039
在快速的谷歌搜索之后,我发现了这个,它应该可以帮助你形象化你如何访问东西;在VBA中http://access.mvps.org/access/modules/mdl0006.htm

JohnK 发表于 2018-2-23 10:25:35

经过进一步的搜索(决定在维基百科上为你找到一些东西)https://en.wikipedia.org/wiki/OLE_Automation还有,这里有一个链接,我已经为你收集信息的主题添加了书签https://support.microsoft.com/en-us/help/196776/office-automation-using-visual-c

Grrr1337 发表于 2018-2-23 12:10:51

谢谢你,约翰本人'我会花些时间阅读你第二篇文章中的链接
然而,出现了一个问题,关于你的第一篇文章。ProgID来自参考文献:;返回由VBControl对象表示的控件的ProgID(编程ID)&引用
执行了一项测试:子测试#40)
E-Tools-References-Acrobat,它将提供额外的答案,而不需要ghostscript或任何其他东西(如果已经安装了Acrobat)
那可能是你的FBI工作人员发的邮件 

JohnK 发表于 2018-2-23 13:39:38

你'再次欢迎Grrr。有趣的链接(和网站)。如果我没有't空气中有100个不同的针脚I#039;我很想把它折叠起来(正如我的同事所说)。回复:FBI:

Grrr1337 发表于 2018-2-23 14:56:08


现在想知道;我的球拍里有一些工具;是其中之一&nbsp
顺便说一句,我似乎需要这两个: (setq AcroApp (vlax-get-or-create-object "AcroExch.App"))
(setq PartDocs (vlax-get-or-create-object "AcroExch.PDDoc"))

I和#039;我对VBA代码的翻译非常接近(当然不是百分之百的翻译,因为我不理解他是如何将PartDocs视为一个集合的,而它不是一个集合)

Grrr1337 发表于 2018-2-23 15:04:09

提示僧侣。

Grrr1337 发表于 2018-2-23 15:29:55


链接代码中的PartDocs是一个数组,其中每个元素都是CAcroPDDoc对象
粗略浏览后,代码基本上接受要合并的以逗号分隔的PDF文件名字符串,将该字符串解析为一个数组,并将该数组的大小调整为与a相同的大小。然后,对于a中的每个文件名,如果文件存在,则将PDF文档对象添加到PartDocs数组
For循环中的If i部分测试i是否大于零(因为VBA中的0=false),如果是,则将索引处的PDF文档与索引处的PDF文档合并

Grrr1337 发表于 2018-2-24 17:13:28


应'我把它定义为偏头痛:
;|
(Merge ; Creates a file, but it contains only the first PDF file (I was testing on single-paged PDFs)
(strcat (getenv "userprofile") "\\Desktop\\Hale 515\\PDFs") ; in
(strcat (getenv "userprofile") "\\Desktop\\" "MergedPDFS.pdf") ; out
)
|;

; in - folder that contains .pdf files
; out - path\\filename.pdf
(defun Merge ( in out / *error* L n PartDocs ni n r )

(defun *error* ( m )
    (and PartDocs (vl-catch-all-apply 'vlax-invoke-method (list PartDocs 'Close)))
    (and AcroApp (vl-catch-all-apply 'vlax-invoke-method (list AcroApp 'CloseAllDocs)))
    (and AcroApp (vl-catch-all-apply 'vlax-invoke-method (list AcroApp 'Exit)))
    (foreach x (list AcroApp AcroPDDoc) (and (eq 'VLA-OBJECT (type x)) (vl-catch-all-apply 'vlax-release-object (list x))))
    (gc) (gc) (and m (princ m)) (princ)
); defun *error*

(setq AcroApp (vlax-get-or-create-object "AcroExch.App"))
(setq L ((lambda (pat) (mapcar '(lambda (x) (strcat pat "\\" x)) (vl-directory-files pat "*.pdf" 1))) in))

; Not Sure how to adjust 'n'
(setq n (length L))
; (setq n 0)

(foreach x L ; The issue is within this loop
    (setq PartDocs (vlax-get-or-create-object "AcroExch.PDDoc"))
   
    (eq :vlax-true (vlax-invoke-method PartDocs 'Open x))
    (setq ni (vlax-invoke-method PartDocs 'GetNumPages))
    ; Function InsertPages(nInsertPageAfter As Long, iPDDocSource As Object, lStartPage As Long, lNumPages As Long, lInsertFlags As Long) As Boolean
    (if (eq :vlax-true (vlax-invoke-method PartDocs 'InsertPages (1- n) PartDocs 0 ni :vlax-true)) ;
      (progn
      (setq n (+ n ni))
      
      ); progn
      (progn
      (setq n (+ 1 (vlax-invoke-method PartDocs 'GetNumPages)))
      
      ); progn
    ); if
    ; (vlax-invoke-method PartDocs 'Close)
    ; (vlax-release-object PartDocs)
); foreach
(setq r
    (eq :vlax-true
      (vlax-invoke-method PartDocs 'Save
      1 ; PDSaveFull
      out
      ); vlax-invoke-method
    ); eq
); setq r
(*error* nil) r
); defun Merge 顺便说一句,谢谢李的意见,但我'我明天读。因为这就像喝伏特加。

JohnK 发表于 2018-2-26 17:18:00


http://youtu.be/5qHNQxZGZKU
页: [1] 2
查看完整版本: 确定程序ID