Arrays 如何在visual basic中将带字符串的excel单元格指定给数组值?

Arrays 如何在visual basic中将带字符串的excel单元格指定给数组值?,arrays,excel,vba,Arrays,Excel,Vba,我对VisualBasic非常陌生,但在为数组成员分配单元格值时遇到了问题。基本上,我所做的是在一列中循环,并将每个单元格分配给数组的一个新部分。测试代码发布如下: Sub Test() Dim List(5) As String Dim celltext As String For i = 1 To 5 celltxt = ActiveSheet.Range("K" & i).Text List(i) = celltext

我对VisualBasic非常陌生,但在为数组成员分配单元格值时遇到了问题。基本上,我所做的是在一列中循环,并将每个单元格分配给数组的一个新部分。测试代码发布如下:

Sub Test()
    Dim List(5) As String
    Dim celltext As String

    For i = 1 To 5
        celltxt = ActiveSheet.Range("K" & i).Text
        List(i) = celltext
        MsgBox List(i)
    Next i
End Sub
但是,每次弹出消息框时,它都是空白的,这意味着分配不起作用。这些坐标处的单元格确实有值。有什么线索吗?

您分配给“celltxt”,但从“celltext”读取

在每个模块的顶部添加
选项Explicit
,这将使这些类型的错误更加明显。

您正在分配给“celltxt”,但从“celltext”读取

在每个模块的顶部添加
Option Explicit
,这将使这些类型的错误更加明显

  • 当您
    将变暗列表(5)设置为字符串时
    。数组中最低的元素是
    0
    ,而不是
    1
    。您可能希望将其更改为字符串形式的
    Dim List(1到5),否则数组中的第一个元素将始终为空

  • 您正在使用
    ActiveSheet
    。你确定这张纸是对的吗

  • 试试这个代码

    Sub Test()
        Dim List(1 To 5) As String
        Dim ws As Worksheet
        Dim i as Long
    
        Set ws = ThisWorkbook.Sheets("Sheet1")
    
        For i = 1 To 5
            List(i) = ws.Range("K" & i).Value
            MsgBox List(i)
        Next i
    End Sub
    
  • 当您
    将变暗列表(5)设置为字符串时
    。数组中最低的元素是
    0
    ,而不是
    1
    。您可能希望将其更改为字符串形式的
    Dim List(1到5),否则数组中的第一个元素将始终为空

  • 您正在使用
    ActiveSheet
    。你确定这张纸是对的吗

  • 试试这个代码

    Sub Test()
        Dim List(1 To 5) As String
        Dim ws As Worksheet
        Dim i as Long
    
        Set ws = ThisWorkbook.Sheets("Sheet1")
    
        For i = 1 To 5
            List(i) = ws.Range("K" & i).Value
            MsgBox List(i)
        Next i
    End Sub
    

    您还可以尝试以下操作:

    Dim List As Variant
    Dim i As Long
    
    List = ActiveSheet.Range("K1:K5")
    
    For i = 1 To UBound(List)
        MsgBox List(i, 1)
    Next i
    

    这将通过只读取工作表一次而不是每次循环来提高性能。

    您也可以尝试:

    Dim List As Variant
    Dim i As Long
    
    List = ActiveSheet.Range("K1:K5")
    
    For i = 1 To UBound(List)
        MsgBox List(i, 1)
    Next i
    

    这将通过只读取工作表一次而不是每次循环来提高性能。

    +1 on Option Explicit+1 on Option Explicit