Office Forum
www.Office-Loesung.de
Access :: Excel :: Outlook :: PowerPoint :: Word :: Office :: Wieder Online ---> provisorisches Office Forum <-
Shape Data aus Excel einlesen + ASK
zurück: Visio Objekt in Excel 2007 immer im Vordergrund weiter: Skalierung von Mastershapes Unbeantwortete Beiträge anzeigen
Neues Thema eröffnen   Neue Antwort erstellen     Status: Feedback Facebook-Likes Diese Seite Freunden empfehlen
Zu Browser-Favoriten hinzufügen
Autor Nachricht
LordFlo79
Im Profil kannst Du frei den Rang ändern


Verfasst am:
08. Jan 2010, 15:13
Rufname:

Shape Data aus Excel einlesen + ASK - Shape Data aus Excel einlesen + ASK

Nach oben
       

Hallo zusammen,
folgender VBA Code liest aus einer Exel-Datei Werte aus und schreibt sie in das Shapesheet eines Mastershapes. Das klappt soweit auch alles wunderbar. Nun gibt es im Shapesheet im Abschnitt "Shape Data" die Option "ASK". Hierbei wird beim herausziehen des Mastershapes auf das Zeichenblatt automatisch die Option "Daten zuordnen" des Kontextmenüs gestartet. Und hier setzt das Problem an. Wie kann man es bewerkstelligen, dass ich die Option "ASK" mit dem automatischen Füllen der hier ausgewählten variablen Liste kombinieren kann? D.h., nach dem das Mastershape auf das Zeichenblatt gesetzt wurde, soll sich der Dialog "Daten zuordnen" öffnen und die ausgefüllte variable Liste soll zur Verfügung stehen.
Code:
Sub datenzuordnung()
    Dim appExcel As Excel.Application
    Dim mappe As Excel.Workbook
    Dim blatt As Excel.Worksheet
    Dim zelle As Excel.Range
    Dim vsoShape1 As Visio.Shape
    Dim intPropRow2 As Integer
    Dim listeninhalt As String
    Dim zelleninhalt As String
    Dim anzzeilen As Integer
    Dim i As Integer

'ExcelObject erstellen
    Set appExcel = Excel.Application
'    appExcel.Visible = True
'ExcelDatei mit FFZ-Infos öffnen
    appExcel.Workbooks.Open FileName:="xxx"
    Set blatt = ActiveSheet
'Listeninhalt für ShapeData aus ExcelDatei mit FFZ-Infos auslesen
    listeninhalt = ""
    anzzeilen = Range("B" & ActiveSheet.Rows.Count).End(xlUp).Row
    For i = 2 To anzzeilen
        If i = anzzeilen Then
            zelleninhalt = blatt.Cells(i, 2) & " " & blatt.Cells(i, 3)
          Else
            zelleninhalt = blatt.Cells(i, 2) & " " & blatt.Cells(i, 3) & ";"
        End If
        listeninhalt = listeninhalt & zelleninhalt
    Next i
'ShapeData einfügen
    Set vsoShape1 = ActiveWindow.Selection.Item(1)
'    intPropRow2 = vsoShape1.AddRow(visSectionProp, visRowLast, visTagDefault)
    vsoShape1.CellsSRC(visSectionProp, intPropRow2, visCustPropsLabel).FormulaU = """FFZ"""
    vsoShape1.CellsSRC(visSectionProp, intPropRow2, visCustPropsType).FormulaU = "4" '4 = variable Liste
    vsoShape1.CellsSRC(visSectionProp, intPropRow2, visCustPropsFormat).FormulaU = """" & listeninhalt & """"
    vsoShape1.CellsSRC(visSectionProp, intPropRow2, visCustPropsLangID).FormulaU = "1031" '1031 = Deutsch
    vsoShape1.CellsSRC(visSectionProp, intPropRow2, visCustPropsCalendar).FormulaU = ""
    vsoShape1.CellsSRC(visSectionProp, intPropRow2, visCustPropsPrompt).FormulaU = ""
    vsoShape1.CellsSRC(visSectionProp, intPropRow2, visCustPropsValue).FormulaU = "INDEX(0,Prop.Row_1.Format)"
    vsoShape1.CellsSRC(visSectionProp, intPropRow2, visCustPropsSortKey).FormulaU = ""
