Range对象返回空值

我有这样一个variables的设置范围:

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 

它不返回最左上angular的单元格值。 任何想法为什么?

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

信息:

在执行时,variablesyomColAddress=$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 

我想我在这里得到什么错误:

代码本身运行良好,但没有良好的数据(这是一个假设,但我只是做了一些自定义工作簿的testing)

简洁版本

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

更长的版本

当你Set srcRng = ...它确实创build了正确的范围,但实际上并没有链接到任何表格 ……这只是记住一个从单元格X单元格Y的范围

重点是:您的代码执行的工作表(比如说“sheet2” )与数据所在的工作Sheets("sheet2").srcRng(1)称为“sheet1” )不同,因此srcRng(1)被理解为Sheets("sheet2").srcRng(1)而不是Sheets("sheet1").srcRng(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因为srcRng(i).Column数字不会从一个表单改变到另一个表单)

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

如果有什么不清楚的话告诉我