【问题标题】:LibreOffice Calc macro function accessing cell rangeLibreOffice Calc 宏函数访问单元格范围
【发布时间】:2020-09-11 15:55:38
【问题描述】:

我有来自Function accessing cell range的函数(在此重复):

public function CHECKBZRANGE(vCellRangeValues as variant) as integer

    dim i as integer
    dim vCellValue as variant

    for each vCellValue in vCellRangeValues
        msgbox vCellValue
        i = i + 1
    next

    CHECKBZRANGE = i
end function

曾经在 LibreOffice =CHECKBZRANGE(A6:C9)。现在在 LibreOffice 7.0.0.3 中我收到此错误消息

Inadmissible value or data type.
Data type mismatch.
[OK]

排队

for each vCellValue in vCellRangeValues

我搜索了这个,但找不到答案。这是:

  1. LibreOffice VBA 的新功能?
  2. 回归?

如何访问宏函数中的范围值?

【问题讨论】:

    标签: libreoffice-calc libreoffice-basic


    【解决方案1】:

    由于vCellRangeValues不是一个单元格区域,而是这些单元格的值数组,你应该使用两个嵌套循环来显示每个值——在行和列上:

    Function CHECKBZRANGE(vCellRangeValues As Variant) As Integer 
    Dim iRow As Long, iColumn As Long 
        For iRow = LBound(vCellRangeValues) To UBound(vCellRangeValues)
            For iColumn = LBound(vCellRangeValues,2) To UBound(vCellRangeValues,2)
                msgbox "Cell (" & iRow & "," & iColumn & ") = " & vCellRangeValues(iRow, iColumn )
            Next iColumn
        Next iRow
        
        CHECKBZRANGE = (UBound(vCellRangeValues)-LBound(vCellRangeValues) +1) * _
                                        (UBound(vCellRangeValues,2)-LBound(vCellRangeValues,2) +1)
    End Function 
    

    【讨论】:

    • 顺便说一句,您参考的答案中说明了该函数将值数组而不是单元格范围作为参数的事实。
    • 谢谢。这是一种可行的解决方法(也许是一种更清洁但更精细的方式)。尽管如此,它确实没有回答我的问题,为什么for each vCellValue in vCellRangeValues 不再起作用了。我在我的宏中非常广泛地使用它,现在我必须重写它。回归?改变设计决策? @JohnSUN,你能解释一下吗?
    • 模块第二行还有Option VBASupport 1吗?这是HERE
    • 添加Option VBASupport 1 做到了。现在我的问题中的宏再次适用于最新的 LibreOffice。回顾一下:对于 LibreOffice Option VBASupport 1;对于 LibreOffice =7.* 我确实需要 Option VBASupport 1.
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多