我有一段代碼應該按名稱檢查表單的存在。如果工作表存在,則存在一些複製和過去的功能,如果工作表不存在,那麼它將創建以及相同的複製過去功能。我無法獲得正確的布爾值來返回到主子。布爾值總是註冊爲false(我知道這是默認值)。我嘗試了幾種不同的方法來解決問題,但我仍然遇到問題。我真的可以使用一些幫助,這可能是一個簡單的修復。在VBA中返回一個布爾值
Sub BreakOutCategories()
Dim catSheet As Worksheet
Dim catName As String
Dim Range1 As Range
Dim gRange As Range
Dim toSheet As Worksheet
Dim CheckSheet As Boolean
Dim CreateSheet As Boolean
Dim i As Long
Set catSheet = Sheets("MasterList")
Set Range1 = catSheet.Range("A1", catSheet.Range("A1").End(xlDown))
For Each gRange In Range1
i = 0
catName = gRange.Value
CheckMySheet (catName)
If CheckSheet = True Then
toSheet = Sheets(gRange.Value)
gRange.Offset(0, 1).Copy
toSheet.Range("A1", toSheet.Range("A1").End(xlDown)).Offset(1, 0).Paste
gRange.Offset(0, 1).Copy
toSheet.Range("E1", toSheet.Range("E1").End(xlDown)).Offset(1, 0).Paste
gRange.Offset(0, 2).Copy
toSheet.Range("B1", toSheet.Range("B1").End(xlDown)).Offset(1, 0).Paste
gRange.Offset(0, 2).Copy
toSheet.Range("F1", toSheet.Range("F1").End(xlDown)).Offset(1, 0).Paste
ElseIf CheckSheet = False Then
CreateMySheet catName
toSheet = (gRange.Value)
gRange.Offset(0, 1).Copy
toSheet.Range("A1", toSheet.Range("A1").End(xlDown)).Offset(1, 0).Paste
gRange.Offset(0, 1).Copy
toSheet.Range("E1", toSheet.Range("E1").End(xlDown)).Offset(1, 0).Paste
gRange.Offset(0, 2).Copy
toSheet.Range("B1", toSheet.Range("B1").End(xlDown)).Offset(1, 0).Paste
gRange.Offset(0, 2).Copy
toSheet.Range("F1", toSheet.Range("F1").End(xlDown)).Offset(1, 0).Paste
End If
Next gRange
End Sub
Public Function CheckMySheet(ByVal catName As String) As Boolean
Dim theSheet As Worksheet
Dim CheckSheet As Boolean
For Each theSheet In ThisWorkbook.Sheets
If theSheet.Name = catName Then
CheckSheet = True
Exit For
End If
Next theSheet
End Function
Public Function CreateMySheet(ByVal catName As String) As Boolean
Dim catSheet As Worksheet
Dim newSheet As Worksheet
Dim Range1 As Range
Dim gRange As Range
Set catSheet = Sheets("MasterList")
Set Range1 = catSheet.Range("A1", catSheet.Range("A1").End(xlDown))
Set newSheet = Sheets.Add(After:=Sheets("Cover"))
newSheet.Name = catName
newSheet.Range("A1") = "Line"
newSheet.Range("E1") = "Line"
newSheet.Range("B1") = "Item"
newSheet.Range("F1") = "Item"
newSheet.Range("C1") = "Units"
newSheet.Range("G1") = "Sales"
CreateMySheet = True
End Function
我已經發布了完整的代碼,試圖給出我想要完成的一個很好的圖片。我還在CreateMySheet catName
之後考慮Do Until
循環來再次檢查表單的存在,以防止代碼向前移動,直到表單完全創建。
謝謝!
謝謝!你對副本/過去的東西是正確的,我現在就開始提煉,但至少讓我明白了這一點。我知道這不是一個教室本身,但究竟需要做什麼才能正確地返回布爾值? – William