国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
Word與Excel應(yīng)用程序間的切換

《VBA信息獲取與處理》教程是我推出第六套教程,目前已經(jīng)是第一版修訂了。這套教程定位于最高級,是學(xué)完初級,中級后的教程。
信息,含義非常之廣泛,是我們?nèi)粘I畈豢苫蛉钡囊徊糠?。從天氣情況和預(yù)報,到人際關(guān)系,宇宙洪荒,都是信息的組成部分。信息在某種程度上就是數(shù)據(jù),或者可以用數(shù)據(jù)來體現(xiàn),獲得信息也就是數(shù)據(jù)的獲得。這部教程給大家講解的內(nèi)容有:跨應(yīng)用程序信息獲得、隨機(jī)信息的利用、電子郵件的發(fā)送、VBA互聯(lián)網(wǎng)數(shù)據(jù)抓取、VBA延時操作,剪切板應(yīng)用、Split函數(shù)擴(kuò)展、工作表信息與其他應(yīng)用交互,F(xiàn)SO對象的利用、工作表及文件夾信息的獲取、圖形信息的獲取以及定制工作表信息函數(shù)等等內(nèi)容。程序文件通過32位和64位兩種OFFICE系統(tǒng)測試。是非常抽象的,更具研究的價值。
這套教程共兩冊,八十四講,今后一段時間會給大家陸續(xù)推出修訂后的教程內(nèi)容。今日的內(nèi)容是第2講:word與excel應(yīng)用程序間的切換。

第二節(jié)  在word和excel兩個應(yīng)用程序間的激活操作

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

1  用AppActivate語句

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

Private Sub CommandButton2_Click()
    Set ws = CreateObject('wscript.shell')
    ws.AppActivate '001 工作表'
End Sub

代碼的截圖:

代碼講解:我們先看看AppActivate語句的語法:
語法:AppActivate?title?[,?wait]
參數(shù)title;是必須的,這是應(yīng)用程序的名稱,正如它顯示在應(yīng)用程序窗口的標(biāo)題欄那樣,或者它也可以是Shell函數(shù)返回的任務(wù)ID號碼。注意,參數(shù)title要跟每個正運行的應(yīng)用程序的標(biāo)題字符串進(jìn)行對比,如果沒有精確的匹配,那么任何標(biāo)題字符串里前面的字符和參數(shù)title一致的應(yīng)用程序就會被激活。(例如,你要激活Excel,那么title參數(shù)應(yīng)該是“Microsoft Excel”,如果你寫的是“Microsoft”,那么激活的就也可能是Word,PowerPoint……)。
第二個參數(shù)wait是可選的,它是個布爾值(True或False),明確VB什么時候激活應(yīng)用程序。如果在這里是False的話,該應(yīng)用程序就立即會被激活,甚至被調(diào)應(yīng)用程序并沒有焦點。如果在wait參數(shù)處放置True的話,那么被調(diào)的應(yīng)用程序就會等到它有了焦點,然后才會激活該應(yīng)用程序。

例如,要激活Word,你就得輸入下列語句:AppActivate “Microsoft Word”注意,應(yīng)用程序名稱用雙引號引用起來。
也可以使用Shell函數(shù)返回的數(shù)值作為語句AppActivate的參數(shù),例如(僅適合于32位OFFICE系統(tǒng))

Sub mynz()
ReturnValue = Shell('C:\Microsoft Office\Office\Word.exe',1)
AppActivate ReturnValue
End sub
u特別注意點,對于AppActivate的用法,我在修訂代碼的時候進(jìn)行了完善,對于64位的OFFICE系統(tǒng)和32位的OFFICE系統(tǒng),下面的代碼:
 Set ws = CreateObject('wscript.shell')
     ws.AppActivate '001 工作表'
是都是可以利用的。
u對于教程最初給出的代碼:
Private Sub CommandButton2_Click()
      AppActivate 'Microsoft Excel'
End Sub 
只適合于32位系統(tǒng)。大家要注意。

2  利用API函數(shù)

如本講的內(nèi)容,在Word中使用代碼自動化激活Excel,其實,在我們寫程序的時候,會發(fā)現(xiàn),當(dāng)運行某個活動應(yīng)用程序時(如word),從這個運行程序的代碼激活另外一個應(yīng)用程序作為主窗口(如在word運行時激活Excel窗口)對于用戶來說是非常有用的。這時我們可以嘗試使用上面的AppActivate語句,但這要求事先知道要激活的窗口的標(biāo)題。而且,從實際的表現(xiàn)看,AppActivate有點給人不靠譜的感覺,有時工作,有時不工作(會提示:引發(fā)錯誤5,無效的過程調(diào)用)。所以,我給大家講解下面的第二種方案就是調(diào)用API函數(shù)的方案。
我們可以使用幾個簡單的Windows API函數(shù)完成同樣的任務(wù)。API是直接調(diào)用組成Windows的DLL庫文件的過程??梢允褂肁PI函數(shù)完成VBA本身無法執(zhí)行的操作。但是有一點值得注意。就是API沒有VBA代碼的錯誤處理功能,如果使用無效參數(shù)調(diào)用API函數(shù),可能會導(dǎo)致Excel崩潰并丟失所有工作。API函數(shù)的使用應(yīng)該非常謹(jǐn)慎。
以下代碼將激活主Excel窗口并將鍵盤焦點設(shè)置為Excel中的活動工作表。我這里給出的代碼在13版32位office中已經(jīng)實測,在16版及64位ofiice或許不能完全得到你需要的效果,這一點要注意。當(dāng)然為了保證代碼應(yīng)適用于其他的場合我給出的是通用的版本,可以將MyCLASS的值從xlmain更改為其他應(yīng)用程序的WINDOW類從而完成實際的需要。

