雖然之前 就知道 Excel 2003/2007 的『文字方塊/Text Box』有一些 VB 程式差異需要克服, 但是直到最近才改寫程式克服這些問題。
繼續往下介紹之前, 先簡單講解一下這個 Excel 巨集的作用。
用 VB 巨集計算出文字大小、方位、顏色和外框等, 繪製在 Excel 裡面 | 搭配底圖, 就可以清楚標示電路板的零件資訊 |
這麼做的好處是 :
- 可以依相要標示的屬性, 調整文字大小、方位、顏色等
- 輸出成 *.pdf 之後, 可以很方便的搜尋文字。反之, 用一般 Layout 軟體輸出的 電路板 圖形, 通常都無法搜尋文字。
.
原本在 Excel 2003 運行無誤的巨集, 切換到 Excel 2007 之後卻無法正常執行。所以, 開始研究 Virtual PC, 希望可以切換使用 Office 2003 與 2007。
Virtual PC 2007 -- 微軟的免費好物 (2008-01-30),
- 安裝 Office2007 之後, 另外建立一個 Office2003 的環境 ...
不過, 後來為了別的原因重裝電腦, 就又回到 Office 2003。
直到最近, 才又重新檢視『文字方塊/Text Box』的 VB 程式差異, 讓我的 Excel 巨集在 Excel 2003 與 2007 上都可以執行。
.
克服『文字方塊/Text Box』的 VB 程式差異
- 判斷 Excel 版本
Application.Version = 11.0 是 Excel 2003, 而 12.0 則是 Excel 2007
.
- 『文字方塊』與『Text Box』
同樣用 Shapes.AddLabel() 繪製出來的 文字方塊, .Name 屬性在 Excel 2003 被指定為 『Text Box ????』(流水號), 但在 Excel 2007 卻被指定為『文字方塊 ????』
解決方法是改用 .Type = msoTextBox 來判斷是否為 文字方塊
.
- 屬性的初始值不同
雖然, 明確設定初始值是寫程式時天經地義的守則, 但是 Excel 的繪圖物件往往有太多屬性, 以致很難在程式裡明確設定它們全部的值。
屬性名稱 | Excel 2003 | Excel 2007 |
自動調整文字方塊大小 (初始值都是不自動調整) | .TextFrame.AutoSize = msoTrue | .TextFrame.AutoSize = True .TextFrame2.WordWrap = False |
文字方塊背景顏色 | 預設無背景色 | 預設有背景色, 除非手動加上 .Fill.Visible = msoFalse |
文字方塊框線 | 預設無框線 | 預設有框線, 除非手動加上 .Line.Visible = msoFalse |
這邊要注意的是, 同一個屬性 .TextFrame.AutoSize 在 Excel 2003 的資料形態是 msoTrue, 但是在 Excel 2007 卻是 True。
此外, 在 Excel 2003 可以先不指定文字方塊的寬與高, (即 .Shapes.AddLabel(橫書或直書, X0, Y0, W, H), 其中 W=0, H=0) 之後再設為自動調整文字方塊。但是 在 Excel 2007 一開始指定 寬/高 都等於 0 卻會導致 文字方塊被『隱藏』, 既使之後再改為自動調整文字方塊, 也還是繼續隱藏。
.
- 橫書或直書參考點的處理方式不同
Excel 2003, 無論橫書或直書, 參考點都是左上角, 所以左上角的座標固定不變 | Excel 2007, 橫書的參考點是左上角, 但是直書的參考點卻是右上角, 橫書 紅色123 的參考點是左上角, 但直書的 黑色456 和 綠色789 的參考點卻是右上角, 會看到左上角的座標會一直改變 |
.Shapes.AddLabel(橫書或直書, X0, Y0, W, H) 產生一個文字方塊繪圖物件, 再經過下列程式之後, 在 Excel 2003 和 2007 看到的左上角座標 (.Top 與 .Left) 會是不一樣的
If Application.Version >= 12# Then |
解決方式是最後再重新指定一次左上角座標 (.Top 與 .Left) 的值
.Top = Y0 |
1 意見:
發表您的回應看來挺好用的,目前的工作還用不到。
2008年11月17日 上午10:55
張貼留言