It is a PowerPoint constant and I am using late binding. But it worked perfectly numerous times.
然後你不後期綁定。把你自己放在VBA的鞋子裏:你正在編譯這個項目,並且你遇到了ppAlignCenter
作爲令牌/標識符。如果Option Explicit
已打開(它應爲!),並且未引用PowerPoint對象庫,則ppAlignCenter
是未聲明的變量,您不知道該如何處理它 - 因此您將手放在空中和尖叫的用戶:
Compile error: variable not defined.
如果Option Explicit
未打開,和PowerPoint不被引用,那麼你就「聲明」未初始化變量Variant
在現場,名爲ppAlignCenter
,這樣的分配可以編譯MyTextBox.ParagraphFormat.Alignment
。
由於變量沒有初始化,在運行時將其值只是0
- 並從那裏目前還不清楚會發生什麼,因爲PpParagraphAlignment擁有的0
值沒有成員,因此它可能是MyTextBox.ParagraphFormat.Alignment
分配提出了一個運行時錯誤,但這完全取決於Alignment
屬性的實現。
現在,如果PowerPoint演示庫是引用(早期綁定),然後ppAlignCenter
解析爲您知道是真的只是一個2
,所以你可以繼續編譯PpParagraphAlignment.ppAlignCenter
枚舉值。
的PpParagraphAlignment
枚舉以PowerPoint類型庫中定義,因此,如果您後期綁定到庫中,你不能按名稱引用它的成員,因爲VBA將嘗試在編譯期解決這些問題時間 - 並沒有這樣做。
因此,不是這樣的:
.ParagraphFormat.Alignment = ppAlignCenter
你需要這樣做:
.ParagraphFormat.Alignment = 2 'ppAlignCenter
那你爲什麼後期綁定到一個類型庫,你知道你需要無論如何,該方案甚至希望在運行時工作?
後期綁定意味着你與Object
變量而不是特定類型的工作 - 這意味着運行時的界面查找和相當多的開銷,你並不需要在所有 ...而這些查找會如果圖書館不在場,反正會失敗。更何況,編程對Object
意味着你不會得到智能感知並需要四重檢查你正在做的一切,因爲編譯器不會幫助你,如果你犯了一個錯字,運行時會尖叫。
......說,早期綁定引用是特定於版本的 - 因此,如果您要將代碼分發給運行不同版本庫的用戶,那麼遲到綁定將確保一切適用於所有人(前提是您的代碼不使用特定於版本的API功能)。在這種情況下,最好的折衷辦法是讓開發以及早期綁定的引用(因此您可以獲得智能感知和自動完成!),然後在分發時將所有內容切換到遲到。
'ppAlignCenter'聽起來像一個PowerPoint常量。你是否還有所有必要的參考資料? – YowE3K
這是一個PowerPoint常量,我正在使用後期綁定。但它運作完美無數次。 – Brian
如果你使用後期綁定,'ppAlignCenter'是沒有意義的,除非你給它一個值。 – vacip