Auto_Open過程與Workbook_Open事件過程的區(qū)別 Q:Auto_Open子過程與Workbook_Open事件過程有什么區(qū)別? A:在Excel的“標(biāo)準(zhǔn)模塊”中可以創(chuàng)建4種自動(dòng)運(yùn)行的宏,它們分別是Auto_Open(打開工作 簿時(shí)自動(dòng)運(yùn)行), Auto_Close, Auto_Activate, Auto_Deactivate。這些自動(dòng)運(yùn)行的宏是為了與Excel 5 和 95兼容而保留下來的?,F(xiàn)在可以使用工作簿的 Open, Close, Activate , Deactivate 事件來代替它們。 當(dāng)一個(gè)工作簿中分別有Workbook_Open事件和Auto_Open子過程時(shí),當(dāng)打開工作簿時(shí),Workbook_Open事件先運(yùn)行,然后再運(yùn)行 Auto_Open子過程。但是并不是所有情況都會(huì)運(yùn)行Auto_Open子過程,如果在其它工作簿中用代碼打開該工作簿的話(比如用 Workbooks.Open方法打開該工作簿),則只會(huì)運(yùn)行Workbook_Open事件,而不會(huì)運(yùn)行Auto_Open子過程。為了加深理解,可以 參考如下代碼: 新建一個(gè)工作簿: 在“Thisworkbook”模塊中粘帖如下代碼
在“模塊1”中粘帖如下代碼
查看運(yùn)行的結(jié)果,可以發(fā)現(xiàn)先彈出1,再彈出2 如果兩個(gè)都存在,有限執(zhí)行Workbook_Open,然后執(zhí)行Auto_Open 說起它們兩的區(qū)別,我想一定要說vba的發(fā)展史,auto_open先出現(xiàn),是vb影響的結(jié)果,而Workbook_Open更具有本土風(fēng)格。為了前后兼容,所以兩者都可以用了。 運(yùn)行的順序:是workbook_open事件先于auto_open過程 workbook_open是必須寫在thisworkbook里的,open事件吧。aotoopen呢,是放在模塊里呢,還是thisworkbook里呢?如果有一個(gè)早八點(diǎn)自動(dòng)運(yùn)行的代碼,那是不是得在之前打開工作簿,然后,放在thisworkbook的里面就可以到時(shí)間自動(dòng)運(yùn)行呢 原來認(rèn)為執(zhí)行完了Private Sub Workbook_Open()事件后就會(huì)執(zhí)行模塊中的Sub Auto_Open()程序,可是當(dāng)在 Private Sub Workbook_Open()事件中打開一個(gè)窗體,后怎么就不執(zhí)行Sub Auto_Open()了? 插入一個(gè)模塊,把Sub Auto_Open()放在模塊里試試。 在Open事件中調(diào)用窗體時(shí),控制權(quán)轉(zhuǎn)交給窗體,此時(shí)Open事件并沒有結(jié)束,只有當(dāng)窗體關(guān)閉后才會(huì)執(zhí)行下面過程的End Sub,而此后將不會(huì)激活A(yù)uto_Open,解決方法是改用UserForm1.Show 0調(diào)用窗體。 Private Sub Workbook_Open() |
|