我以这种方式设置变量的范围:
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$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
答案 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
来优化/澄清代码)
如果有什么事情不清楚告诉我