2016-08-21 73 views
1

我有一個組合框,它從MySysObjects獲取它的行源,並在數據庫中顯示完整的表單列表。 從組合框中選擇表單名稱並使用VBA將其作爲字符串傳遞給函數(因爲不知道如何將該字符串轉換爲Form)。 所以,一旦形式的字符串值傳遞給函數我現在有形式的字符串變量我希望做的東西......我 通常會使用:通過字符串變量的MS Access參考表格

Function MyFunction() 
    Dim frmForm as Form 
    Set frmForm = form("MyForm") 
    DoCmd.OpenForm frmForm.Name, acDesign, , , , acHidden 
    With frmForm 
     Do stuff... 
    End With 
End Function 

但是!正如我已經通過了一個字符串變量的功能 - 如:

Function MyFunction(strFormName as String) 
    Dim frmForm as Form 
    Set frmForm = Form(strFormName) 'THIS DOESN'T WORK 
    DoCmd.OpenForm frmForm.Name, acDesign, , , , acHidden 
    With frmForm 
     Do stuff... 
    End With 
End Function 

我的問題是我怎麼使用Set語句返回一個Form對象? 我可以轉換窗體上的組合框值,並將Form對象傳遞給該函數,或將組合框值轉換爲該函數,並使用Set或其他任何必需的值將其轉換。 我希望這是一個簡單的語法問題,但正如我試過的一切,我知道,它必須難以捉摸的答案,我沒有試過!

回答

1

有這一行2個問題:

Set frmForm = Form(strFormName) 

首先集合的名字是Forms,不Form。 第二個是Forms是當前打開的表單的集合。如果strFormName當時未打開,那麼Forms(strFormName)將會發出錯誤。

如果您只是做DoCmd.OpenForm strFormName, acDesign, , , , acHidden,表單將在設計視圖中打開並隱藏,無論它是否已經打開。然後,您可以在不觸發錯誤的情況下執行Set frmForm

Function MyFunction(strFormName As String) 
    Dim frmForm As Form 
    DoCmd.OpenForm strFormName, acDesign, , , , acHidden 
    Set frmForm = Forms(strFormName) 
    With frmForm 
     'Do stuff... 
    End With 
End Function 
+0

感謝您的回覆! 是的,我看到我已經犯了幾個錯別字! 我發現更容易打字,顯然錯過了一些大寫問題和丟失的字母(尤其是's')!從根本上說,它是我已經知道並閱讀過很多次的Set部分的ORDER(直到一個表單被打開,你不能設置任何東西!),但是因爲從來沒有實際使用它,所以我選擇忽視一個基本點! 問題修復!想想我花了幾個小時來研究它!一旦你知道;你懂! – TimesMoney

+0

And ... 謝謝! 感謝! – TimesMoney