[英]Handling an array with one element in a for each loop
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。 並且程序停止。 但是,如果我添加第二個或更多的病人,一切都會正常進行。 在只剩下一名患者的情況下,為了運行例程,我缺少什么。
Option Explicit
Sub RunMerge()
' Define constants.
Const FirstRow As Long = 2
Const srcColumn As Variant = "A" ' e.g. "A" or 1
' Define Source Column Range.
With ThisWorkbook.Worksheets("Patients")
Dim rng As Range
Set rng = .Columns(srcColumn).Find("*", , xlValues, , , xlPrevious)
If rng Is Nothing Then Exit Sub
If rng.Row < FirstRow Then Exit Sub
Set rng = .Range(.Cells(FirstRow, srcColumn), rng)
End With
' Write Source Range to Source Array.
Dim Patients As Variant ' Not necessary, but considered correct.
If rng.Rows.Count = 1 Then
ReDim Patients(1 To 1, 1 To 1)
Patients(1, 1) = rng.Value
Else
Patients = rng.Value
End If
Set rng = Nothing
' Either:
Debug.Print "For Next"
Dim i As Long
For i = 1 To UBound(Patients)
Debug.Print Patients(i, 1)
Next i
' or:
Debug.Print "For Each"
Dim Patient As Variant
For Each Patient In Patients
Debug.Print Patient
Next Patient
End Sub
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.