Třída ve VBA vracející proměnnou vlastního typu   otázka

VB6/VBA, Office

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 ' tabulka s nactenými daty

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

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

pocTab = Doc.Tables.count
If CisloTabulky = 0 Then
    MsgBox ("Tabulka nemůže mít číslo 0.")
    Exit Sub
End If
If CisloTabulky > pocTab Then
    MsgBox ("Zadané číslo tabulky: " + CisloTabulky + " je větší než počet tabulek v dokumentu(" + pocTab + ")")
    Exit Sub
End If
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
nahlásit spamnahlásit spam 0 odpovědětodpovědět

Vypadá, že Public Type Radek_t je definován v modulu třídy.

Nechcete zkusit přesunout jeho definici do standard modulu?

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Co to říkalo, nemohl jsem pochopit.

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback