我在使用 Libre office Calc 宏时遇到了一个小问题。
我使用了 libre office calc 宏教程中的代码,并根据我的需要进行了修改。
但是,我第一次运行它时它起作用了,但是第二天它就不起作用了。我尝试更改线路,启用Option VBAsupport 1
和 Option Compatible
打开和关闭,但是在启用支持的情况下,我得到的一切都#NULL?
回来了,而在禁用支持的情况下,我将返回“基本错误:未定义子功能”并带有指向线路的指针skaicius = Round(y)
- 可以理解,因为我禁用 VBA 支持。
注释 lineIf x(iRow, iCol) >= 0 Then TheSum = TheSum + "," + CStr(normalRound(x(iRow, iCol)))
时,代码可以工作,但如果没有注释行,代码就没有用。
经过一个小时的 CTRL-X 和 CTRL-V,禁用/启用不同的行 - 它有效!但我不添加也不删除任何行、变量等。
但是一旦我重新启动我的计算机,之前工作的代码就不再工作了
现在以某种方式工作的代码:
REM ***** BASIC *****
'Option VBASupport 1
'Option Compatible
Sub Main
end sub
Function PositiveSum(Optional x)
Dim TheSum As String
Dim iRow As Double
Dim iCol As Double
TheSum = "{"
If NOT IsMissing(x) Then
If NOT IsArray(x) Then
' If x > 0 Then TheSum = CStr(Round(x))
Else
For iRow = LBound(x, 1) To UBound(x, 1)
TheSum = TheSum +(x(iRow, LBound(x,2)))*100 +":["
For iCol = LBound(x, 2)+1 To UBound(x, 2)
If x(iRow, iCol) >= 0 Then TheSum = TheSum + "," + CStr(normalRound(x(iRow, iCol)))
Next
TheSum = TheSum + "],"
Next
End If
End If
PositiveSum = TheSum + "}.get(aukstis, )"
End Function
Function normalRound(Optional y)
Dim skaicius as Double
Dim skaicius2 as Double
skaicius = Round(y)
skaicius2 = y
If skaicius < skaicius2 and skaicius+0.5 < skaicius2 Then skaicius = skaicius+1
If skaicius > skaicius2 and skaicius-0.5 > skaicius2 Then skaicius = skaicius-1
normalRound = skaicius
End Function
问题:为什么代码会这样?为什么它现在可以工作(看着它 - 它根本不应该工作),但是在计算机重新启动后它不会工作,即使在那之前我不会改变任何东西?
该代码用于获取一系列单元格,并将它们附加到一个长字符串,因此我可以复制到其他代码。
编辑:
我正在调用函数PositiveSum
,=PositiveSum(A1:C3)
因为 A1:C3 是我的数组。
我不知道什么不起作用,这是我的问题。因为不断地使代码工作,我必须多次复制粘贴它,评论和取消评论它才能再次工作。当然,我错过了它每次都会中断的一些具体原因,但几周后我承认我未能找到原因/原因