2016-01-20 182 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”)。”

我改变变量的名称和代码工作。

感谢大家