繁体   English   中英

如何在即时窗口中打印范围变量? Excel VBA

[英]How can I print a range variable in the immediate window? Excel VBA

我正在尝试一些非常简单的事情。 但是,我刚开始学习,并且不太明白。

到目前为止这是我的代码:

Public Sub getCellData()
   Dim wb As Workbook: Set wb = ThisWorkbook
   Dim ws As Worksheet: Set ws = wb.Sheets(1)
   Dim rng As Range: Set rng = ws.Range(Cells(1, 2), Cells(4, 2))

   Debug.Print rng
End Sub

我正在使用的数据是这样的:

在此输入图像描述

我一直得到“运行时错误'13':类型不匹配”我搜索了错误,我仍然不确定如何解决这个问题。 我想在即时窗口中打印变量rng。

你可以为这样的东西写一个简单的子:

Sub PrintRange(R As Range, Optional delim As String = ", ")
    Dim myRow As Range, V As Variant, i As Long
    For Each myRow In R.Rows
        ReDim V(1 To myRow.Cells.Count)
        For i = 1 To myRow.Cells.Count
            V(i) = myRow.Cells(1, i).Value
        Next i
        Debug.Print Join(V, delim)
    Next myRow
End Sub

然后PrintRange rng将按预期工作。

Range是一个对象,而不是一个值。 要输出值,您可以迭代Range 另一种方法是在单个行或列上使用Transpose函数,然后使用Join获取Range中值的数组的String值。

示例代码:

Public Sub getCellData()
    Dim wb As Workbook: Set wb = ThisWorkbook
    Dim ws As Worksheet: Set ws = wb.Sheets(1)

    ' you need to prefix Cells with ws. to clarify the reference
    Dim rng As Range: Set rng = ws.Range(ws.Cells(1, 2), ws.Cells(4, 2))

    ' you cannot debug print the object itself
    'Debug.Print rng

    ' iterate the range
    Dim rngCell As Range
    For Each rngCell In rng
        Debug.Print rngCell.Value
    Next rngCell

    ' use the Transpose function for a single row or column
    Dim strData As String
    Dim wsf As WorksheetFunction: Set wsf = Application.WorksheetFunction
    strData = Join(wsf.Transpose(rng.Value), ",")
    Debug.Print strData


End Sub

注意我已将您的Set rng = ...更新为:

Set rng = ws.Range(ws.Cells(1, 2), ws.Cells(4, 2))

并添加了ws. 作为Cells的前缀,以便明确定义引用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM