2015-09-14 166 views
2

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

Userform2:

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 
+0

你是否有问题?如果是这样,在哪里?是否有错误,还是只是不能产生你所期望的? – Kyle

+0

唯一的错误是,userforum中的CreateReport()是红色的。 –

+0

如果你不是*返回一个值,那么不要创建一个'Function' * - 改用'Sub'/procedure。 –

回答

3

你打电话CreateReport当没有输入的日期......

而且

CreateReport(Value1,Value2) 

sho可能是

CreateReport Value1, Value2 

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

而且

Set WS = Sheets.Add.Name = FullName 

也许应该

与此代码
Set WS = Sheets.Add() 
WS.Name = FullName 
+0

非常感谢。我很喜欢用C++和其他语言编写代码,我认为你必须使用圆括号来完成这个调用。 –