确定程序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.
对象.程序IDhttps://msdn.microsoft.com/en-us/library/aa263181(v=vs.60)。aspx,但为了帮助您回答更大的问题:
您有几个选项来;访问(<);stuff>"E;。您可以使用;COM对象“;或;“自动化”;(注意:'Automation';是'COM&35;039;light。)您可能想了解一下'Automation&35e039
在快速的谷歌搜索之后,我发现了这个,它应该可以帮助你形象化你如何访问东西;在VBA中http://access.mvps.org/access/modules/mdl0006.htm 经过进一步的搜索(决定在维基百科上为你找到一些东西)https://en.wikipedia.org/wiki/OLE_Automation还有,这里有一个链接,我已经为你收集信息的主题添加了书签https://support.microsoft.com/en-us/help/196776/office-automation-using-visual-c 谢谢你,约翰本人';我会花些时间阅读你第二篇文章中的链接
然而,出现了一个问题,关于你的第一篇文章。ProgID来自参考文献:;返回由VBControl对象表示的控件的ProgID(编程ID)&引用
执行了一项测试:子测试#40)
E-Tools-References-Acrobat,它将提供额外的答案,而不需要ghostscript或任何其他东西(如果已经安装了Acrobat)
那可能是你的FBI工作人员发的邮件 ; 你';再次欢迎Grrr。有趣的链接(和网站)。如果我没有';t空气中有100个不同的针脚I#039;我很想把它折叠起来(正如我的同事所说)。回复:FBI:
现在想知道;我的球拍里有一些工具;是其中之一 
顺便说一句,我似乎需要这两个: (setq AcroApp (vlax-get-or-create-object "AcroExch.App"))
(setq PartDocs (vlax-get-or-create-object "AcroExch.PDDoc"))
I和#039;我对VBA代码的翻译非常接近(当然不是百分之百的翻译,因为我不理解他是如何将PartDocs视为一个集合的,而它不是一个集合)
提示僧侣。
链接代码中的PartDocs是一个数组,其中每个元素都是CAcroPDDoc对象
粗略浏览后,代码基本上接受要合并的以逗号分隔的PDF文件名字符串,将该字符串解析为一个数组,并将该数组的大小调整为与a相同的大小。然后,对于a中的每个文件名,如果文件存在,则将PDF文档对象添加到PartDocs数组
For循环中的If i部分测试i是否大于零(因为VBA中的0=false),如果是,则将索引处的PDF文档与索引处的PDF文档合并
应';我把它定义为偏头痛:
;|
(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 顺便说一句,谢谢李的意见,但我';我明天读。因为这就像喝伏特加。
http://youtu.be/5qHNQxZGZKU
页:
[1]
2