2015-09-14 184 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++和其他語言編寫代碼,我認爲你必須使用圓括號來完成這個調用。 –