【问题标题】:For each fails when there is only one cell selected当只选择一个单元格时,对于每个失败
【发布时间】:2015-07-25 17:53:22
【问题描述】:

我在 VBA 中选择一个范围到变体

Dim source as variant
source = Range("A4:A" & rowcount)

然后我每个人都有一个

For Each element in source 
.....
.....

这在选择 2-3 个值时有效,但当行数为 4 时,Range("A4:A" & rowcount) 将只选择一个单元格,并且每个单元格都不起作用

即使只有一个值,我怎样才能使它工作

我试过了

If (rowcount=4) Then
    redim preserve source(1)
    source(1,1) = source

但是没用

【问题讨论】:

    标签: vba excel


    【解决方案1】:

    试试这个,看看它是否适合你:

    这里,ThisWorkbook.Sheets(1) 指的是工作簿的 Sheet1。

    Sub try()
    Dim source As Range
    RowCount = 4
    Set source = ThisWorkbook.Sheets(1).Range("A4:A" & RowCount)
    
    For Each element In source
    MsgBox "hi"
    
    Next
    
    End Sub
    

    【讨论】:

      【解决方案2】:

      你需要把它变成二维

      Dim var As Variant
      Dim rng As Range
      Dim thing As Variant
      Set rng = Range("a1")
      If rng.CountLarge = 1 Then
          ReDim var(1 To 1, 1 To 1)
          var(1, 1) = rng.Value2
      Else
          var = rng.Value2
      End If
      For Each thing In var
          MsgBox thing
      Next thing
      

      【讨论】:

      • 谢谢威廉姆斯 我可以删除变体中的最后一个元素吗?因为现在我选择了一个空的最后一行
      • 如果要测试空单元格,请使用 Isempty(var)
      • 我必须在很多地方检查,因为有很多这样的数组:(有没有办法我可以只删除最后一个元素
      • 当您将变体分配给多个单元格时,您会得到一个基于 1 索引构建的二维数组(例如 lbound(source, 1) = 1)。如果分配单个单元格值,则根本不会得到数组。我认为处理这个问题的最好方法是使用If Range("A4:A" & rowcount).cells.count > 1 决定的两种方法。见Variant Data Type
      • @Jeeped:这不正是我发布的内容吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-02-11
      • 1970-01-01
      • 1970-01-01
      • 2022-01-05
      • 1970-01-01
      • 2019-09-03
      • 1970-01-01
      相关资源
      最近更新 更多