Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  SolidWorks
  mal wieder VBA (Steuerung von Excel)

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS
  
Im Fokus: CAD Automation & CPQE
Autor Thema:  mal wieder VBA (Steuerung von Excel) (5514 mal gelesen)
Kalle
Mitglied
Student


Sehen Sie sich das Profil von Kalle an!   Senden Sie eine Private Message an Kalle  Schreiben Sie einen Gästebucheintrag für Kalle

Beiträge: 706
Registriert: 14.04.2002

erstellt am: 20. Feb. 2003 15:49    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Aloah,

wie man aus anderen Postings von mir hier mitbekommen hat, arbeite ich seit neuestem sehr ausgiebig mit Tabellen. Ich nutze dabei die Fähigkeit von Excel zwischen Tabellen aus unterschiedlichen Dateien Verknüpfungen zu erstellen. Demzufolge habe ich in den DesignTable verweise auf Zellen in einer anderen Datei (Mastertabelle). Jetzt gibt es aber das Problem, dass wenn sich in der Mastertabelle was geändert hat die abhängigen Tabellen das nicht mitbekommen und von Hand aktualisiert werden müssen. Aber da Excel ja VBA unterstützt möchte ich dies automatisieren. Das heisst, dass ich ein Makro brauche, welches das DesignTable öffnet, aktualisiert und wieder schließt. Öffnen und schließen sind kein Problem, aber das aktualisieren kriege ich nicht hin. Im Klartext sieht mein Makro derzeit so aus (aus der APIProgrammier- und Anwendungsschnittstelle (Application Programming Interface)-Hilfe übernommen und gekürzt)

Sub main()

    'SolidWorks Objects
    Dim swApp As SldWorks.SldWorks
    Dim Model As ModelDoc2

    'The Model's design table
    Dim DTable As DesignTable
    Dim isGood As Boolean

    'Attach the VB program to SolidWorks and get the active model
    Set swApp = CreateObject("SldWorks.Application")
    Set Model = swApp.ActiveDoc

    'Get the Design Table from the Model
    Set DTable = Model.GetDesignTable
  'Activates the Design Table so that its cells can be accessed. The SolidWorks APIProgrammier- und Anwendungsschnittstelle (Application Programming Interface) only allows for reading data from the Design Table. We need to access the Excel APIProgrammier- und Anwendungsschnittstelle (Application Programming Interface) to modify it.

    isGood = DTable.Attach

  'If the Attach call fails, then inform the user and exit the subroutine
    If isGood = False Then
        MsgBox "Is nich! Irgendwas haut nich hin."
        Exit Sub
    End If

    'Load the Design Table into Excel in order to modify its cells
    Set XL = GetObject(, "Excel.application")

    HIER MUSS DIE AKTUALISIERUNG DER VERKNÜPFUNGEN REIN

    'Update the model to reflect the changes made to the Design Table
    DTable.UpdateModel
    'Dispose of the Excel Object
    XL.Quit
    'Deactivate the Design Table
    DTable.Detach
End Sub

Ich hab im Netz folgenden Code für zum automatischen Aktualisieren gefunden

ActiveWorkbook.UpdateLink Name:=ActiveWorkbook.LinkSources

Da sagt er mir aber was von Objekt erforderlich, wenn er an diese Zeile kommt.
Ich habs auch noch mit ein paar anderen Sachen versucht, die ich so gefunden habe, aber das war alles nur rumstümperei, da ich das ja bis heute noch nichtmal ansatzweise gut beherrsche. Weiss jemand wie ich die Sache trotzdem gebacken kriegen kann?

Tausend Dank.
Kalle

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

BerndB
Mitglied
Ingenieur


Sehen Sie sich das Profil von BerndB an!   Senden Sie eine Private Message an BerndB  Schreiben Sie einen Gästebucheintrag für BerndB

Beiträge: 616
Registriert: 28.09.2001

erstellt am: 20. Feb. 2003 17:00    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Kalle 10 Unities + Antwort hilfreich

Hallo Kalle,

In Excel kann ich einen Event wie eine Änderung direkt abfangen.
Vielleicht hilft der Weg, wenn ich in der Mastertabelle ein Excel Makro mit Change Event schreibe.

Wenn Zeile xy verändert ist dann offne alle anderen Tabellen und änder.

MfG

BerndB

