AP1*_*AP1 6 excel vba immediate-window
我正在尝试一些应该非常简单的事情。不过我今天才开始学习,还不太明白。
到目前为止,这是我的代码:
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
Run Code Online (Sandbox Code Playgroud)
我正在使用的数据是这样的:
我不断收到“运行时错误'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
Run Code Online (Sandbox Code Playgroud)
然后就PrintRange rng可以按预期工作了。
Range是一个对象,而不是一个值。要输出值,您可以迭代Range. Transpose另一种方法是在单行或单列上使用该函数,然后Join获取String值数组中的值Range.
示例代码:
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
Run Code Online (Sandbox Code Playgroud)
请注意,我将您更新Set rng = ...为:
Set rng = ws.Range(ws.Cells(1, 2), ws.Cells(4, 2))
Run Code Online (Sandbox Code Playgroud)
并添加ws.为前缀,Cells以便显式定义引用。
| 归档时间: |
|
| 查看次数: |
38218 次 |
| 最近记录: |