Vba 用户窗体在 _Initialize 时关闭

Vba Userform close while _Initialize

当我启动我的用户表单时,我首先检查一个值。如果该值不存在,用户表单应该关闭。

尝试1:UserForm_Inizialize

Public Sub UserForm_Initialize()
    Call languagePack
    '
    'initialize the userform
    '
End Sub

Try1:选择语言包的函数

Private Sub languagePack()
    Dim LanguageItems(45) As String
    Dim Language_ID As Integer
    Language_ID = Outlook.LanguageSettings.LanguageID(msoLanguageIDUI)
    Call Language_AS.getLanguage(Language_ID, LanguageItems)
    If Not LanguageItems(0) = "" Then
        With Me
            '--write the array items into the userform objects and vaues
        End With
    Else
        MsgBox "It doesn't exist a Language-Pack for your language! Pleas change to english."
        Unload Advanced_Search ' will not work
    End If
End Sub

Try1 是在函数 languagePack() 中卸载用户窗体,但没有停止 运行,我得到一个错误。所以我尝试了另一件事:

尝试2:UserForm_Inizialize

Private close_userform As Boolean
Public Sub UserForm_Initialize()
    Call languagePack
    If close_userform = Flase Then
        '
        'initialize the userform
        '
    else
        Unload Advanced_Search ' will not work
    end if
End Sub

Try2:选择语言包的功能

Private Sub languagePack()
    Dim LanguageItems(45) As String
    Dim Language_ID As Integer
    Language_ID = Outlook.LanguageSettings.LanguageID(msoLanguageIDUI)
    Call Language_AS.getLanguage(Language_ID, LanguageItems)
    If Not LanguageItems(0) = "" Then
        With Me
            '
            '--write the array items into the userform objects and vaues
            '
        End With
        close_userform = False
    Else
        MsgBox "It doesn't exist a Language-Pack for your language! Pleas change to english."
        close_userform = True
    End If
End Sub

Try2 有什么问题吗?布尔值 close_userform 是全局的,因此两个函数都可以读取该值。但是,如果它到达卸载点,则什么也不会发生。到达 end sub 后出现错误。

错误是:
运行-time error '91':
Objective 变量或 With 块变量未设置

启动用户窗体的宏

Sub start_Advanced_Search()
    Advanced_Search.Show (vbModeless)
End Sub

请帮助我。感谢每一个命令的回答。亲切的问候,妮可

为什么不将 languagePack 子函数设为 returns 布尔值而不是将结果写入 close_userform。接下来使用 Unload Me 代替 Unload Advanced_Search

这就是我的问题的解决方案。
感谢汤姆的帮助。

描述:
如果我的用户窗体没有语言包(我制作语言包),它将关闭用户窗体。 函数 languagePack() returns 一个布尔值(true = 语言包存在 | false = 不存在语言包)。 此布尔值保存在 hasLanguage 中。使用函数 getHasLanguage() 我可以在用户窗体之外获取值。 这个函数用在子start_Advanced_Search中。使用 if 函数,我检查是否有语言包,如果没有,它将卸载用户表单。

用户表单

Private hasLanguage As Boolean

Public Sub UserForm_Initialize()
    hasLanguage = languagePack()
    If hasLanguage Then
        '
        'set the defaults...
        '
    End If
End Sub

Public Function getHasLanguage()
    getHasLanguage = hasLanguage
End Function

Private Function languagePack() As Boolean
    'array to save the new language
    Dim LanguageItems(49) As String 
    'this value will contain the LanguageID of Outlook
    Dim language_ID As Integer      
    'get LanguageID of Outlook
    language_ID = Outlook.LanguageSettings.LanguageID(msoLanguageIDUI)
    'call a sub to get the language
    Call Language_AS.getLanguage(language_ID, LanguageItems)
    'there is a languagepack if the first element of "LanguageItems" is not ""
    If Not LanguageItems(0) = "" Then
        With Me
            '
            'set the language of the userform
            '
        End With
        languagePack = True
    Else
        'there is no languagepack
        MsgBox "It doesn't exist a Language-Pack for your language! Pleas change to english."
        languagePack = False
    End If
End Function

模数

Sub start_Advanced_Search()
    'start the userform
    Advanced_Search.Show (vbModeless)
    'use the get function
    If Not Advanced_Search.getHasLanguage() Then
        'unload if flase
        Unload Advanced_Search
    End If
End Sub