在word和excell兩個應用程式間的激活操作

2020-12-12 VBA語言專家

如我們的報告界面,當我們的界面繼續往下進行,在第二個以及第三個按鈕處我們要激活剛才打開的excel,這個按鈕的代碼該如何寫呢?

1 用AppActivate語句

利用AppActivate語句激活EXCEL是非簡單的,我們看下面的按鈕代碼:

Private Sub CommandButton2_Click()

AppActivate "Microsoft Excel"

End Sub

代碼的截圖:

代碼講解:我們先看看AppActivate語句的語法:

語法:AppActivatetitle[,wait]

參數title;是必須的,這是應用程式的名稱,正如它顯示在應用程式窗口的標題欄那樣,或者它也可以是Shell函數返回的任務ID號碼。注意,參數title要跟每個正運行的應用程式的標題字符串進行對比,如果沒有精確的匹配,那麼任何標題字符串裡前面的字符和參數title一致的應用程式就會被激活。(例如,你要激活Excel,那麼title參數應該是「Microsoft Excel」,如果你寫的是「Microsoft」,那麼激活的就也可能是Word,PowerPoint……)。

第二個參數wait是可選的,它是個布爾值(True或False),明確VB什麼時候激活應用程式。如果在這裡是False的話,該應用程式就立即會被激活,甚至被調應用程式並沒有焦點。如果在wait參數處放置True的話,那麼被調的應用程式就會等到它有了焦點,然後才會激活該應用程式。

例如,要激活Word,你就得輸入下列語句:AppActivate 「Microsoft Word」注意,應用程式名稱用雙引號引用起來。

也可以使用Shell函數返回的數值作為語句AppActivate的參數,例如:

Sub mynz()

ReturnValue = Shell("C:\Microsoft Office\Office\Word.exe",1)

AppActivate ReturnValue

End sub

2 利用API函數

如本講的內容,在Word中使用代碼自動化激活Excel,其實,在我們寫程序的時候,會發現,當運行某個活動應用程式時(如word),從這個運行程序的代碼激活另外一個應用程式作為主窗口(如在word運行時激活Excel窗口)對於用戶來說是非常有用的。這時我們可以嘗試使用上面的AppActivate語句,但這要求事先知道要激活的窗口的標題。而且,從實際的表現看,AppActivate有點給人不靠譜的感覺,有時工作,有時不工作(會提示:引發錯誤5,無效的過程調用)。所以,我給大家講解下面的第二種方案就是調用API函數的方案。

我們可以使用幾個簡單的Windows API函數完成同樣的任務。API是直接調用組成Windows的DLL庫文件的過程。可以使用API函數完成VBA本身無法執行的操作。但是有一點值得注意。就是API沒有VBA代碼的錯誤處理功能,如果使用無效參數調用API函數,可能會導致Excel崩潰並丟失所有工作。API函數的使用應該非常謹慎。

以下代碼將激活主Excel窗口並將鍵盤焦點設置為Excel中的活動工作表。我這裡給出的代碼在13版32位office中已經實測,在16版及64位ofiice或許不能完全得到你需要的效果,這一點要注意。當然為了保證代碼應適用於其他的場合我給出的是通用的版本,可以將MyCLASS的值從xlmain更改為其他應用程式的WINDOW類從而完成實際的需要。

Option Compare Text '聲明比較字符串數據時要使用的默認比較方法按TEXT比較。

' Window API 引用聲明

Private Declare Function BringWindowToTop Lib "user32" (ByVal HWnd As Long) As Long

Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" ( _

ByVal lpClassName As String, _

ByVal lpWindowName As String) As Long

Private Declare Function SetFocus Lib "user32" (ByVal HWnd As Long) As Long

Private Sub CommandButton1_Click()

Dim Res As Long

Dim XLHWnd As Long

Const MyCLASS = "XLMAIN"

'假如有多個EXCEL運行,程序是無法判斷是要激活哪一個EXCEL的;

'同時必須使用vbNullString調用,而不是""的空字符串的調用在FindWindow函數中兩者有不同

XLHWnd = FindWindow(lpClassName:=MyCLASS, lpWindowName:=vbNullString)

If XLHWnd > 0 Then

'設置活動窗口

Res = BringWindowToTop(HWnd:=XLHWnd)

If Res = 0 Then

MsgBox "置頂激活錯誤,錯誤代碼: " & CStr(Err.LastDllError)

Else

SetFocus HWnd:=XLHWnd

End If

Else

MsgBox "沒有發現 Excel被打開"

End If

End Sub

代碼截圖:

代碼講解:上述代碼在頭部建立了引用API函數的聲明,在代碼中首先會查找excel程序,如果找到會將EXCEL置頂。此程序將激活主EXCEL程序,並獲得焦點,注意:如果打開VBA編輯器,此操作將無法正常工作。如果打開VBA編輯器窗口,系統將設置焦點到那個窗口,而不是XLMAIN窗口。此代碼可以激活任何應用程式,只需更改myCLASS到應用程式主窗口的類,這裡我給大家一些常見的OFFICE應用程式常見的類:

Excel 97、2000、2002、2003、2007、2013 為 XlMain

Word 97、2000、2002、2003、2007、2013 為OpusApp

Access 2000、2002、2003、2007、2013 為OMain

下面我們看看上述代碼的詳細講解:

① Const MYCLASS = "XLMAIN"

獲取主'Excel應用程式窗口的窗口句柄("XLMAIN")。如果「正在運行Excel的多個實例」,您無法控制將檢索哪個實例的HWnd。

② XLHWnd = FindWindow(lpClassName:=MyCLASS, lpWindowName:=vbNullString)

在調用' FindWindow時,你必須使用vbNullString不是一個空字符串"",當調用API函數時,vbNullString和空字符串「」之間有區別。

③ BringWindowToTop(HWnd:=XLHWnd) 將應用程式置頂

函數語法: BringWindowToTop(HWND hWnd);

函數功能:該函數將指定的窗口設置到Z序的頂部。如果窗口為頂層窗口,則該窗口被激活;如果窗口為子窗口,則相應的頂級父窗口被激活。

參數:hWnd: 設置到Z序的頂部的窗口句柄。

返回值:如果函數成功,返回值為非零;如果函數失敗,返回值為零。若想獲得更多錯誤信息,可以調用GetLastError函數。

④ FindWindow用法

函數功能:該函數獲得一個頂層窗口的句柄,該窗口的類名和窗口名與給定的字符串相匹配。這個函數不查找子窗口。在查找時不區分大小寫。

函數語法:HWND FindWindow(LPCTSTR IpClassName,LPCTSTR IpWindowName);

參數:IpClassName :指向一個指定了類名的空結束字符串,或一個標識類名字符串的成員的指針。如果該參數為一個成員,則它必須為前次調用theGlobafAddAtom函數產生的全局成員。該成員為16位,必須位於IpClassName的低 16位,高位必須為 0。

IpWindowName:指向一個指定了窗口名(窗口標題)的空結束字符串。如果該參數為空,則為所有窗口全匹配。

返回值:如果函數成功,返回值為具有指定類名和窗口名的窗口句柄;如果函數失敗,返回值為NULL。

這個函數有兩個參數,第一個是要找的窗口的類,第二個是要找的窗口的標題。在搜索的時候不一定兩者都知道,但至少要知道其中的一個。有的窗口的標題是比較容易得到的,如"計算器",所以搜索時應使用標題進行搜索。但有的軟體的標題不是固定的,如"記事本",如果打開的文件不同,窗口標題也不同,這時使用窗口類搜索就比較方便。如果找到了滿足條件的窗口,這個函數返回該窗口的句柄,否則返回0。

⑤關於句柄,句柄是整個Windows編程的基礎。一個句柄是指使用的一個唯一的整數值,即一個4位元組(64位程序中為8位元組)長的數值,來標識應用程式中的不同對象和同類中的不同的實例,諸如,一個窗口,按鈕,圖標,滾動條,輸出設備,控制項或者文件等。應用程式能夠通過句柄訪問相應的對象的信息,但是句柄不是指針,程序不能利用句柄來直接閱讀文件中的信息。如果句柄不在I/O文件中,它是毫無用處的。 句柄是Windows用來標誌應用程式中建立的或是使用的唯一整數,Windows大量使用了句柄來標識對象。

⑥ SetFocus HWnd:=XLHWnd

設置焦點。

本節知識點回向在本節中我們講了如何做到在不同的應用程式間切換,主要利用了兩種方案,一種是利用API函數,要查找到程序的局部然後置頂,一種是利用了AppActivate這兩種方法在應用上要注意測試對於前者要注意所用的office是否合適於這種應用後者要注意應用的穩定性本講的知識點

AppActivate 如何應用

FindWindow 和SetFocus 如何應用

