【问题标题】:Excel VBA custom functions help dialogExcel VBA 自定义函数帮助对话框
【发布时间】:2020-01-13 18:38:23
【问题描述】:

多年来我一直在为 Excel VBA 制作很多函数,但我一直想知道如何制作更详细的帮助对话框。

对于内置函数,您会得到如下内容:

我该如何做这样的事情,它在哪里显示变量类型,如果它有一个默认值,那个值是什么。我过去见过一些事情,如果您导出文件,然后在文本编辑器中添加一些代码,然后将其导入回来,您可以获得 Excel VBA 本身不支持的额外功能......不是确定这种类型的功能是否也存在类似的东西。

提前致谢!

【问题讨论】:

  • 如果你的项目中有一个函数,默认不做这个吗?
  • 我赞同上述评论。这已经发生了 - 不确定您的问题是什么?
  • 我想他是想在VBE中添加函数intellisense(函数的参数描述),可能是……~
  • 我不确定我是否了解您的需求。您想向自定义函数添加这样的参数定义方式吗?或者你想为构建的函数添加额外的特性?

标签: excel vba custom-function


【解决方案1】:

Instr 在 VBA 中是这样定义的:

Function InStr([Start], [String1], [String2], [Compare As VbCompareMethod = vbBinaryCompare])

VbCompareMethod 是一个有 3 个成员的枚举。如果您愿意,您也可以定义使用枚举的函数(甚至是您创建的自定义函数)。

在这种情况下,枚举只是几个不同整数值的选择。它们有助于限制例程中接受哪些整数,以提高未来的可读性,并帮助程序员更容易地了解使用 intellisense 可用的选项(我认为您将 intellisense 称为“帮助对话框”)

【讨论】:

  • 我会尝试一下,看看它是否能让我到达我希望去的地方。出于好奇,您如何查找这样的功能?它是必须在 Excel VBA 外部完成的事情,还是我可以在其中完成。
  • 在 VB 编辑器中,按 F2(对象资源管理器),然后搜索 INSTR
【解决方案2】:

使用以下步骤创建自定义控件。

创建用户表单: 要创建自定义对话框,您必须创建一个用户窗体。要创建用户窗体,请单击 Visual Basic 编辑器中插入菜单上的用户窗体。

使用“属性”窗口更改表单的名称、行为和外观。例如,要更改表单上的标题,请设置 Caption 属性。

向用户表单添加控件 要将控件添加到用户窗体,请在工具箱中找到要添加的控件,将控件拖到窗体上,然后在控件上拖动调整手柄,直到控件的轮廓达到您想要的大小和形状。

注意将一个控件或多个“分组”控件从表单拖回工具箱会创建一个控件模板,该模板可以重复使用。这是为您的应用程序实现标准接口的有用功能。

将控件添加到表单后,使用 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 事件,而 UserForms 具有在加载表单时运行的 Initialize 事件。

要编写控件或窗体事件过程,请通过双击窗体或控件打开模块,然后从过程列表框中选择事件。

事件过程包括控件的名称。例如,名为 Command1 的命令按钮的 Click 事件过程的名称是 Command1_Click。

如果您将代码添加到事件过程,然后更改控件的名称,您的代码将保留在具有以前名称的过程中。

例如,假设您将代码添加到 Command1 的 Click 事件,然后将控件重命名为 Command2。当您双击 Command2 时,您不会在 Click 事件过程中看到任何代码。您需要将代码从 Command1_Click 移动到 Command2_Click。

为了简化开发,最好在编写代码之前为控件命名。

显示自定义对话框 要在 Visual Basic 编辑器中测试您的对话框,请在 Visual Basic 编辑器的“运行”菜单上单击“运行子/用户窗体”。

要从 Visual Basic 显示对话框,请使用 Show 方法。以下示例显示名为 UserForm1 的对话框。

Private Sub GetUserName() 
 UserForm1.Show 
End Sub

在代码运行时使用控制值 一些控件属性可以在 Visual Basic 代码运行时设置和返回。以下示例将文本框的 Text 属性设置为“Hello”。

TextBox1.Text = "Hello"

当表单关闭时,用户在表单上输入的数据会丢失。如果您在表单卸载后返回表单上的控件值,您将获得控件的初始值,而不是用户输入的值。

如果您想保存在表单中输入的数据,您可以在表单仍在运行时将信息保存到模块级变量。以下示例显示一个表单并保存表单数据。

' 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

希望这会有所帮助。

【讨论】:

  • 我认为这与 OP 的问题无关
  • @SmileyFtW 为了创建更详细的功能对话框,您必须创建一个客户对话框控件。您对使用标准控件可以完成的操作非常有限。您可以设计自己的窗体并在控件中将其用作自定义对话框。我们已经用 Visual Basic 和 C# 做过很多次了,效果很好。
  • 他希望智能感知在用户键入他的函数时向他的函数显示参数,类似于用户键入Instr 时发生的情况。他没有(似乎)在询问如何添加帮助对话框。
  • 他的问题包括“我一直想知道如何制作更详细的帮助对话框。”我想我误解了这个问题……我的错。
猜你喜欢
  • 2012-06-14
  • 1970-01-01
  • 2017-01-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-18
相关资源
最近更新 更多