VBA是否具有與Java .hasnext方法等效的功能?VBA相當於hasnext方法嗎?
我經歷了很多在Excel工作簿片的嘗試循環,並打算使用
ActiveSheet.Next.Select
一個循環中,讓我知道,因爲我那會比這更有效的任何方法我確定有。提前致謝!
VBA是否具有與Java .hasnext方法等效的功能?VBA相當於hasnext方法嗎?
我經歷了很多在Excel工作簿片的嘗試循環,並打算使用
ActiveSheet.Next.Select
一個循環中,讓我知道,因爲我那會比這更有效的任何方法我確定有。提前致謝!
沒有等價的,但支持索引的大多數屬性都有一個.Count
屬性,會告訴你多少你需要通過
遍歷我不認爲VBA有直接equivilent到hasnext。如果你想檢查一個集合是否有對象,你可以做類似If colX.Count > 0 then...end if
如何使用像For Each x in Collection ... Next x
這樣的循環?如果到達列表的末尾,它會自動終止。
執行此操作的最佳方法是使用循環方法For Each
。
下面是一個示例:
Dim wks As Worksheet
'- Begin looping through workbook
For Each wks In ActiveWorkbook.Worksheets
'- Do code with each worksheet
msgbox wks.name
next wks
在VBA此遍歷ActiveWorkbook
內的片材,並允許您與wks
可變環路引用當前片。
+ 1環接去:) – 2012-08-08 13:39:01
+1首先在最簡單的答案 – brettdj 2012-08-09 01:39:21
正如上面已經提到的,沒有的.Hasnext
相當於你可以通過使用任何迴路中的工作表圈。下面是一個for循環示例
Sub Sample()
Dim ws As Worksheet
For Each ws In ActiveWorkbook.Worksheets
With ws
'
'~~> Your code here
'
End With
Next
End Sub
如果我想真正實現Hasnext
種事情,然後我可以做到這一點,以及
Sub Sample()
If Hasnext(ActiveSheet.Index + 1) Then
MsgBox Sheets(ActiveSheet.Index + 1).Name
End If
End Sub
Function Hasnext(numb As Long) As Boolean
Dim ws As Worksheet
On Error Resume Next
Set ws = Sheets(numb)
On Error GoTo 0
If Not ws Is Nothing Then Hasnext= True
End Function
好的解決辦法:) – JMax 2012-08-08 14:03:55
所有的答案是有幫助在這個問題上。
我想展示我最終做了什麼,代碼在答案中更具可讀性。
我剛剛使用了count方法並循環,直到我的迭代器基本等於count。
Sub Total_Sheet_Compiler()
Dim sheetCount, i As Integer
sheetCount = ActiveWorkbook.Sheets.Count
i = 1
Sheets("Sheet1").Select
Do Until i = sheetCount
ActiveSheet.Next.Select
i = i + 1
Loop
End Sub
我會的方式建議使用@ Gimp的方法。它使用For Each做同樣的事情,這是一種處理對象的強大方法。另外,你應該知道你的代碼示例 - 「http:// www.cpearson.com/excel/DeclaringVariables.aspx」中的sheetCount被初始化爲Variant而不是Integer。向下滾動到「注意用一個聲明聲明的變量」。 – 2012-08-08 13:58:06
感謝您發佈您的答案。然而,你應該'將sheetCount整型爲Integer,i爲Integer',因爲VBA不理解你使用的語法。另外,只要有可能,你應該儘量避免選擇。 – JMax 2012-08-08 14:05:51
VBA的確瞭解 「Dim sheetCount,i As Integer」 自己測試一下 – 2012-08-08 16:09:56
最接近HasNext的是檢查Next是否爲「Nothing」。
Dim sh As Worksheet
Set sh = ActiveSheet
If Not sh.Next Is Nothing Then
Set sh = sh.Next
End If
但我同意其他人對於Each..Next並避免選擇和激活是更好的方式去。
+ 1簡短而親切:) – 2012-08-08 13:38:40
哈哈,是的,這是一個很好的答案:) – 2012-08-08 13:45:59