2012-08-08 68 views
1

VBA是否具有與Java .hasnext方法等效的功能?VBA相當於hasnext方法嗎?

我經歷了很多在Excel工作簿片的嘗試循環,並打算使用

ActiveSheet.Next.Select 

一個循環中,讓我知道,因爲我那會比這更有效的任何方法我確定有。提前致謝!

回答

3

沒有等價的,但支持索引的大多數屬性都有一個.Count屬性,會告訴你多少你需要通過

+0

+ 1簡短而親切:) – 2012-08-08 13:38:40

+0

哈哈,是的,這是一個很好的答案:) – 2012-08-08 13:45:59

0

遍歷我不認爲VBA有直接equivilent到hasnext。如果你想檢查一個集合是否有對象,你可以做類似If colX.Count > 0 then...end if

1

如何使用像For Each x in Collection ... Next x這樣的循環?如果到達列表的末尾,它會自動終止。

7

執行此操作的最佳方法是使用循環方法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可變環路引用當前片。

+0

+ 1環接去:) – 2012-08-08 13:39:01

+0

+1首先在最簡單的答案 – brettdj 2012-08-09 01:39:21

3

正如上面已經提到的,沒有的.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 
+0

好的解決辦法:) – JMax 2012-08-08 14:03:55

0

所有的答案是有幫助在這個問題上。

我想展示我最終做了什麼,代碼在答案中更具可讀性。

我剛剛使用了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 
+2

我會的方式建議使用@ Gimp的方法。它使用For Each做同樣的事情,這是一種處理對象的強大方法。另外,你應該知道你的代碼示例 - 「http:// www.cpearson.com/excel/DeclaringVariables.aspx」中的sheetCount被初始化爲Variant而不是Integer。向下滾動到「注意用一個聲明聲明的變量」。 – 2012-08-08 13:58:06

+2

感謝您發佈您的答案。然而,你應該'將sheetCount整型爲Integer,i爲Integer',因爲VBA不理解你使用的語法。另外,只要有可能,你應該儘量避免選擇。 – JMax 2012-08-08 14:05:51

+0

VBA的確瞭解 「Dim sheetCount,i As Integer」 自己測試一下 – 2012-08-08 16:09:56

1

最接近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並避免選擇和激活是更好的方式去。