Excel联合作用域

Excel联合作用域,excel,vba,Excel,Vba,我使用Union附加到函数中的范围: Public Function appendRange(col, pRowStart, pRowEnd, rng, sheetObj) Dim rngBox01 As range Set rngBox01 = rng Dim rngBox02 As range pRng = col & pRowStart & ":" & col & pRowEnd Set

我使用Union附加到函数中的范围:

Public Function appendRange(col, pRowStart, pRowEnd, rng, sheetObj)

    Dim rngBox01 As range
    Set rngBox01 = rng
    
    Dim rngBox02 As range
    pRng = col & pRowStart & ":" & col & pRowEnd
    Set rngBox02 = sheetObj.range(pRng)
        
    If rngBox01 Is Nothing Then
        Set rngBox01 = rngBox02
    Else
        Set rngBox01 = Union(rngBox01, rngBox02)
    End If
    
    Set appendRange = rngBox01
    
End Function
如果我以这种方式使用union并将范围设置为工作表单元格,则union工作正常。 例如:

Dim rngBox01 As range
Set rngBox01 = range("A1:A5")
    
Dim rngBox02 As range
Set rngBox02 = range("B1:B5")
    
Set rngBox01 = Union(rngBox01, rngBox02)
但是,当我尝试使用参数时,会出现应用程序定义/对象定义的错误。 我很困惑,因为MSDN文档声明union接受范围作为参数。 它还说,范围是应用程序。 那么,在这种情况下,为什么我不能使用函数参数作为union的参数呢

以下是主要子项:

Public Sub getPartDescription()
    
    Dim pnRange As range
    Dim descRange As range
    Dim mfrRange As range
    Dim cstRange As range
    Dim cstExtRange As range
    Dim spaRange As range
    Dim rangeBox As range
       
    Set bomSrc = Workbooks("GVOSS PDP BOMs with Pricing 7-28-2020 RevM.xlsx")
    
    For Each sheet In bomSrc.Sheets
    
        append = setAppendFlag(sheet)
        
        If append Then
        
            ' GET START AND END ROW FOR THE SHEET
            Set rangeBox = sheet.range("E1:E9999")
            pRowStart = getPnColFirstRow(rangeBox)
            pRowEnd = getPnColLastRow(rangeBox)
            Set rangeBox = Nothing
            
            ' APPEND RANGES
            Set pnRange = appendRange("E", pRowStart, pRowEnd, pnRange, sheet)
            Set descRange = appendRange("F", pRowStart, pRowEnd, descRange, sheet)
            Set mfrRange = appendRange("G", pRowStart, pRowEnd, mfrRange, sheet)
            Set cstRange = appendRange("J", pRowStart, pRowEnd, cstRange, sheet)
            Set cstExtRange = appendRange("K", pRowStart, pRowEnd, cstExtRange, sheet)
            Set spaRange = appendRange("L", pRowStart, pRowEnd, spaRange, sheet)
            
            stopHere = True
            
        End If
    Next 'Sheet
    
End Sub

您能否显示实际使用
范围
参数的行,并分享如何调用此函数?您可能遇到了工作表父问题。联合不能用于不同工作表中的范围。旁注。。。指定您的类型,例如,
公共函数appendRange(ByVal col作为字符串,ByVal pRowStart作为长,ByVal pRowEnd作为长,ByVal rng作为范围,ByVal sheetObj作为工作表)作为范围
。此外,您的函数是使用
rng
作为变量定义的,在函数中,您将其称为
pRng
-使用
选项Explicit
-或者您试图使用另一个名为
pRng
的变量?@braX pRng只是连接结果的一个框:
pRng=col&pRowStart&“:”&col&pRowEnd
。rng用于行
设置rngBox01=rng