③ 上述兩種應用的優缺點分析。

④ 理解API函數聲明與OFFICE版本的關係。

本節代碼參考文件001 在WORD中激活EXCEL.docm」

在取代OFFICE新的辦公軟體沒有到來之前,誰能在數據處理方面做到極致,誰就是王者。其中登峰至極的技能非VBA莫屬!學習VBA是個過程,也需要經歷一種枯燥的感覺,如太白詩云:眾鳥高飛盡,孤雲獨去閒。相看兩不厭,只有敬亭山。

「水善利萬物而不爭」,綿綿密密,微則無聲,巨則洶湧。學習亦如此,知道什麼是自己所需要的,不要蜷縮在一小塊自認為天堂的世界裡,待到暮年時再去做自欺欺人的言論。要努力提高自己,用一顆充滿生機的心靈,把握現在,這才是進取。越是有意義的事情,困難會越多。願力決定始終,智慧決定成敗。不管遇到什麼,都是風景。看淡紛爭,看輕得失。茶,滿也好,少也好,不要計較;濃也好,淡也好,其中自有值得品的味道。去感悟真實的時間,靜下心,多學習,積累福報。而不是天天混日子,也不是天天熬日子。在後疫情更加嚴峻的存量殘殺世界中,為自己的生存進行知識的儲備,特別是新知識的儲備。學習時微而無聲,利用時則巨則洶湧。

VBA是利用Office實現自己小型辦公自動化的有效手段,我記得20年前自己初學VBA時,那時的資料甚少,只能看源碼自己琢磨,真的很難。20年過去了,為了不讓學習VBA的朋友重複我之前的經歷,我根據自己多年VBA實際利用經驗,推出了六部VBA專門教程。

第一VBA代碼解決方案是VBA中各個知識點的講解,覆蓋絕大多數的VBA知識點,初學必備;

第二VBA資料庫解決方案資料庫是數據處理的專業利器,教程中詳細介紹了利用ADO連接ACCDB和EXCEL的方法和實例操作,適合中級人員的學習。

第三VBA數組與字典解決方案數組和字典是VBA的精華,字典是VBA代碼水平提高的有效手段,值得深入的學習,是初級及中級人員代碼精進的手段。

第四VBA代碼解決方案之視頻是專門面向初學者的視頻講解,可以快速入門,更快的掌握這門技能。

第五VBA中類的解讀和利用是一部高級教程,講解類的虛無與肉身的度化,類的利用雖然較少,但仔細的學習可以促進自己VBA理論的提高。

第六套教程:《VBA信息獲取與處理》是一部高級教程,涉及範圍更廣,實用性更強,面向中高級人員。教程共二十個專題,包括:跨應用程式信息獲得、隨機信息的利用、電子郵件的發送、VBA網際網路數據抓取、VBA延時操作,剪切板應用、Split函數擴展、工作表信息與其他應用交互,FSO對象的利用、工作表及文件夾信息的獲取、圖形信息的獲取以及定製工作表信息函數等等內容。

學習的過程也是修心的過程,修一個平靜的心。在代碼的世界中,心平靜了,心情好了,身體自然而然就好。心靜則正,內心裡沒有那麼多邪知邪見,也就沒有那麼多妄想。利人就是利己。這些教程也是為幫助大家起航,助上我自己之力,我的上述教程是我多的經驗的傳遞,大家可以根據1,3,2,6,5或者是4,3,2,6,5的順序逐漸深入的逐漸學習。

每一分收穫都是成長的記錄,怎無憑,正是這種執著,成就了朝霞的燦爛。最後將一闕詞送給致力於VBA學習的朋友,讓大家感受一下學習過程的枯燥與執著:

浮雲掠過,暗語無聲,

唯有清風,驚了夢中啼鶯。

望星,疏移北鬥,

奈將往事雁同行。

阡陌人,昏燈明暗,

忍顧長亭。

多少VBA人,

暗夜中,悄聲尋夢,盼卻天明。

怎無憑!

分享成果,隨喜正能量

