Excel联合作用域
我使用Union附加到函数中的范围: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
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
。