'    vsoShape1.CellsSRC(visSectionProp, intPropRow2, visCustPropsAsk).FormulaForceU = "True"
'geöffnete Excel Tabelle schließen
    Workbooks("xxx").Close
End Sub
Danke für eure Hilfe
Jumpy
z.Zt. täglich besser in Visio (+VBA)


Verfasst am:
08. Jan 2010, 15:47
Rufname: Ralph


AW: Shape Data aus Excel einlesen + ASK - AW: Shape Data aus Excel einlesen + ASK

Nach oben
       

Ich verstehe nicht ganz das Problem. Wenn du das MasterShape doch schon mit dieser Liste versorgt hast, wieso steht sie dann nicht zur Verfügung, wenn du eine Instanz dieses MasterShapes als neues Shape auf das Zeichenblatt ziehst?

Oder soll dann jedesmal neu geguckt werden, ob sich die Excel-Liste verändert hat und die Auswahlliste soll dementsprechend angepasst werden?
LordFlo79
Im Profil kannst Du frei den Rang ändern


Verfasst am:
11. Jan 2010, 08:57
Rufname:

AW: Shape Data aus Excel einlesen + ASK - AW: Shape Data aus Excel einlesen + ASK

Nach oben
       

Richtig, es soll jedes mal aufs neue geschaut werden, ob sich die Excel Liste geändert hat.
Jumpy
z.Zt. täglich besser in Visio (+VBA)


Verfasst am:
11. Jan 2010, 09:34
Rufname: Ralph

AW: Shape Data aus Excel einlesen + ASK - AW: Shape Data aus Excel einlesen + ASK

Nach oben
       

In dem Fall,

schreibe eine neue VBA Prozedur mit ungefähr folgendem Rumpf:
Code:
Private Sub DieNeueProzedur(shp As Visio.Shape)

End Sub
Das Programm dazwischen sollte in etwa das sein, was du schon geschrieben hast, zumindest bis da, wo du die Excel-Liste fertig ausgelesen hast.
Dann weißt du ja, dass in dem Shape die ShapeData Zeile schon existiert und du willst ja nur die Liste in der Format-Spalte durch die neue Liste ersetzen, d.h. diese Zeile aus deinem alten Code noch:
Code:
    shp.CellsSRC(visSectionProp, intPropRow2, visCustPropsFormat).FormulaU = """" & listeninhalt & """"
shp ist dabei die Referenz auf das aktuell auf's Papier gezogene Shape und die kommt daher:

Im ShapeSheet des Mastershape musst du in der Sektion Events beim Ereignis DropShape noch folgendes in die Zelle eintragen:
Code:
=CALLTHIS(DieNeueProzedur)
Dies hat zur Folge, dass wenn eine Kopie dieses MasterShapes auf's Zeichenblatt gezogen wird, die neue Prozedur startet. Dabei bekommt sie automatisch (wg. der Callthis-Fkt.) eine Referenz auf das Shape, das die Prozedur aufruft.

Das Ganze ist also nicht an ASK gekoppelt sondern an ShapeDrop was OK ist, da ja beides mehr oder weniger gleichzeitig statt findet.
LordFlo79
Im Profil kannst Du frei den Rang ändern


Verfasst am:
12. Jan 2010, 16:15
Rufname:


AW: Shape Data aus Excel einlesen + ASK - AW: Shape Data aus Excel einlesen + ASK

Nach oben
       

LordFlo79 am 12. Jan 2010 um 10:03 hat folgendes geschrieben:
Hallo Jumpy,
vielen Dank schon mal für deine Hilfe, das klappt soweit auch wie ich mir das vorgestellt habe.
Es taucht jetzt nur noch ein kleines Problem auf, dass eher optischer bzw. bedienungstechnischer Art ist.
Wenn ich nun das Mastershape auf mein Zeichenblatt ziehe geht das Fenster zur Auswahl eines Datensatzes auf und die Auswahlliste ist auch richtig gefüllt. Nur schreibt Visio mir eine zusätzliche "0" in meine Auswahlliste rein. Diese "0" steht jedoch nicht in meiner Excel-Liste aus der die Auswahlliste der Shape-Daten gefüllt wird.
Ich weiß, dass das wohl an der Spalte "Value" in den Shape-Daten liegt, denn je nach dem was man in die Spalte "Value" schreibt, erfolgt ein entsprechender Eintrag in die Auswahlliste der Shape-Daten.
Wie kann ich Visio nun zwingen quasi keinen zusätzlichen Eintrag in die Liste einzufügen?

