如何从循环VBA中为变量赋值

时间:2016-01-20 15:52:49

标签: excel vba loops variables

我的新手问题:

我需要根据循环收集的值定义变量。 我有数据列,我需要过滤这些数据并复制到另一个名为变量的新工作表。

问题是,我无法从循环中获取变量。 可能吗? 示例:变量为“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

谢谢!

3 个答案:

答案 0 :(得分: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

答案 1 :(得分: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

答案 2 :(得分:0)

好的我用谷歌搜索并发现了问题,错误信息是由于"当一个Sub被称为与变量相同时也会发生这种错误(即在一个Sub中你用循环与迭代器" a& #34;,而另一个Sub被称为" a")。"

我更改了变量的名称,代码也有效。

感谢所有人