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
|