Option Compare Text  '聲明比較字符串?dāng)?shù)據(jù)時要使用的默認(rèn)比較方法按TEXT比較。
' Window API 引用聲明
#If VBA7 Then
    Private Declare PtrSafe Function BringWindowToTop Lib 'user32' (ByVal HWnd As LongPtr) As Long
    Private Declare PtrSafe Function FindWindow Lib 'user32' Alias 'FindWindowA' ( _
        ByVal lpClassName As String, _
        ByVal lpWindowName As String) As Long
    Private Declare PtrSafe Function SetFocus Lib 'user32' (ByVal HWnd As LongPtr) As Long
#Else
    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
#End If

Private Sub CommandButton1_Click()
    Dim Res As Long
    Dim XLHWnd As Long
    Const MyCLASS = 'XLMAIN'
    '假如有多個EXCEL運行,程序是無法判斷是要激活哪一個EXCEL的;
    '同時必須使用vbNullString調(diào)用,而不是''的空字符串的調(diào)用在FindWindow函數(shù)中兩者有不同
    XLHWnd = FindWindow(lpClassName:=MyCLASS, lpWindowName:=vbNullString)
    If XLHWnd > 0 Then
        '設(shè)置活動窗口
        Res = BringWindowToTop(HWnd:=XLHWnd)
        If Res = 0 Then
            MsgBox '置頂激活錯誤,錯誤代碼:  ' & CStr(Err.LastDllError)
        Else
            SetFocus HWnd:=XLHWnd
        End If
    Else
        MsgBox '沒有發(fā)現(xiàn) Excel被打開'
    End If
End Sub

代碼截圖:

代碼講解:上述代碼在頭部建立了引用API函數(shù)的聲明,在代碼中首先會查找excel程序,如果找到會將EXCEL置頂。此程序?qū)⒓せ钪鱁XCEL程序,并獲得焦點,注意:如果打開VBA編輯器,此操作將無法正常工作。如果打開VBA編輯器窗口,系統(tǒng)將設(shè)置焦點到那個窗口,而不是XLMAIN窗口。此代碼可以激活任何應(yīng)用程序,只需更改myCLASS到應(yīng)用程序主窗口的類,這里我給大家一些常見的OFFICE應(yīng)用程序常見的類:
  Excel 97、2000、2002、2003、2007、2013  為 XlMain
  Word 97、2000、2002、2003、2007、2013   為OpusApp
  Access 2000、2002、2003、2007、2013   為OMain

下面我們看看上述代碼的詳細(xì)講解:
①  Const MYCLASS = 'XLMAIN'
獲取主'Excel應(yīng)用程序窗口的窗口句柄('XLMAIN')。如果“正在運行Excel的多個實例”,您無法控制將檢索哪個實例的HWnd。
② XLHWnd = FindWindow(lpClassName:=MyCLASS, lpWindowName:=vbNullString)
在調(diào)用' FindWindow時,你必須使用vbNullString不是一個空字符串'',當(dāng)調(diào)用API函數(shù)時,vbNullString和空字符串“”之間有區(qū)別。
③ BringWindowToTop(HWnd:=XLHWnd) 將應(yīng)用程序置頂
函數(shù)語法: BringWindowToTop(HWND hWnd);
函數(shù)功能:該函數(shù)將指定的窗口設(shè)置到Z序的頂部。如果窗口為頂層窗口,則該窗口被激活;如果窗口為子窗口,則相應(yīng)的頂級父窗口被激活。
參數(shù):hWnd: 設(shè)置到Z序的頂部的窗口句柄。
返回值:如果函數(shù)成功,返回值為非零;如果函數(shù)失敗,返回值為零。若想獲得更多錯誤信息,可以調(diào)用GetLastError函數(shù)。
④ FindWindow用法
函數(shù)功能:該函數(shù)獲得一個頂層窗口的句柄,該窗口的類名和窗口名與給定的字符串相匹配。這個函數(shù)不查找子窗口。在查找時不區(qū)分大小寫。
函數(shù)語法:HWND FindWindow(LPCTSTR IpClassName,LPCTSTR IpWindowName);
參數(shù):IpClassName :指向一個指定了類名的空結(jié)束字符串,或一個標(biāo)識類名字符串的成員的指針。如果該參數(shù)為一個成員,則它必須為前次調(diào)用theGlobafAddAtom函數(shù)產(chǎn)生的全局成員。該成員為16位,必須位于IpClassName的低 16位,高位必須為 0。
     IpWindowName:指向一個指定了窗口名(窗口標(biāo)題)的空結(jié)束字符串。如果該參數(shù)為空,則為所有窗口全匹配。