LordFlo79 am 12. Jan 2010 um 10:15 hat folgendes geschrieben:
Hallo Jumpy,
ich habe in der Spalte "Value" der Shape-Daten einfach "No Formula" eingetragen und jetzt stimmt die Liste auch in Gänze. Es wird zwar jetzt kein Standardwert in der Auswahlliste ausgewählt ohne einen zusätzlichen Eintrag in die Auswahlliste zu übernehmen, aber damit kann ich leben.
Vielen Dank dir nochmal.

Hallo zusammen,
es gibt ein weiteres Problem mit dem Füllen von Auswahllisten im Shape-Data aus Excel.
Folgender Code soll 2 im Shape-Sheet vorhandene Auswahllisten im Shape-Data aus Excel füllen:
Code:
Sub datenzuordnung(shp As Visio.Shape)
    Dim appExcel As Excel.Application
    Dim mappe As Excel.Workbook
    Dim blatt As Excel.Worksheet
    Dim zelle As Excel.Range
    Dim intPropRow2, intPropRow3 As Integer
    Dim listeninhalt As String
    Dim zelleninhalt As String
    Dim anzzeilen As Integer
    Dim i As Integer

'ExcelObject erstellen
    Set appExcel = Excel.Application
'    appExcel.Visible = True
'ExcelDatei mit FFZ-Infos öffnen
    appExcel.Workbooks.Open FileName:="FFZ.xls"
    Set blatt = ActiveSheet
'Listeninhalt für ShapeData aus ExcelDatei mit FFZ-Infos auslesen
    listeninhalt = ""
    anzzeilen = Range("B" & ActiveSheet.Rows.Count).End(xlUp).row
    For i = 2 To anzzeilen
        If i = anzzeilen Then
            zelleninhalt = blatt.Cells(i, 2) & " " & blatt.Cells(i, 3)
          Else
            zelleninhalt = blatt.Cells(i, 2) & " " & blatt.Cells(i, 3) & "; "
        End If
        listeninhalt = listeninhalt & zelleninhalt
    Next i
'ShapeData einfügen
    shp.CellsSRC(visSectionProp, intPropRow2, visCustPropsFormat).FormulaU _
                                                  = """" & listeninhalt & """"
'geöffnete Excel Tabelle schließen
    Workbooks("FFZ.xls").Close
'-----------------------------------------------------------------------------
'ExcelDatei mit Mitarbeiter-Infos öffnen
    appExcel.Workbooks.Open FileName:="yyy.xls"
    Set blatt = ActiveSheet
'Listeninhalt für ShapeData aus ExcelDatei mit Mitarbeiter-Infos auslesen
    listeninhalt = ""
    anzzeilen = Range("A" & ActiveSheet.Rows.Count).End(xlUp).row
    For i = 2 To anzzeilen
        If i = anzzeilen Then
            zelleninhalt = blatt.Cells(i, 1) & " " & blatt.Cells(i, 2) _
                         & "(" & blatt.Cells(i, 3) & ")"
          Else
            zelleninhalt = blatt.Cells(i, 1) & " " & blatt.Cells(i, 2) _
                         & "(" & blatt.Cells(i, 3) & ")" & "; "
        End If
        listeninhalt = listeninhalt & zelleninhalt
    Next i
'ShapeData einfügen
    intPropRow3 = 1
    shp1.CellsSRC(visSectionProp, intPropRow3, visCustPropsFormat).FormulaU _
                                                  = """" & listeninhalt & """"
    'geöffnete Excel Tabelle schließen
    Workbooks("yyy.xls").Close
