2016-01-20 132 views
1

我的新手問題:如何將變量賦值給循環VBA中的值

我需要從循環中收集的值定義變量。 我有一列數據,我需要過濾這些數據並複製到另一個名爲變量的新工作表。

問題是,我無法從循環中獲取變量。 這可能嗎? 例如:變量是「hu」

i = 2 
Do Until IsEmpty(Cells(i, 9)) 

**hu** = Cells(i, 9).Value 

    i = i + 1 
Loop 

ActiveWorkbook.Worksheets.Add 
ActiveSheet.Name = **hu** 

Worksheets("Sheet1").Range("A1:I1").Select 
    Selection.AutoFilter 
    ActiveSheet.Range("$A$1:$I$1").AutoFilter Field:=9, Criteria1:=**hu** 


With ActiveSheet.AutoFilter.Range 
On Error Resume Next 
    Set rng2 = .Offset(1, 0).Resize(.Rows.Count - 1, 1) _ 
     .SpecialCells(xlCellTypeVisible) 
On Error GoTo 0 
End With 
If rng2 Is Nothing Then 
    MsgBox "No data to copy" 
Else 

    Set rng = ActiveSheet.AutoFilter.Range 
    rng.Offset(1, 0).Resize(rng.Rows.Count - 1).Copy _ 
    Destination:=Worksheets("Comparison2").Range("A2") 
End If 
    ActiveSheet.ShowAllData 

謝謝!

+0

確切在哪裏你是否得到一個錯誤? – TheEngineer

+0

我是否正確理解你的問題是你需要變量** hu **的多個值,但你只能得到一個(最後一個)?這是事情的方式 - 一個「normal」變量只能存儲一個值,您需要1)擴展LOOP,使其運行所有代碼;或者2)* hu *需要是ARRAY,以便可以存儲多個值 –

+0

我收到此錯誤:「編譯錯誤:預期的功能或變量「我不能前進與宏的發展,因爲我收到此錯誤 – bennes

回答

0

您需要在循環中包含子例程調用才能使用該變量。 事情是這樣的..

Option Explicit 
Sub do_it() 
    Dim hu As String 
    Dim i As Integer 
    i = 2 
    Cells(i, 9).Select 
    Do Until IsEmpty(Cells(i, 9)) 
     hu = Cells(i, 9).Value 
     get_worksheet (hu) 
     i = i + 1 
    Loop 
End Sub 

Sub get_worksheet(name) 
    ActiveWorkbook.Worksheets.Add 
    ..etc 
end sub 
0

有了這樣的數據:

enter image description here

專欄中,我,這是一種方式來獲得前空的最後一個項目:

Sub marine() 
    i = 2 
    Do Until Cells(i, 9).Value = "" 
     hu = Cells(i, 9).Value 
     i = i + 1 
    Loop 

    MsgBox hu 
End Sub 
+0

嗨,部分」hu = Cells(i,9).Value「我收到此錯誤消息:編譯錯誤:預期的函數或變量:(代碼適合你嗎?如果是,我是否需要以某種方式更改我的VBA設置?謝謝 – bennes

0

好吧我搜索了一下,發現了這個問題,錯誤信息是由於「這個錯誤也發生在Sub被稱爲變量(即在一個小組,你有一個與迭代器「一」圈,而另一個小組被稱爲「A」)。」

我改變變量的名稱和代碼工作。

感謝大家