返回值:如果函數(shù)成功,返回值為具有指定類名和窗口名的窗口句柄;如果函數(shù)失敗,返回值為NULL。
這個函數(shù)有兩個參數(shù),第一個是要找的窗口的類,第二個是要找的窗口的標(biāo)題。在搜索的時候不一定兩者都知道,但至少要知道其中的一個。有的窗口的標(biāo)題是比較容易得到的,如'計算器',所以搜索時應(yīng)使用標(biāo)題進(jìn)行搜索。但有的軟件的標(biāo)題不是固定的,如'記事本',如果打開的文件不同,窗口標(biāo)題也不同,這時使用窗口類搜索就比較方便。如果找到了滿足條件的窗口,這個函數(shù)返回該窗口的句柄,否則返回0。
⑤關(guān)于句柄,句柄是整個Windows編程的基礎(chǔ)。一個句柄是指使用的一個唯一的整數(shù)值,即一個4字節(jié)(64位程序中為8字節(jié))長的數(shù)值,來標(biāo)識應(yīng)用程序中的不同對象和同類中的不同的實例,諸如,一個窗口,按鈕,圖標(biāo),滾動條,輸出設(shè)備,控件或者文件等。應(yīng)用程序能夠通過句柄訪問相應(yīng)的對象的信息,但是句柄不是指針,程序不能利用句柄來直接閱讀文件中的信息。如果句柄不在I/O文件中,它是毫無用處的。 句柄是Windows用來標(biāo)志應(yīng)用程序中建立的或是使用的唯一整數(shù),Windows大量使用了句柄來標(biāo)識對象。
⑥ SetFocus HWnd:=XLHWnd
設(shè)置焦點。


本節(jié)知識點回向:在本節(jié)中我們講了如何做到在不同的應(yīng)用程序間切換,主要利用了兩種方案,一種是利用API函數(shù),要查找到程序的局部然后置頂,一種是利用了AppActivate,這兩種方法在應(yīng)用上要注意測試,對于前者要注意所用的office是否合適于這種應(yīng)用,后者要注意應(yīng)用的穩(wěn)定性。本講的知識點:
   ①   AppActivate 如何應(yīng)用。
   ②   FindWindow 和 SetFocus 如何應(yīng)用。
   ③  上述兩種應(yīng)用的優(yōu)缺點分析。
   ④   理解API函數(shù)聲明與OFFICE版本的關(guān)系。



本節(jié)代碼參考文件“001 在WORD中激活EXCEL.docm”




l學(xué)習(xí)是自我提高的過程,也是自我修行的過程。學(xué),總會有收獲。生命向前,沒有達(dá)到不了的遠(yuǎn)方。

我20多年的VBA實踐經(jīng)驗,全部濃縮在下面的各個教程中,教程學(xué)習(xí)順序
① 7→1→3→2→6→5或者7→4→3→2→6→5。
② 7→8
各套教程內(nèi)容簡介:

第7套教程(共三冊):《VBA之EXCEL應(yīng)用》:是對VBA基本的講解
第1套教程(共三冊):《VBA代碼解決方案》是入門后的提高教程
第4套教程(16G):VBA代碼解決方案之視頻(第一套的視頻講解)
第3套教程(共兩冊):《VBA數(shù)組與字典解決方案》:是對數(shù)組和字典的專題講解
第2套教程(共兩冊):《VBA數(shù)據(jù)庫解決方案》:是對數(shù)據(jù)庫的專題講解
第6套教程(共兩冊):《VBA信息獲取與處理》:講解VBA的網(wǎng)絡(luò)及跨程序應(yīng)用
第5套教程(共兩冊):VBA中類的解讀和利用:類及接口技術(shù)的講解
第8套教程(共三冊):VBA之Word應(yīng)用(最新教程):word中VBA的利用

l第六套教程:VBA信息獲取與處理,是一部高級教程,涉及范圍更廣,實用性更強(qiáng),面向中高級人員。教程共二十個專題,包括:跨應(yīng)用程序信息獲得、隨機(jī)信息的利用、電子郵件的發(fā)送、VBA互聯(lián)網(wǎng)數(shù)據(jù)抓取、VBA延時操作,剪切板應(yīng)用、Split函數(shù)擴(kuò)展、工作表信息與其他應(yīng)用交互,F(xiàn)SO對象的利用、工作表及文件夾信息的獲取、圖形信息的獲取以及定制工作表信息函數(shù)等等內(nèi)容。程序文件通過32位和64位兩種OFFICE系統(tǒng)測試。

_______________________________


本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
AppActivate 語句示例
Excel函數(shù)-VBA對對碰
C# SendMessage用法
windows消息隊列 - windows - 我的愛好
按鍵精靈后臺簡明教程(后臺找色,后臺鼠標(biāo)點擊等) - 【教程工具】 - 按鍵精靈論壇 放飛...
VC小常識1
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服