2014-03-07 73 views
1

我想將MS Access對象的類型傳遞給函數。從earlier question我知道你可以使用TypeOf ...來測試TableDef,表單,QueryDef等類型,它是。但我不知道結果的類型以及如何將它們傳遞給無法訪問原始對象的新函數。在Access VBA中傳遞對象類型

我想能夠通過類似CStr(TypeOf(對象)),但TypeOf似乎無法在TypeOf ... is語句之外調用。

我想我可以創建一個幫助函數,測試我感興趣的對象類型並返回一個字符串或枚舉。但是如果有人知道如何傳遞對象類型,那會更簡單!

+1

什麼是你如何需要這個的例子? – enderland

回答

0

顯然已經有了關於訪問對象類型的枚舉:在acObjectType枚舉,上MSDN描述。這用於例如application.sethiddenattribute方法中。不幸的是,我只是在創建自己的枚舉後才發現它,這是我編寫的另一個過程。

2

我不確定你想要什麼,但不知道TypeName()可能是有用的。

下面是一個即時窗口會話的幾個例子:

? TypeName(CurrentDb.TableDefs("tblFoo")) 
TableDef 

? TypeName(CurrentDb.QueryDefs("qryFoo")) 
QueryDef 

DoCmd.OpenForm "Form3" 
? TypeName(Forms!Form3) 
Form_Form3 

? TypeName(Forms!Form3!cboUserId) 
ComboBox 
+0

這看起來很有希望。但是它看起來好像表單的返回字符串很奇怪,比如form_ 。我想我可以截斷它?此外,TypeName從代碼返回邏輯響應,但是從立即窗口返回「空」用於我使用的任何DAO對象。它似乎無法測試任何目前尚未打開的表單? – MBY

+0

對,我想知道Form_Form3是否會成爲問題。您將面臨與報告對象類似的問題:「Report_rptFoo」。也許你可以做'如果TypeName(object)像「Form_ *」Then'或者創建一個自定義函數,它使用'TypeOf'來首先檢查對象是否是表單或報表,否則使用'TypeName'。 – HansUp

+0

對於當前打開的記錄集,我沒有得到「空白」。所以我不明白這一點。不過,我也應該透露這是我的新領域。 – HansUp