_Oitialize时Vba Userform关闭

时间:2015-07-31 09:27:30

标签: vba userform

当我启动Userform时,我首先查找一个值。如果此值不存在,则应关闭用户窗体。

Try1: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()中卸载userform,但没有停止运行,我收到错误。所以我尝试了另一件事:

Try2: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后,我收到错误。

错误是:
运行时错误' 91':
目标变量或未设置块变量

启动用户形式的宏

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

请帮助我。感谢每个命令的答案。亲切的问候,Nico

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

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

说明
如果我的Userform没有语言包(我制作语言包),它将关闭用户表单。 函数languagePack()返回一个布尔值(ture =语言包存在| false =不存在语言包)。 此布尔值保存在hasLanguage中。使用函数getHasLanguage(),我可以获得userform之外的值。 该函数用于子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

<强> MODUL

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