End Sub
Der Shape-Data Dialog wird über "ASK" aufgerufen und soll per Makro über die "Event-Drop" Sektion gefüllt werden. Das Problem ist nun folgendes.
Die erste Auswahlliste "FFZ" wird fehlerfrei gefüllt, die zweite jedoch gar nicht. Breche ich den Shape-Data Dialog ab und rufe ihn manuell erneut auf, sind beide Auswahllisten richitig gefüllt. D.h. das Visio nach dem Füllen der ersten Auswahlliste quasi eine Pause im Makro einlegt, weil der Shape-Data Dialog auf eine Eingabe wartet.
Wie kann man ich es nun realisieren, dass direkt beide Auswahllisten gefüllt sind?
Ich danke euch für eure Hilfe.
Jumpy
z.Zt. täglich besser in Visio (+VBA)


Verfasst am:
12. Jan 2010, 18:08
Rufname: Ralph

AW: Shape Data aus Excel einlesen + ASK - AW: Shape Data aus Excel einlesen + ASK

Nach oben
       

Hallo, mach mal erst 2 Variablennamen für Liste1 und Liste2.
Dann füll die in Excell.
Schließe Excell.
Dann erst weise beide Listen ihren Reihen zu.

Wie siehts dann aus?
Gast



Verfasst am:
13. Jan 2010, 11:07
Rufname:

AW: Shape Data aus Excel einlesen + ASK - AW: Shape Data aus Excel einlesen + ASK

Nach oben
       

Hallo,
das hat leider auch nicht geklappt. ich habe das Gefühl das Visio das Makro quasi anhält um auf eine Reaktion zu warten nachdem die erste Liste gefüllt wurde. Vielleicht gibt es noch eine andere Idee?
Jump(y)
Gast


Verfasst am:
13. Jan 2010, 13:16
Rufname:

AW: Shape Data aus Excel einlesen + ASK - AW: Shape Data aus Excel einlesen + ASK

Nach oben
       

Jump(y) am 13. Jan 2010 um 11:56 hat folgendes geschrieben:
Versuch mal am Ende der Prozedur eine neue zu starten, die dann die zweite Liste füllt. Vielleicht umgeht das das Problem.


Probier aber erst mal: Alternativ kannst du auch ASK auf False setzen und das öffnen dieses Fensters stattdessen am Ende mit fogendem Befehle erzwingen:
Code:
    shp.DoCmd 1312
Ich mein Befehl 1312 öffnet das ShapeDaten Formular genau wie ASK das machen würde. DoCmd sit glaub ich eine Eigenschaft von Shape, da aber im Zweifel erst mal in der Hilfe schauen, was da zu DoCmd steht.

Sorry für den Doppelpost, aber kann mich gerade nicht einloggen. Hab aber nochmal nachgeschaut, es muss heißen:
Code:
    Application.DoCmd 1312
Da DoCmd eine Methode des Application Objekts ist.
LordFlo79
Im Profil kannst Du frei den Rang ändern


Verfasst am:
13. Jan 2010, 14:12
Rufname:

AW: Shape Data aus Excel einlesen + ASK - AW: Shape Data aus Excel einlesen + ASK

Nach oben
       

Hallo Jumpy,
mit der Methode Application.DoCmd funktioniert es sehr gut. Man muss zwar jetzt die Auswahl in der ersten Liste mit Ok bestätigen, aber dann wird direkt die zweite Liste eingeblendet deren Auswahl man dann wieder mit OK bestätigen muss, aber damit kann ich sehr gut leben. Vielen vielen Dank für deine Tipps, die haben mir echt geholfen.
Jumpy
z.Zt. täglich besser in Visio (+VBA)


Verfasst am:
14. Jan 2010, 09:19
Rufname: Ralph

AW: Shape Data aus Excel einlesen + ASK - AW: Shape Data aus Excel einlesen + ASK

Nach oben
       

Das sollte aber eigentlich nicht so sein.
Wenn du ASK in beiden Reihen abschaltest und natürlich muss Invisible auf False stehen, und du dann deine erste Liste in Excel füllst und der Reihe zuweist, dann deine zweite Liste in Excel füllst und der zweiten Reihe zuweist und dann mittels DoCmd(1312) das Formular zur Eingabe von ShapeDaten öffnest, dann müssten da beide Reihen die aktuelle Liste haben und in beiden Reihen müsstest du was auswählen können, um dann mit nur ein mal OK abschließend das Fenster zu schließen.
LordFlo79
Im Profil kannst Du frei den Rang ändern


