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 中的子或函数的主要内容,如果未能解决你的问题,请参考以下文章