IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: VBA třída vracející proměnnou vlastního typu

V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
Václav
Člen
Avatar
Václav:14.6.2019 14:22

Zdravím

Prosím o radu

Potřebuji zpracovávat ve VBA tabulky nacházející se v dokumentu Word

Mám definovanou vlastní proměnnou „Radek_t“ , která obsahuje hodnoty nacházející se v jednom řádku tabulky. Dále pak modul třídy „Tabulka_P3_Class“, kterému předám zpracovávaný dokument a číslo tabulky kterou chci zpracovat. V tomto modulu třídy je definováno pole „a_Radky()“ obsahující jednotlivé řádky. A já bych potřeboval poradit, jak toto pole dostanu ven. Představuji si to tak, že vytvořím objekt, kterému předám Dokument Word a číslo tabulky a on ve vlastnosti vrací pole řádků (vlastního typu) s daty z příslušné tabulky. Bohužel VBA vrací chybu: Only user-defined types defined in public object modules can be coerced to or from a variant or passed to late-cound functions.
Definice typu

Public Type Radek_t
    PorC As String
    KalVelPredmet As String
    JmRozMin  As String
    JmRozMinJedn  As String
    JmRozMax  As String
    JmRozMaxJedn  As String
    Parametr1  As String
End Type

Testovací funkce

Sub test()
    Dim t As New Tabulka_P3_Class
    Call t.NactiTabulku(ActiveDocument, 1)
    Dim v
    v = t.VratTab
End Sub

Modul třídy

Private Tbl As Table
Dim i As Integer
Dim a_Radky() As Radek_t

Function VratTab() As Variant
Dim pole()
VratTab() = a_Radky
End Function

Public Sub NactiTabulku(Doc As Document, ByVal CisloTabulky As Integer)
Dim PocRadek
Dim PocSloupcu
Dim Tbl As Table
Dim i As Integer

Set Tbl = Doc.Tables(CisloTabulky)

PocRadek = Tbl.Rows.count
PocSloupcu = Tbl.Columns.count
ReDim a_Radky(0 To PocRadek)

For i = 3 To PocRadek
    a_Radky(i).PorC = Tbl.Cell(i, 1).Range.text
    a_Radky(i).KalVelPredmet = Tbl.Cell(i, 2).Range.text
    a_Radky(i).JmRozMin = Tbl.Cell(i, 3).Range.text
    a_Radky(i).JmRozMinJedn = Tbl.Cell(i, 4).Range.text
    a_Radky(i).JmRozMax = Tbl.Cell(i, 6).Range.text
    a_Radky(i).JmRozMaxJedn = Tbl.Cell(i, 7).Range.text
    a_Radky(i).Parametr1 = Tbl.Cell(i, 8).Range.text
  Next

End Sub

Zkusil jsem: Vlastní typ "Radek_t " jsem definoval jak v moduly třídy tak v modulu kde je testovací funkce, ale nefunguje ani jedno

 
Odpovědět
14.6.2019 14:22
Avatar
JerryM
Člen
Avatar
JerryM:21.6.2019 11:56

a tak ta chyba ti říká že to musíš ten tvuj kod dát do samostatného modulu ...

 
Nahoru Odpovědět
21.6.2019 11:56
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 2 zpráv z 2.