簡體   English   中英

處理每個循環中包含一個元素的數組

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM