Board logo

標題: Activate與Open的差別跟Windows的定義 [打印本頁]

作者: 學到老死    時間: 2016-3-27 12:27     標題: Activate與Open的差別跟Windows的定義

請問各位大大,有兩個問題想請教,

問題一

    開啟活頁簿的時候,程式語言分別為Windows("製作廠商明細表.xlsm").Activate 跟Windows("製作廠商明細表.xlsm").Open

     的差異?

問題二

    Workbooks.Open "C:\Users\Andy\Desktop\VBA程式碼紀錄本\製作廠商明細表\總公司資料.xlsm"   

    跟

    Windows("製作廠商明細表.xlsm").Activate

   後者,,我的理解是說只要這台電腦有此活頁簿名稱(製作廠商明細表),便開啟作業。

   優點上,可讀性比前者高。那至於前者,是什麼情況下會用到呢?



兩個問題,想請教大大,想了兩個禮拜,還在苦惱如何從B活頁簿複製到A活頁簿。。。。難過。..
作者: luhpro    時間: 2016-3-28 00:33

請問各位大大,有兩個問題想請教,

問題一

Windows.Activate 與 Workbooks.Open 的差異?

學到老死 發表於 2016-3-27 12:27


剛剛我試做後,得出結論如下: (試做環境: Excel 2000版本)

首先

Windows("製作廠商明細表.xls").Activate

若 "製作廠商明細表.xls" 活頁簿尚未讀入記憶體中時,
會出現錯誤訊息 :

  陣列索引超出範圍

因為在已開啟的 活頁簿物件群組 中找不到有此名稱的活頁簿. (可在即時運算視窗用 for each a in Workbooks:debug.Print a.name:next 取得記憶體現有活頁簿名稱列表)


然而

Workbooks.Open "C:\Users\Andy\Desktop\VBA程式碼紀錄本\製作廠商明細表\總公司資料.xlsm"  

則是到 指定的目錄(若參數有含路徑) 或是 目前的目錄(可用 Curdir 取得) 找到該檔案開啟並設為 做動中,

但若此檔案已存在記憶體中則會詢問是否要關閉再重開該檔案.


意即 Activate 是在 "記憶體中" 找到物件(對象不限活頁簿)並設為 做動中,

而 Workbooks.Open 是在 "硬碟中" 找到檔案(只能是Excel檔案)並設為 做動中,

所以若檔案未開則應用 Open 開啟, 否則應用 Activate 設為 做動中.


如何從B活頁簿複製到A活頁簿

1. 先開啟一個活頁簿,再從該活頁簿中用 Workbooks.Open 開啟另一個活頁簿.(若個別手動開啟有可能互相看不到)

2. 執行下列指令 :

Workbooks("來源檔案.xls").Sheets("要拷貝的工作表").Copy Before:=Workbooks("目的檔案.xls").Sheets(Sheets.Count)
作者: 訪客    時間: 2016-3-28 15:52

回復 1# 學到老死
簡單的說Open是從儲存裝置中開啟活頁簿,Activate則是從已開啟的活頁簿(至少2個或以上)中選擇哪個活頁簿為作用中。
成為作用中的活頁簿後,接下來的屬性、物件...等操作,只針對作用中的活頁簿。
另外(問題一)裡面並沒有Windows("製作廠商明細表.xlsm").Open這種語法。




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)