VBA Excel 中的子或函数

Posted

技术标签:

【中文标题】VBA Excel 中的子或函数【英文标题】:Sub or Function in VBA Excel 【发布时间】:2015-12-10 22:14:38 【问题描述】:

我正在尝试创建函数或子函数以在 VBA Excel 中创建报告。我希望用户在两个单独的文本框中输入两个日期。然后,当单击提交按钮时,它会检查文本框是否为空,如果不是,它会执行 CreateReport() Sub 或创建新工作表并向其附加数据的函数。这是我的代码:

用户表单2:

Private Sub Cancel_Click()
 Unload Me
End Sub

Private Sub Submit_Click()

If UserForm2.Date1.Value = "" & UserForm2.Date2.Value = "" Then

Value1 = UserForm2.Date1.Value
Value2 = UserForm2.Date2.Value
CreateReport(Value1,Value2)

End If

End Sub

Private Sub UserForm_Initialize()
Date1.SetFocus
Dim Value1 As String
Dim Value2 As String
End Sub

模块1:

Option Explicit
Public Function CreateSheet(Name1 As String, Name2 As String)
Dim WS As Worksheet
Dim FullName As String
FullName = Name1 & "-" & Name2
Set WS = Sheets.Add.Name = FullName
End Function

Public Sub CreateReport(Date1 As String, Date2 As String)

End Sub

【问题讨论】:

您对这段代码有疑问吗?如果有,在哪里?是否有错误,或者它只是没有产生您期望的结果? 唯一的错误是userforum中的CreateReport()是红色的。 如果您没有返回值,请不要创建Function - 请改用Sub / 过程。 好的,但它仍然是红色的,我将代码放入 sub 并且仍然是红色的。 重点是 Function 返回一个值,而 Sub 没有。在编写代码时也要考虑正确缩进代码,并在以后必须阅读代码时感谢自己。 【参考方案1】:

当您没有输入日期时,您正在呼叫CreateReport...

还有

CreateReport(Value1,Value2)

应该是

CreateReport Value1, Value2

除非您调用函数或使用 Call 关键字,否则不要使用括号。

Set WS = Sheets.Add.Name = FullName

应该是

Set WS = Sheets.Add()
WS.Name = FullName

【讨论】:

非常感谢。我已经习惯了用 C++ 和其他语言进行编码,我认为您必须使用括号来进行调用。

以上是关于VBA Excel 中的子或函数的主要内容,如果未能解决你的问题,请参考以下文章

Excel VBA - 将参数参数传递给 Sub

从 VBA (Excel) 中的另一个函数调用一个函数

Excel VBA里面怎样把数字转换成字符串

编译错误子或未定义函数

字符串中的正确函数(Excel 2007 VBA)

EXCEL 的自定义 VBA 函数中的用户定义警告