Verfasst am:
15. Jan 2010, 14:50
Rufname:


AW: Shape Data aus Excel einlesen + ASK - AW: Shape Data aus Excel einlesen + ASK

Nach oben
       

Hallo Jumpy,
ja du hast recht so gehts auch Smile Ich war zwar der Meinung das so schon probiert zu haben, aber wahrscheinlich hab ich irgendwas verbockt beim einstellen. Danke dir vielmals für deine guten Tipps, die haben mir echt geholfen.
Neues Thema eröffnen   Neue Antwort erstellen Alle Zeiten sind
GMT + 1 Stunde

Diese Seite Freunden empfehlen

Seite 1 von 1
Gehe zu:  
Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum nicht posten
Du kannst Dateien in diesem Forum herunterladen

Verwandte Themen
Forum / Themen   Antworten   Autor   Aufrufe   Letzter Beitrag 
Keine neuen Beiträge MS Project Forum: Spalte via VBA einlesen, verarbeiten und in "Dauer" 1 killing joke 902 18. Sep 2011, 20:13
bhenhapl Spalte via VBA einlesen, verarbeiten und in "Dauer"
Keine neuen Beiträge MS Visio Forum: Shape formatieren, Verbinder soll Liniensprung machen 1 Stroika 3936 16. Sep 2010, 12:40
van Shape formatieren, Verbinder soll Liniensprung machen
Keine neuen Beiträge MS Visio Forum: Visio Shape Daten aktualisieren 0 flugfaust 2223 20. Aug 2010, 12:50
flugfaust Visio Shape Daten aktualisieren
Keine neuen Beiträge MS Visio Forum: Zellen eines Shape Sheet mit anderem Shape Sheet verknüpfen 4 MSVisio'10 1612 01. Jul 2010, 08:35
Gast Zellen eines Shape Sheet mit anderem Shape Sheet verknüpfen
Keine neuen Beiträge MS Visio Forum: Master Shape: Gruppiert & ShapeData in unterlagertem Sha 0 sam92 1214 30. Jun 2010, 12:00
sam92 Master Shape: Gruppiert & ShapeData in unterlagertem Sha
Keine neuen Beiträge MS Visio Forum: Pflichtfeld in Shape Data 5 LordFlo79 797 21. Jun 2010, 22:55
Yacine Pflichtfeld in Shape Data
Keine neuen Beiträge MS MapPoint Forum: Koordinaten in Mappoint einlesen 0 antonella0511 2304 07. Jan 2010, 23:15
antonella0511 Koordinaten in Mappoint einlesen
Keine neuen Beiträge MS Visio Forum: Shapegröße in Abhängigkeit eines anderen Shape anpassen... 16 Mexxchen 3636 16. Nov 2009, 10:18
Mexxchen Shapegröße in Abhängigkeit eines anderen Shape anpassen...
Keine neuen Beiträge MS Visio Forum: Shape verspringt bei Größenänderung 0 Gast 385 17. Sep 2009, 16:18
Gast Shape verspringt bei Größenänderung
Keine neuen Beiträge MS Visio Forum: Shape Bennung ändern? 0 Marc.Weidner 583 30. Jul 2009, 11:31
Marc.Weidner Shape Bennung ändern?
Keine neuen Beiträge MS Visio Forum: Form eines Textfeld festlegen zur Anpassung an Shape 1 count 1399 10. März 2009, 23:28
cyrill.sneer Form eines Textfeld festlegen zur Anpassung an Shape
Keine neuen Beiträge MS Visio Forum: Shape informationen auf mehrere Blätter verteilen 0 Gastuser 1698 06. Feb 2009, 12:51
Gastuser Shape informationen auf mehrere Blätter verteilen
 

----> Diese Seite Freunden empfehlen <------ Impressum - Besuchen Sie auch: Microsoft Excel-Formeln