Возможно ли включить Sub внутри User-Type в openoffice? VBA - PullRequest
0 голосов
/ 24 марта 2020

Тип пользователя - это вид структуры. Мне интересно, могу ли я иметь субделарацию внутри. Что-то вроде:

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

Я спрашиваю, потому что у меня проблема с печатью значения myParam, когда данные находятся в массиве элементов myType. После заполнения myArr элементами myType statment

print myArr(i).myParam1

дает мне пустую строку.

1 Ответ

0 голосов
/ 25 марта 2020

Чтобы создать массив объявленного типа, обязательно используйте синтаксис 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, его нет в документация . С другой стороны, это неотъемлемая часть 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)
...