我正在尝试创建一个将2D-Range作为输入的UDF,调整其大小,调整其中一个值并将新的2D-Range作为输出。将Range作为输出很重要,因为范围将用于其他功能。不幸的是,其他功能无法将新的2D范围识别为范围。
Function Func1(Structure As Range) As Variant
i = 3
Dim temp1 As Range
Dim temp2 As Range
Set temp1 = Structure.Resize(i, 3)
Dim arr1()
ReDim arr1(1 To i, 1 To 3)
arr1 = temp1
arr1(2, 2) = 100
Func1 = arr1
End Function
Function Func2(InputArray)
Func2 = InputArray.Rows.Count
End Function
所以 - 函数Func2(Func1(结构))不起作用。它应该在新的2D范围中给出行数。
有人会帮忙吗?
我正在使用Excel 2007
答案 0 :(得分:0)
Option Explicit
Function Func1(Structure As Range) As Range
Dim TempWs As Worksheet 'Needed to create a range
Dim temp1 As Range 'Resized input range
Dim temp2 As Range 'Why is this needed?
Dim arr1 As Range 'Range to be returned
Dim i As Integer '?
'Add a temporary worksheet to the end
Set TempWs = ThisWorkbook.Worksheets.Add(, _
ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count))
i = 3
Set temp1 = Structure.Resize(i, 3)
With TempWs
'Set the temporary range and get the existing values
Set arr1 = TempWs.Range(.Cells(1, 1), .Cells(i, 3))
End With
arr1.Value = temp1.Value
arr1(2, 2) = 100
Set Func1 = arr1
'clean up
Set temp1 = Nothing
Set temp2 = Nothing
Set arr1 = Nothing
Set TempWs = Nothing
End Function
Sub test()
Dim GetRange As Range
Set GetRange = Func1(Range("A1:C3"))
ThisWorkbook.Worksheets(1).Range("D1:F3").Value = GetRange.Value
'You need to delete the temporary worksheet
Application.DisplayAlerts = False
GetRange.Worksheet.Delete
Application.DisplayAlerts = True
Set GetRange = Nothing
End Sub