Body zdarma Body zdarma
Využij podzimních slev a získej od nás až 40 % bodů zdarma! Více zde

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

Aktivity (4)
Avatar
Václav
Člen
Avatar
Václav:14. června 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. června 14:22
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!
Avatar
JerryM
Člen
Avatar
JerryM:21. června 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. června 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.