Excel 处理在for-each循环中包含一个元素的数组

Excel 处理在for-each循环中包含一个元素的数组,excel,vba,Excel,Vba,Excel中的病人表 A 1 |Patient Name | 2 |Jane Doe | 当此表仅列出一名患者时,以下例行程序将失败: Sub RunMerge() Dim ptsArray As Variant Dim strPtName As Variant Dim lRowCount As Long lRowCount = Worksheets("Patients").UsedRange.Rows.Count

Excel中的病人表

            A
 1          |Patient Name  |
 2          |Jane Doe      |
当此表仅列出一名患者时,以下例行程序将失败:

Sub RunMerge()

Dim ptsArray As Variant
Dim strPtName As Variant
Dim lRowCount As Long

lRowCount = Worksheets("Patients").UsedRange.Rows.Count

ptsArray = ThisWorkbook.Worksheets("Patients").Range("A2:A" & lRowCount).value

    For Each strPtName In ptsArray
            . . .
    Next
End Sub
在VBA编辑器中,我看到strPtName显示为空,但ptsArray显示它包含Jane Doe。节目也暂停了。但如果我再加上一个或更多的病人,一切都会正常工作。在只剩下一名患者的情况下,为了运行例行程序,我缺少了什么。

一行问题
选项显式
子运行合并()
'定义常量。
常量第一行长度=2
常量src列作为Variant=“A”例如“A”或1
'定义源列范围。
使用此工作簿。工作表(“患者”)
变暗rng As范围
设置rng=.Columns(srcColumn).Find(“*”,xlValues,,xlPrevious)
如果rng为空,则退出Sub
如果rng.Row<第一行,则退出Sub
设置rng=.Range(.Cells(FirstRow,srcolumn),rng)
以
'将源范围写入源数组。
将Dim患者视为“变体”不是必需的,但被认为是正确的。
如果rng.Rows.Count=1,则
ReDim患者(1对1,1对1)
患者(1,1)=平均值
其他的
患者=平均值
如果结束
设置rng=无
“或者:
调试。打印“下一步”
我想我会坚持多久
对于i=1至UBound(患者)
调试。打印患者(i,1)
接下来我
“或:
调试。打印“每个”
作为变异体的弱智患者
每名病人
调试。打印病人
下一个病人
端接头

。。。单个单元格的
.Value
不是数组,因此这是您必须处理的特殊情况。顺便说一句,数组要求为Lbound()到UBound()循环设置
,而不是为每个
设置
。谢谢BigBen。这是我的问题,我该如何处理这个案件?链接有你需要的一切。而且,
UsedRange
不可靠。。。有关查找最后一行的更好方法,请参见。