[Diese Nachricht wurde von BerndB am 20. Februar 2003 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Kalle
Mitglied
Student


Sehen Sie sich das Profil von Kalle an!   Senden Sie eine Private Message an Kalle  Schreiben Sie einen Gästebucheintrag für Kalle

Beiträge: 706
Registriert: 14.04.2002

erstellt am: 20. Feb. 2003 17:19    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Aloah Bernd,

das wäre sicherlich eine Möglichkeit, aber im derzeitigen Stadium der Konstruktion nicht zweckmäßig, da bei weitem noch nicht alle Teile und Tabellen erstellt sind, und ich ja auch nicht sämtliche Tabellen aktualisieren muss, wenn sich im Endeffekt nur zwei oder drei zu ändern haben.

Vielleicht hat sonstwer noch 'ne Idee.

Trotzdem Danke.
Kalle

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Andreas Müller
Mitglied
Masch. Ing. HTL / Betriebsing. STV


Sehen Sie sich das Profil von Andreas Müller an!   Senden Sie eine Private Message an Andreas Müller  Schreiben Sie einen Gästebucheintrag für Andreas Müller

Beiträge: 1151
Registriert: 11.04.2001

erstellt am: 21. Feb. 2003 08:45    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Kalle 10 Unities + Antwort hilfreich

Hallo Kalle.

Ein morgentlicher Schnellschuss:

Du kannst doch einer Zelle in Mappe 2 einen Wert zuweisen der einen Wert aus Mappe 1 holt (ohne VBA):

Zelle = [Mappe1]Tabelle1!$A$1

Das wäre IMHOIn my humble opinion = Meiner bescheidenen Meinung nach der absolut einfachste und vermutlich auch der sicherste Weg. Wenn Du die Zellen per VBA fest miteinander verbindest, musst Du höllisch aufpassen, dass die Struktur der Tabellen nicht verändert werden (neue Spalte/Zeile einfügen)!

------------------
Gruss
Andreas

A+E Müller AG

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Kalle
Mitglied
Student


Sehen Sie sich das Profil von Kalle an!   Senden Sie eine Private Message an Kalle  Schreiben Sie einen Gästebucheintrag für Kalle

Beiträge: 706
Registriert: 14.04.2002

erstellt am: 21. Feb. 2003 09:53    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Aloah Andreas,

genau das machen die Zellen ja schon, aber wenn Mappe2 nicht geöffnet ist (und das ist nicht der Fall wenn ich die Tabelle in SolidWorks öffne), dann werden nicht zwangsläufig die Daten aus Mappe2 geholt sollte diese sich geändert haben. Hin und wieder werde ich allerdings gefragt, ob ich die Tabelle aktualisieren möchte, aber hin und wieder eben auch nicht. Ein System habe ich noch nicht erkennen können, von daher brauche ich einen Weg, der die Tabelle hundertprozentig mit den externen Daten aktualisiert.

Sonst noch jemand?   

EDIT: Ein weiterer Versuch meinerseits. Man kann Tabellenblättern ja Prozeduren zuweisen. Da habe ich dann also folgendes versucht

Private Sub Worksheet_Change()
ActiveWorkbook.UpdateLink Name:=ActiveWorkbook.Sources
End Sub

Da bekomme ich aber immer 'nen Laufzeitfehler 91 (Objektvariable nicht zugeordnet...)
und ich muss mich durch tausend Dialoge klicken, wenn SolidWorks die Tabelle öffnet (von wegen Makros in der Tabelle und Viren und Sicherheit und und und). Ist alles sehr unangenehm. Irgendwie muss es doch auch so gehen.

[Diese Nachricht wurde von Kalle am 21. Februar 2003 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Andreas Müller
Mitglied
Masch. Ing. HTL / Betriebsing. STV


Sehen Sie sich das Profil von Andreas Müller an!   Senden Sie eine Private Message an Andreas Müller  Schreiben Sie einen Gästebucheintrag für Andreas Müller

Beiträge: 1151
Registriert: 11.04.2001

erstellt am: 21. Feb. 2003 12:03    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Kalle 10 Unities + Antwort hilfreich

Hi Kalle.

..und wenn Du die Mastertabelle beim Öffnen der Subtabelle automatisch öffnest??

Private Sub Workbook_Open()

..Anweisung zum Öffnen der Mastertabelle...

End Sub

------------------
Gruss
Andreas

A+E Müller AG

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Fairchild
Mitglied



Sehen Sie sich das Profil von Fairchild an!   Senden Sie eine Private Message an Fairchild  Schreiben Sie einen Gästebucheintrag für Fairchild

Beiträge: 179
Registriert: 30.11.2000

erstellt am: 25. Feb. 2003 10:15    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Kalle 10 Unities + Antwort hilfreich

Hallo Kalle,
vieleicht kann ich dir helfen, hier ein Auszug aus meinem Script.


    'Modell öffnen
    Set Part = swApp.OpenDoc3(ModelPath, 1, 0, 0, 0, 1, OpenDocErrors)
    If OpenDocErrors <> 0 Then
        MsgBox "Fehler beim Öffnen des Teils.", vbCritical, "Programmabbruch"
        End
    End If
    '----------------------------------------------------------
    'in Part eingelagerte Excel Tabelle öffnen und regenerieren
    '----------------------------------------------------------
Set swApp = CreateObject("SldWorks.Application")
Set Part = swApp.ActiveDoc
Part.InsertFamilyTableEdit                  ' Tabelle öffnen
swApp.ActiveDoc.ActiveView.FrameState = 1
Part.CloseFamilyTable                      ' Tabelle schließen
swApp.ActiveDoc.ActiveView.FrameState = 1
Part.EditRebuild                            ' Teil neu aufbauen
Part.Save2 False                            ' Teil sichern

wenn es nicht funkt bitte melden

Grüße

------------------

christian

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2024 CAD.de | Impressum | Datenschutz