這麼做的好處是 :
- 可以依相要標示的屬性, 調整文字大小、方位、顏色等
- 輸出成 *.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 程式差異
Application.Version = 11.0 是 Excel 2003, 而 12.0 則是 Excel 2007
.
同樣用 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 .TextFrame.AutoSize = True ' office2007 .TextFrame2.WordWrap = False ' office2007 Else .TextFrame.AutoSize = msoTrue ' office2003 End If .TextFrame.Characters.Text = A.Offset(0, 0) .TextFrame.Characters.Font.Size = A.Offset(0, 4) * 2 If A.Offset(0, 3) = 1 Then ' Rotate Font .TextFrame.Orientation = msoTextOrientationDownward End If |
解決方式是最後再重新指定一次左上角座標 (.Top 與 .Left) 的值