当我启动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
答案 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