Excel VBA 自定义函数帮助对话框
Excel VBA custom functions help dialog
这些年来我一直在为ExcelVBA做很多功能,但我一直想知道如何做一个更详细的帮助对话框。
对于内置函数,您会得到如下内容:
我怎么能做这样的事情,它显示变量类型,如果它有默认值,该值是什么。我在过去看到过一些事情,如果你导出文件,然后在文本编辑器中添加一些代码,然后将其导入回来,你可以获得 Excel VBA 没有的额外功能原生支持...不确定此类功能是否也存在类似的东西。
提前致谢!
Instr
在 VBA 中定义如下:
Function InStr([Start], [String1], [String2], [Compare As VbCompareMethod = vbBinaryCompare])
VbCompareMethod
是一个包含 3 个成员的枚举。如果愿意,您也可以定义使用枚举的函数(甚至是您创建的自定义函数)。
在这种情况下,枚举只是选择几个不同的整数值。它们有助于限制在例程中接受哪些整数,以便将来的可读性,并帮助程序员更轻松地了解使用 intellisense 可以使用哪些选项(我认为您将 intellisense 称为 "help dialog")
使用以下步骤创建自定义控件。
创建用户表单:
要创建自定义对话框,您必须创建一个用户窗体。若要创建用户窗体,请单击 Visual Basic 编辑器中“插入”菜单上的“用户窗体”。
使用属性 window 更改表单的名称、行为和外观。例如,要更改表单上的标题,请设置标题 属性.
向用户窗体添加控件
要向用户窗体添加控件,请在工具箱中找到要添加的控件,将控件拖到窗体上,然后在控件上拖动调整手柄,直到控件的轮廓达到所需的大小和形状。
注意将一个控件或多个 "grouped" 控件从窗体拖回工具箱会创建一个控件模板,该模板可以重复使用。这是为您的应用程序实现标准接口的有用功能。
将控件添加到窗体后,使用 Visual Basic 编辑器中“格式”菜单上的命令调整控件对齐方式和间距。
正在初始化控件属性
您可以在 运行 时间通过在宏中使用 Visual Basic 代码来初始化控件。例如,您可以填充列表框、设置文本值或设置选项按钮。
以下示例使用 AddItem 方法将数据添加到列表框中。然后它设置文本框的值并显示表单。
Private Sub GetUserName()
With UserForm1
.lstRegions.AddItem "North"
.lstRegions.AddItem "South"
.lstRegions.AddItem "East"
.lstRegions.AddItem "West"
.txtSalesPersonID.Text = "00000"
.Show
' ...
End With
End Sub
您还可以在窗体的 Initialize 事件中使用代码为窗体上的控件设置初始值。在 Initialize 事件中设置初始控件值的一个优点是初始化代码与窗体保持一致。您可以将窗体复制到另一个项目,当您运行 Show 方法显示对话框时,控件将被初始化。
Private Sub UserForm_Initialize()
UserForm1.lstNames.AddItem "Test One"
UserForm1.lstNames.AddItem "Test Two"
UserForm1.txtUserName.Text = "Default Name"
End Sub
控件和对话框事件
将控件添加到对话框或文档后,您可以添加事件过程以确定控件如何响应用户操作。
用户窗体和控件具有一组预定义的事件。例如,命令按钮有一个在用户单击命令按钮时发生的 Click 事件,而用户窗体有一个 Initialize 事件,该事件在加载窗体时 运行s。
要编写控件或窗体事件过程,请通过 double-clicking 窗体或控件和 select 过程列表框中的事件打开模块。
事件过程包括控件的名称。例如,名为 Command1 的命令按钮的 Click 事件过程的名称是 Command1_Click.
如果您将代码添加到事件过程然后更改控件的名称,您的代码将保留在具有以前名称的过程中。
例如,假设您将代码添加到 Command1 的 Click 事件,然后将控件重命名为 Command2。当您 double-click Command2 时,您将看不到 Click 事件过程中的任何代码。您需要将代码从 Command1_Click 移动到 Command2_Click.
为了简化开发,最好在编写代码之前命名控件。
显示自定义对话框
要在 Visual Basic 编辑器中测试对话框,请单击 Visual Basic 编辑器中 运行 菜单上的 运行 Sub/UserForm。
要从 Visual Basic 中显示对话框,请使用 Show 方法。以下示例显示名为 UserForm1 的对话框。
Private Sub GetUserName()
UserForm1.Show
End Sub
在代码为 运行ning 时使用控件值
当 Visual Basic 代码为 运行ning 时,可以设置和 return 编辑一些控件属性。以下示例将文本框的 Text 属性 设置为 "Hello."
TextBox1.Text = "Hello"
用户在表单中输入的数据在表单关闭时丢失。如果在卸载窗体后 return 窗体上的控件值,您将获得控件的初始值而不是用户输入的值。
如果要保存在表单中输入的数据,可以在表单仍处于 运行ning 状态时将信息保存到 module-level 变量。以下示例显示一个表单并保存表单数据。
' Code in module to declare public variables.
Public strRegion As String
Public intSalesPersonID As Integer
Public blnCancelled As Boolean
' Code in form.
Private Sub cmdCancel_Click()
Module1.blnCancelled = True
Unload Me
End Sub
Private Sub cmdOK_Click()
' Save data.
intSalesPersonID = txtSalesPersonID.Text
strRegion = lstRegions.List(lstRegions.ListIndex)
Module1.blnCancelled = False
Unload Me
End Sub
Private Sub UserForm_Initialize()
Module1.blnCancelled = True
End Sub
' Code in module to display form.
Sub LaunchSalesPersonForm()
frmSalesPeople.Show
If blnCancelled = True Then
MsgBox "Operation Cancelled!", vbExclamation
Else
MsgBox "The Salesperson's ID is: " &
intSalesPersonID & _
"The Region is: " & strRegion
End If
End Sub
希望对您有所帮助。
这些年来我一直在为ExcelVBA做很多功能,但我一直想知道如何做一个更详细的帮助对话框。
对于内置函数,您会得到如下内容:
我怎么能做这样的事情,它显示变量类型,如果它有默认值,该值是什么。我在过去看到过一些事情,如果你导出文件,然后在文本编辑器中添加一些代码,然后将其导入回来,你可以获得 Excel VBA 没有的额外功能原生支持...不确定此类功能是否也存在类似的东西。
提前致谢!
Instr
在 VBA 中定义如下:
Function InStr([Start], [String1], [String2], [Compare As VbCompareMethod = vbBinaryCompare])
VbCompareMethod
是一个包含 3 个成员的枚举。如果愿意,您也可以定义使用枚举的函数(甚至是您创建的自定义函数)。
在这种情况下,枚举只是选择几个不同的整数值。它们有助于限制在例程中接受哪些整数,以便将来的可读性,并帮助程序员更轻松地了解使用 intellisense 可以使用哪些选项(我认为您将 intellisense 称为 "help dialog")
使用以下步骤创建自定义控件。
创建用户表单: 要创建自定义对话框,您必须创建一个用户窗体。若要创建用户窗体,请单击 Visual Basic 编辑器中“插入”菜单上的“用户窗体”。
使用属性 window 更改表单的名称、行为和外观。例如,要更改表单上的标题,请设置标题 属性.
向用户窗体添加控件 要向用户窗体添加控件,请在工具箱中找到要添加的控件,将控件拖到窗体上,然后在控件上拖动调整手柄,直到控件的轮廓达到所需的大小和形状。
注意将一个控件或多个 "grouped" 控件从窗体拖回工具箱会创建一个控件模板,该模板可以重复使用。这是为您的应用程序实现标准接口的有用功能。
将控件添加到窗体后,使用 Visual Basic 编辑器中“格式”菜单上的命令调整控件对齐方式和间距。
正在初始化控件属性 您可以在 运行 时间通过在宏中使用 Visual Basic 代码来初始化控件。例如,您可以填充列表框、设置文本值或设置选项按钮。
以下示例使用 AddItem 方法将数据添加到列表框中。然后它设置文本框的值并显示表单。
Private Sub GetUserName()
With UserForm1
.lstRegions.AddItem "North"
.lstRegions.AddItem "South"
.lstRegions.AddItem "East"
.lstRegions.AddItem "West"
.txtSalesPersonID.Text = "00000"
.Show
' ...
End With
End Sub
您还可以在窗体的 Initialize 事件中使用代码为窗体上的控件设置初始值。在 Initialize 事件中设置初始控件值的一个优点是初始化代码与窗体保持一致。您可以将窗体复制到另一个项目,当您运行 Show 方法显示对话框时,控件将被初始化。
Private Sub UserForm_Initialize()
UserForm1.lstNames.AddItem "Test One"
UserForm1.lstNames.AddItem "Test Two"
UserForm1.txtUserName.Text = "Default Name"
End Sub
控件和对话框事件 将控件添加到对话框或文档后,您可以添加事件过程以确定控件如何响应用户操作。
用户窗体和控件具有一组预定义的事件。例如,命令按钮有一个在用户单击命令按钮时发生的 Click 事件,而用户窗体有一个 Initialize 事件,该事件在加载窗体时 运行s。
要编写控件或窗体事件过程,请通过 double-clicking 窗体或控件和 select 过程列表框中的事件打开模块。
事件过程包括控件的名称。例如,名为 Command1 的命令按钮的 Click 事件过程的名称是 Command1_Click.
如果您将代码添加到事件过程然后更改控件的名称,您的代码将保留在具有以前名称的过程中。
例如,假设您将代码添加到 Command1 的 Click 事件,然后将控件重命名为 Command2。当您 double-click Command2 时,您将看不到 Click 事件过程中的任何代码。您需要将代码从 Command1_Click 移动到 Command2_Click.
为了简化开发,最好在编写代码之前命名控件。
显示自定义对话框 要在 Visual Basic 编辑器中测试对话框,请单击 Visual Basic 编辑器中 运行 菜单上的 运行 Sub/UserForm。
要从 Visual Basic 中显示对话框,请使用 Show 方法。以下示例显示名为 UserForm1 的对话框。
Private Sub GetUserName()
UserForm1.Show
End Sub
在代码为 运行ning 时使用控件值 当 Visual Basic 代码为 运行ning 时,可以设置和 return 编辑一些控件属性。以下示例将文本框的 Text 属性 设置为 "Hello."
TextBox1.Text = "Hello"
用户在表单中输入的数据在表单关闭时丢失。如果在卸载窗体后 return 窗体上的控件值,您将获得控件的初始值而不是用户输入的值。
如果要保存在表单中输入的数据,可以在表单仍处于 运行ning 状态时将信息保存到 module-level 变量。以下示例显示一个表单并保存表单数据。
' Code in module to declare public variables.
Public strRegion As String
Public intSalesPersonID As Integer
Public blnCancelled As Boolean
' Code in form.
Private Sub cmdCancel_Click()
Module1.blnCancelled = True
Unload Me
End Sub
Private Sub cmdOK_Click()
' Save data.
intSalesPersonID = txtSalesPersonID.Text
strRegion = lstRegions.List(lstRegions.ListIndex)
Module1.blnCancelled = False
Unload Me
End Sub
Private Sub UserForm_Initialize()
Module1.blnCancelled = True
End Sub
' Code in module to display form.
Sub LaunchSalesPersonForm()
frmSalesPeople.Show
If blnCancelled = True Then
MsgBox "Operation Cancelled!", vbExclamation
Else
MsgBox "The Salesperson's ID is: " &
intSalesPersonID & _
"The Region is: " & strRegion
End If
End Sub
希望对您有所帮助。