相關焦點

  • VBA代碼大全030:用vba強制關閉word應用程式
    我們有時候需要從word中提取數據到excel中。 這時候一般的套路都是在excel vba中創建word應用程式實例,然後一番操作以後關閉word應用程式。數據的提取操作 '*********** '關閉打開的文檔 oDoc.Close (False) '退出Word應用程式 oWord.QuitEnd Sub這裡會有個問題,就是最後的 oWord.Quit 好像是把word應用程式關閉了,但是事實上往往經常是關閉不成功的,如果打開系統任務管理器,會發現實際上word.exe進程仍然存在。
  • Word附註應用程式的原理
  • ...電子憑證激活和應用推廣工作部署會暨應用、軟體安裝及操作培訓會
    2020年11月5日,潼關縣醫保局召開全縣醫保電子憑證激活和應用推廣工作部署會暨應用、軟體安裝及操作培訓會。渭南市醫保局、支付寶公司分別現場進行軟體的安裝與電子醫保卡的激活使用進行了詳細的培訓指導。會議要求:從提高認識,充分領會國家醫保局推行醫保電子憑證的重要意義;加強落實,確保階段性各項工作任務落實;強化督導,確保醫保電子憑證激活使用工作順利開展。潼關縣醫保局全面提升群眾對醫保電子憑證認知度和知曉率,不斷提高參保人員醫保電子憑證激活率、支付率和結算率,有力的推進了潼關縣醫保電子憑證建設應用工作。
  • 在EXCEL界面實現WORD文檔的打開和校驗
    我們仍是看看利用這個語句來檢查已經打開的word文檔的標準代碼:    Set objApp = GetObject(, "Word.Application")objDoc.Application.Visible = True    If objApp Is Nothing ThenMsgBox "當前未檢測到打開的Word應用程式!"
  • 微信聊天記錄導出word?手機操作一步到位!
    微信聊天記錄導出word?手機操作一步到位!  一、電腦備份手機文件  微信聊天記錄導出word?其實,許多軟體都支持手機數據和PC端的同步備份。要使用的是正版軟體,我們需要先通過瀏覽器訪問卓師兄官網(官網:https://www.zhuoshixiong.com/)或者手機自帶的應用商店進行下載安裝【卓師兄App】去手機自帶的應用商店卓師兄,好後就可以開始操作了!  運行卓師兄,點擊首頁的【消息恢復】,點擊【開始恢復】>開啟【無障礙輔助功能】。
  • 第105天: Python 操作 Word
    ('如何使用 Python 創建 Word',0)# 保存文件doc1.save('word1.docx')這樣就完成了創建文檔和文章標題的操作,下面通過命令 python word_1.py 運行程序,會生成名為 word1.docx 的文檔,打開文章顯示如下圖所示:
  • Win10系統永久激活程序
    .cmd 以管理員身份運行即可,過程中不要有任何操作。1、優化了激活性能2、修正了一些小bug3、增添了迅雷VIP會員獲取功能v18.03.31更新說明:1、增加了對win2008 HPC和win2008 R2 HPC的激活支持
  • word編輯技巧:如何在多個文檔間,快速切換操作
    這樣操作雖然也能完成工作,但非常費時費力,還容易出錯,今天教大家5個批量處理的小技巧,文檔再多也不怕!學習更多技巧,請收藏部落窩教育word圖文教程。日常辦公中,如果我們只對一個Word文檔進行編輯,相對而言比較輕鬆;然而,如果要同時對多個文檔進行編輯操作,想必許多人會很崩潰。
  • Hadoop之wordcount實例-MapReduce程序
    Hadoop 的MapReduce處理框架,一般的編程模型如下圖所示, 將一個業務拆分為 Mapper 和 Reducer 兩個階段。使用 Python 語言背後的「技巧」是我們將使用 Hadoop Streaming API 來幫助我們通過 STDIN(標準輸入)和 STDOUT(標準輸出)在 Map 和 Reduce 代碼之間傳遞數據。
  • word操作技巧:狀態欄在實際操作中的應用
    其實也不盡然,今天就來說說word軟體的狀態欄在實際操作中有啥幫助吧。Word狀態欄位於界面底部,用於顯示當前文檔的相關信息,如文檔頁數、當前頁碼、字數統計等,在對用戶不造成幹擾的前提下能讓用戶能夠實時了解文檔相關信息,如圖所示。
  • Microsoft Word
    Microsoft Word文檔下載是微軟官方發布免費的安卓應用,word文檔手機版下載完美呈現,藉助重排視圖,使文檔內容在小屏幕上完美布局,在手機上閱讀文檔更加舒適。在移動辦公中審閱和編輯文檔,通過手指觸控添加表格、圖像和文本框,使用起來非常流暢。
  • [電腦操作技巧]Windows 快捷鍵大全
    F2當你選中一個文件的話,這意味著「重命名」F3當你在桌面上的時候是打開「查找:所有文件」對話框F10或ALT激活當前程序的菜單欄windows鍵或CTRL+ESC打開開始菜單CTRL+ALT+DELETE在win9x中打開關閉程序對話框DELETE刪除被選擇的選擇項目,如果是文件,將被放入回收站SHIFT+DELETE刪除被選擇的選擇項目,如果是文件,將被直接刪除而不是放入回收站CTRL+N新建一個新的文件
  • WORD神操作!看到第一個技巧就傻眼了!
    其實,這個軟體背後,還有一大批隱藏技能你不知道。掌握他們,你將開啟新世界的大門。前方高能,小夥伴們請站穩扶好。Alt是單詞「Alter」的縮寫,意思為「改變」。在Windows操作平臺下,Alt鍵可謂是鍵盤之王。熟練運用該鍵,能極大提高工作效率。
  • WORD神操作!看到第一個技巧你就傻眼了!
    選擇另一段文本,再按F4,就自動把剛剛設置的動作再重複一遍,應用到現在新選擇;還可以幹什麼?做表格時候,「在下方添加新行」這樣的命令,全部都可以用F4重複!此條對其他應用程式也有效!知道了如何用鍵盤選擇,那接下來一定要知道F2的妙用!選擇好一片文本之後,按F2,光標會自動變成虛線,讓你可以不用按住滑鼠左鍵拖動,而是用鍵盤的方式,將文本移動到任意位置!
  • 多線程程序中操作的原子性
    背景原子操作就是不可再分的操作。在多線程程序中原子操作是一個非常重要的概念,它常常用來實現一些同步機制,同時也是一些常見的多線程Bug的源頭。本文主要討論了三個問題:1. 多線程程序中對變量的讀寫操作是否是原子的?2.
  • Python 自動化辦公—Word 文本操作命令
    之前介紹了一個Python包 openpyxl ,用於處理 Excel ;而對於 Word 文本時同樣也有對應的 Python庫 Python-docx,在日常辦公中,如果需要處理多個 word 文本,且操作步驟都是重複單調的,我想這個庫就可以幫到你在了解 Python-docx 常用函數之前,需要知道 在 Python-docx 各命令所對應 word 各部件,下圖所示
  • word版面設計技巧:給公司文件添加防偽水印,要如何操作?
    例如,絕密、保密、嚴禁複製或公司名字和標誌的字樣,那你知道在Word中這些水印是如何添加的麼?今天小編將為大家分享操作方法。學習更多技巧,請收藏關注部落窩教育word圖文教程。大家在一些文檔或者網站中,經常會看到一些防偽水印。其作用一般有兩個,一是用於公司宣傳;二是用於防止別人盜用自己的文檔。
  • Word神操作!看到第一個技巧你就傻眼了!
    選擇另一段文本,再按F4,就自動把剛剛設置的動作再重複一遍,應用到現在新選擇;還可以幹什麼?做表格時候,「在下方添加新行」這樣的命令,全部都可以用F4重複!此條對其他應用程式也有效!知道了如何用鍵盤選擇,那接下來一定要知道F2的妙用!選擇好一片文本之後,按F2,光標會自動變成虛線,讓你可以不用按住滑鼠左鍵拖動,而是用鍵盤的方式,將文本移動到任意位置!
  • word編輯技巧:如何在多個文檔間,快速切換操作
    具體操作如下:其實,只要打開所有文檔,在其中任何一篇文檔中點擊【視圖】-【窗口】-【全部重排】按鈕,就可以實現多文檔橫屏排列顯示,將滑鼠定位於某一文檔中,滑動滑鼠滾輪即可同步審閱和編輯了具體操作如下:點擊【審閱】-【比較】按鈕,打開「比較文檔」對話框,選擇需要比較的【原文檔】和【修訂的文檔】,如果是多人修改後的版本,還可以在【修改者顯示為】中進行指定,然後點擊「確定」按鈕,就能自動對修改前後的兩個文檔進行精確對比。
  • word辦公文檔
    Office文檔 -Word文檔應用 ,為安卓平臺而設計,完美的觸控體驗,Word Office文檔 提供了許多易於使用的文檔創建工具,同時也提供了豐富的功能集供創建複雜的文檔使用。哪怕只使用 Word 應用一點文本格式化操作或圖片處理,也可以使簡單的文檔變得比只使用純文本更具吸引力。