Range对象返回空值

时间:2014-08-21 06:16:05

标签: excel vba excel-vba

我以这种方式设置变量的范围:

Dim srcRng As Range
Set srcRng = Range(hrwb.Worksheets(1).Range(yomColAddress)(1).Address, _
Cells(hrwb.Worksheets(1).Range(yomColAddress).row + 200, rightMostCol)(1).Address)

我打电话时出于某种奇怪的原因

srcRng(1) 'actually instead of 1 is i that runs 1 to srcRng.Count 

它不会返回最左上角的单元格值。有什么想法吗?

(对于那些不熟悉这种技术的人:http://www.cpearson.com/excel/cells.htm

信息:

执行时变量yomColAddress=$AL$9righMostCol=40

hrwb.Worksheets(1).Range(yomColAddress)(1)按预期工作。

MsgBox srcRng(1).Address & " value:" & srcRng(1).Value我得到" $AL$9 value:"

AL9的值是文字" yom"

实际的代码是:

Dim srcRng As Range
Set srcRng = Range(hrwb.Worksheets(1).Range(yomColAddress)(1).Address, Cells(hrwb.Worksheets(1).Range(yomColAddress).row + 200, rightMostCol)(1).Address)
Dim i As Integer
i = 1
While (weekDayCol = 0 And i <= srcRng.count)
    If loneHebDayLetter("à", "ä", srcRng(i)) Then'loneHebDayLetter checks some conditions on a cell
        weekDayCol = srcRng(i).Column
    End If
    i = i + 1
Wend

1 个答案:

答案 0 :(得分:1)

我想我在这里遇到了什么问题:

代码本身运行良好但对良好的数据(这是一个假设,但我只是使用自定义工作簿进行了一些测试)

短版

只需在srcRng.Select之后添加Set srcRng(没有真正的兴趣,但要了解它的作用),我想如果我的假设是正确的话,你会得到什么。

更长的版本

当你执行Set srcRng = ...时,它会创建正确的范围,但它实际上并未链接到任何 ...它只是意味着记住范围单元格X 单元格Y

重点是:您的代码执行的工作表(让我们说&#34; sheet2&#34; )不是与数据所在的那个相同(例如&#34; sheet1&#34; ),因此srcRng(1)被理解为Sheets("sheet2").srcRng(1)而不是Sheets("sheet1").srcRng(1)(&lt; 1} - 这就是你想要的东西)

即使不优雅,这应该有用

Dim srcRng As Range
With hrwb.Worksheets(1)
    Set srcRng = Range(.Range(yomColAddress)(1).Address, Cells(.Range(yomColAddress).row + 200, rightMostCol)(1).Address)
    Dim i As Integer
    i = 1
    While (weekDayCol = 0 And i <= srcRng.count)
        If loneHebDayLetter("à", "ä", .Range(srcRng.Address)(i).Value) Then 'I assume it take the value not the cell: if it take the cell you may get an error!
            weekDayCol = srcRng(i).Column
        End If
        i = i + 1
    Wend
End With

重要的是使用.Range(srcRng.Address)(i).Value访问右侧工作表中的值! (这就是为什么这里不需要这个技巧的原因:srcRng(i).Column因为列数不会从一张纸变为另一张)

注意:我使用with来优化/澄清代码

如果有什么事情不清楚告诉我