VBA类型不匹配使用单个单元格的地址范围

发布于 2025-01-30 10:41:12 字数 973 浏览 5 评论 0原文

试图将范围传递到阵列。如果该范围是一个单元格(例如“ A1”),则返回A  type不匹配(错误13)。仅当传递给函数的范围至少为2个单元格时,它才能起作用。

arrayrng() = activesheet.range(rng.address).value 'BUG

同样,当范围是一个单元格时,错误处理程序解决方案的解决方案有一个错误:

arrayRng(0) = Rng.Value 'BUG

Public arrayRng() As Variant
    Function GetArraysFromRange(ByVal Rng As Range) As Variant
    Dim j  As Long
On Error GoTo SingleRange
arrayRng() = ActiveSheet.Range(Rng.Address).Value 'BUG

''Make  1D array into 2D array
Dim TempArray() As Variant
Dim i  As Long
ReDim TempArray(1 To UBound(arrayRng), 1 To 2)
For i = 1 To UBound(arrayRng)
    TempArray(i, 1) = arrayRng(i, 1)
Next i
arrayRng = TempArray

' copy array position (1) to position (2)for later modifying
    For j = LBound(arrayRng) To UBound(arrayRng)
       arrayRng(j, 2) = arrayRng(j, 1)
    Next
    
GetArraysFromRange = arrayRng
Erase arrayRng

Exit Function
SingleRange:
Err.Clear
arrayRng(0) = Rng.Value 'BUG
Resume
End Function

Trying to pass a range to an array. If the range is a single cell (e.g "A1") it returns a type mismatch (error 13). It works only if the range passed to the function is at least 2 cells e.g "A1:A2".

arrayrng() = activesheet.range(rng.address).value 'BUG

Also the error handler workaround, when the range is a single cell, has a bug in line:

arrayRng(0) = Rng.Value 'BUG

Public arrayRng() As Variant
    Function GetArraysFromRange(ByVal Rng As Range) As Variant
    Dim j  As Long
On Error GoTo SingleRange
arrayRng() = ActiveSheet.Range(Rng.Address).Value 'BUG

''Make  1D array into 2D array
Dim TempArray() As Variant
Dim i  As Long
ReDim TempArray(1 To UBound(arrayRng), 1 To 2)
For i = 1 To UBound(arrayRng)
    TempArray(i, 1) = arrayRng(i, 1)
Next i
arrayRng = TempArray

' copy array position (1) to position (2)for later modifying
    For j = LBound(arrayRng) To UBound(arrayRng)
       arrayRng(j, 2) = arrayRng(j, 1)
    Next
    
GetArraysFromRange = arrayRng
Erase arrayRng

Exit Function
SingleRange:
Err.Clear
arrayRng(0) = Rng.Value 'BUG
Resume
End Function

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

那小子欠揍 2025-02-06 10:41:12

getrange:返回2D一个基于2D的数组中的范围的值,

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Purpose:      Returns the values of a range ('rg') in a 2D one-based array.
' Remarks:      If ˙rg` refers to a multi-range, only its first area
'               is considered.
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Function GetRange( _
    ByVal rg As Range) _
As Variant
    Const ProcName As String = "GetRange"
    On Error GoTo ClearError
    
    If rg.Rows.Count + rg.Columns.Count = 2 Then ' one cell
        Dim Data As Variant: ReDim Data(1 To 1, 1 To 1): Data(1, 1) = rg.Value
        GetRange = Data
    Else ' multiple cells
        GetRange = rg.Value
    End If

ProcExit:
    Exit Function
ClearError:
    Debug.Print "'" & ProcName & "' Run-time error '" _
        & Err.Number & "':" & vbLf & "    " & Err.Description
    Resume ProcExit
End Function

GetRange: Return the Values of a Range in a 2D One-Based Array

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Purpose:      Returns the values of a range ('rg') in a 2D one-based array.
' Remarks:      If ˙rg` refers to a multi-range, only its first area
'               is considered.
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Function GetRange( _
    ByVal rg As Range) _
As Variant
    Const ProcName As String = "GetRange"
    On Error GoTo ClearError
    
    If rg.Rows.Count + rg.Columns.Count = 2 Then ' one cell
        Dim Data As Variant: ReDim Data(1 To 1, 1 To 1): Data(1, 1) = rg.Value
        GetRange = Data
    Else ' multiple cells
        GetRange = rg.Value
    End If

ProcExit:
    Exit Function
ClearError:
    Debug.Print "'" & ProcName & "' Run-time error '" _
        & Err.Number & "':" & vbLf & "    " & Err.Description
    Resume ProcExit
End Function
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文