是否可以在 openoffice 的用户类型中包含 Sub? VBA

Posted

技术标签:

【中文标题】是否可以在 openoffice 的用户类型中包含 Sub? VBA【英文标题】:Is it possibile to include Sub inside the user-Type in openoffice? VBA 【发布时间】:2020-03-24 14:16:01 【问题描述】:

User-Type 是一种结构。我想知道我是否可以在里面放子声明。比如:

Type myType
  myParam1 As String
  myParam2 As Long
  ...
  Sub mySub(param)
    'here I want some code for printing/showing params value
  End Sub
End Type

我问是因为当数据位于 myType 的项目数组中时,我在打印 myParam 的值时遇到问题。在用 myType 项填充 myArr 后,声明

print myArr(i).myParam1

给我空字符串。

【问题讨论】:

此功能在 Microsoft VBA 中不存在,所以如果它在 LibreOffice VBA 中可用,我会感到惊讶。 请张贴reproducible code example 说明问题。此外,该语言称为 LibreOffice Basic,而不是仅适用于 Microsoft 的 VBA。 【参考方案1】:

要创建声明类型的数组,请务必使用Dim As New 语法。

Type myType
  myParam1 As String
  myParam2 As Long
End Type

Sub mySub
    Dim myArr(2) As New myType
    myArr(0).myParam1 = "A"
    myArr(0).myParam2 = 1
    myArr(1).myParam1 = "B"
    myArr(1).myParam2 = 2
    For i = 0 to Ubound(myArr) - 1
        Print myArr(i).myParam1
    Next
End Sub

至于在Type 语句中添加子程序,在the documentation 中是没有的。另一方面,这是 Python 不可或缺的一部分,这是最流行的 LibreOffice 脚本语言之一。

class myClass:
    myAttr1 = ""
    myAttr2 = 0
    def myFunc(self, param):
        self.myAttr2 = param
        print(self.myAttr1)

myArr = [myClass(), myClass()]
myArr[0].myAttr1 = "A"
myArr[0].myAttr2 = 1
myArr[1].myAttr1 = "B"
myArr[1].myAttr2 = 2
for myObj in myArr:
    myObj.myFunc(3)

【讨论】:

对我来说,Python 是数据分析的最佳选择。不幸的是,这段代码是 OpenOffice 文件中使用的宏的一部分,被许多普通用户复制和使用。这意味着他们的设备上没有 Python。 你确定有些用户的系统没有 Python 吗?大多数基于 unix 的系统都附带 Python,而基于 Windows 的 LibreOffice 发行版附带 Python。一般来说,我会假设如果系统有 LibreOffice,或者最新版本的 Apache OpenOffice,那么它可以运行 Python 宏。有时可能需要安装额外的软件包,但大多数情况下不需要。 这值得在另一台计算机上检查。

以上是关于是否可以在 openoffice 的用户类型中包含 Sub? VBA的主要内容,如果未能解决你的问题,请参考以下文章

是否可以在约束中包含 Core Data 实体类型?

Bootstrap:是不是可以在这样的列中包含行?

是否有一个 Excel 函数或脚本来查找和替换两个不同工作表中匹配的字段,并将其替换为第二个工作表中包含的另一个数据?

如何在 JavaScript 中包含 ejs 部分?

OpenOffice Calc 合并单元格属性

条件 ui:在 JSF 中包含并保留布局