函数访问单元格范围
Function accessing cell range
我找不到如何将单元格区域与函数一起使用。
我徒劳地搜索了一些例子。
我写了下面的测试。我在 "for" 行都收到 "Object variable not set" 错误(一个没有 "RangeAddress",第二个有它,因为我不确定语法是否正确):
function CHECKBZRANGE(cellRange) as integer
dim nCol as integer
dim nLine as integer
dim i as integer
for nCol = cellRange.StartColumn to cellRange.EndColumn
for nLine = cellRange.RangeAddress.StartRow to cellRange.RangeAddress.EndRow
i = i + 1 ' placeholder for some computation
next nLine
next nCol
checkBZ_range = i
end function
此函数使用类似 =CHECKBZRANGE(A6:C9)
的单元格调用
有人可以解释如何使用通过参数传递的单元格范围吗?
对于 Calc 电子表格,无法将 CellRange 对象作为参数传递给用户定义函数。如果您将单元格范围作为参数,那么这将始终是一个变体数组。所以有两种可能。
要么你需要函数中的单元格值,那么你可以取变体数组并使用它:
public function CHECKBZRANGE(vCellRangeValues as variant) as integer
dim i as integer
dim vCellValue as variant
if not isarray(vCellRangeValues) then
vCellValue = vCellRangeValues
msgbox vCellValue
i = i + 1
CHECKBZRANGE = i
exit function
end if
for each vCellValue in vCellRangeValues
msgbox vCellValue
i = i + 1
next
CHECKBZRANGE = i
end function
可以用作:=CHECKBZRANGE(A6:C9)
或者您确实需要单元格范围对象,那么您必须将其位置作为参数:
public function CHECKBZRANGE2(lcol1 as long, lrow1 as long, lcol2 as long, lrow2 as long ) as integer
dim i as integer
dim oCellRange as object
dim lRow as long
dim lCol as long
dim oCell as object
oCellRange = ThisComponent.CurrentController.ActiveSheet.getCellRangeByPosition(lcol1-1,lrow1-1,lcol2-1,lrow2-1)
for lCol = 0 to oCellRange.Columns.Count -1
for lRow = 0 to oCellRange.Rows.Count -1
oCell = oCellRange.getCellByPosition(lCol, lRow)
msgbox oCell.AbsoluteName
i = i + 1
next
next
CHECKBZRANGE2 = i
end function
可用作:=CHECKBZRANGE2(COLUMN(A6);ROW(A6);COLUMN(C9);ROW(C9))
提示:仅当 A6
或 C9
发生变化时才会重新计算。
是的。有可能的!只需激活与 VBA.
的兼容性
Option VBASupport 1
Option Compatible
Function Addressing(R As Range)
Addressing = R.Address
End Function
我找不到如何将单元格区域与函数一起使用。
我徒劳地搜索了一些例子。
我写了下面的测试。我在 "for" 行都收到 "Object variable not set" 错误(一个没有 "RangeAddress",第二个有它,因为我不确定语法是否正确):
function CHECKBZRANGE(cellRange) as integer
dim nCol as integer
dim nLine as integer
dim i as integer
for nCol = cellRange.StartColumn to cellRange.EndColumn
for nLine = cellRange.RangeAddress.StartRow to cellRange.RangeAddress.EndRow
i = i + 1 ' placeholder for some computation
next nLine
next nCol
checkBZ_range = i
end function
此函数使用类似 =CHECKBZRANGE(A6:C9)
有人可以解释如何使用通过参数传递的单元格范围吗?
对于 Calc 电子表格,无法将 CellRange 对象作为参数传递给用户定义函数。如果您将单元格范围作为参数,那么这将始终是一个变体数组。所以有两种可能。
要么你需要函数中的单元格值,那么你可以取变体数组并使用它:
public function CHECKBZRANGE(vCellRangeValues as variant) as integer
dim i as integer
dim vCellValue as variant
if not isarray(vCellRangeValues) then
vCellValue = vCellRangeValues
msgbox vCellValue
i = i + 1
CHECKBZRANGE = i
exit function
end if
for each vCellValue in vCellRangeValues
msgbox vCellValue
i = i + 1
next
CHECKBZRANGE = i
end function
可以用作:=CHECKBZRANGE(A6:C9)
或者您确实需要单元格范围对象,那么您必须将其位置作为参数:
public function CHECKBZRANGE2(lcol1 as long, lrow1 as long, lcol2 as long, lrow2 as long ) as integer
dim i as integer
dim oCellRange as object
dim lRow as long
dim lCol as long
dim oCell as object
oCellRange = ThisComponent.CurrentController.ActiveSheet.getCellRangeByPosition(lcol1-1,lrow1-1,lcol2-1,lrow2-1)
for lCol = 0 to oCellRange.Columns.Count -1
for lRow = 0 to oCellRange.Rows.Count -1
oCell = oCellRange.getCellByPosition(lCol, lRow)
msgbox oCell.AbsoluteName
i = i + 1
next
next
CHECKBZRANGE2 = i
end function
可用作:=CHECKBZRANGE2(COLUMN(A6);ROW(A6);COLUMN(C9);ROW(C9))
提示:仅当 A6
或 C9
发生变化时才会重新计算。
是的。有可能的!只需激活与 VBA.
的兼容性Option VBASupport 1
Option Compatible
Function Addressing(R As Range)
Addressing = R.Address
End Function