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$9
和righMostCol=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
数字不会从一个表单改变到另一个表单)
( 注:我用来优化/澄清代码 )
如果有什么不清楚的话告诉我