[VBA/Visio] Exporteren naar Excel

Pagina: 1
Acties:

  • royco_100
  • Registratie: Januari 2006
  • Laatst online: 07-11 15:25

royco_100

Enthousiaste Tweaker

Topicstarter
Ik heb in Visio 2007 een tekening gemaakt met een aantal (zelfgemaakte) shapes. Ik ben pas net begonnen om een beetje met Visual Basic te werken, dus zoveel kennis heb ik er nog niet van.

De tekening:
Heel simpel gezien, 4 ruimtes met in elke ruimte 2 personen en 2 computers. Ook is er een knop toegevoegd die een macro start.
Met Microsoft Visual Basic heb ik een script dat in Excel een aantal tabellen maakt,
Kamernummer + namen personen in die ruimte en de computers in die ruimte.

Het script werkt wel, alles staat mooi in Excel, maar Visual Basic komt met een foutmelding :|
"Fout 91 tijdens uitvoering: Objectvariabele of blokvariabele With is niet ingesteld"

Het gaat om het volgende script
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
Public Sub exporttoexcel()

Dim xlsObj As Excel.Application
Dim shpObj As Visio.Shape
Dim selObj As Visio.Selection
Dim persObj As Visio.Shape
Dim i As Integer
Dim iRow As Integer

Set xlsObj = CreateObject("Excel.Application")
xlsObj.Visible = True
xlsObj.Workbooks.Open "c:\TEST.xls"

iRow = 1

     For Each shpObj In ActivePage.Shapes
        If shpObj.Master.Name = "RUIMTEmaster" Then    
          xlsObj.Worksheets(1).Cells(iRow, 1) = shpObj.Cells("Prop.Ruimte").ResultStr(visNoCast)

           iRow = iRow + 1
           Set selObj = shpObj.SpatialNeighbors(visSpatialContain, 0, 0)

               For i = 1 To selObj.Count

                    If selObj(i).Master.Name = "PERSOONmaster" Then
                    xlsObj.Worksheets(1).Cells(iRow, 2) = selObj(i).Cells("Prop.Persoon").ResultStr(visNoCast)

                    iRow = iRow + 1
                    
                    End If
                     Next i

            Set selObj = shpObj.SpatialNeighbors(visSpatialContain, 0, 0)
                
                                   For j = 1 To selObj.Count
                    
                                        If selObj(j).Master.Name = "COMPUTERmaster" Then
                                        xlsObj.Worksheets(1).Cells(iRow, 3) = selObj(j).Cells("Prop.Computer").ResultStr(visNoCast)
                    
                                        iRow = iRow + 1
                                        
                                        End If
                    
                                   Next j
               End If

     Next shpObj

End Sub


Public Sub CommandButton1_Click()
Call exporttoexcel
End Sub


Volgens foutopsporing zou de fout in deze regel moeten zitten..
"If shpObj.Master.Name = "RUIMTEmaster" Then"

De helpfunctie van Visual Basic heeft het over een fout met Set, dus ik dacht zelf aan iets met Set shpObj, alleen wat :P
Ik heb al redelijk wat zitten googelen, en een aantal dingen uitgeprobeert, maar verder kan ik ook niks meer bedenken..

Iemand een goed idee, ingeving, oplossing?? :)

  • Bolukan
  • Registratie: Oktober 2002
  • Laatst online: 01-12 12:05
Kun je een item krijgen met shpObj(1)? Misschien is shpObj.items(1) beter?
Als de item niet bestaat dan krijg je ook zo'n foutmelding. Dus als master niet bestaat, kun je property Name niet vragen.
Enne, vaak moet je van 0 tot count - 1 tellen en niet van 1 tot count.

Een van deze drie oplossingen nuttig?