是否可以在 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的主要内容,如果未能解决你的问题,请参考以下文章