Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  Inventor VBA
  Dateipfad auslesen

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 Autodesk Produkte
Autor Thema:  Dateipfad auslesen (2328 mal gelesen)

Ex-Mitglied

erstellt am: 20. Jun. 2006 16:01    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hallo Forumianer,

ich habe folgendes Problem:

ich habe eine Exceltabelle mit einem Bauteil verknüpft und lese daraus Parameter ein. Für ein Makro brauche ich aber auch gewisse Werte aus dieser Tabelle. Da ich aber nicht immer den kompletten Dateipfad zusätzlich über ein Eingabefenster eingeben wollte, habe ich mir ein Makro geschrieben, welches den Dateipfad der verknüpften Exceltabelle ausliest.

Das sieht folgendermaßen aus:

Dim oPartDoc As Inventor.PartDocument
Set oPartDoc = ThisApplication.ActiveDocument
Dim oParms As Parameters
Set oParms = oPartDoc.ComponentDefinition.Parameters
Dim oParmTable As ParameterTable
Set oParmTable = oParms.ParameterTables.Item(1)
Name = oParmTable.FileName

„Name“ ist vorher schon durch Public als String definiert. Wird aber nur einmal zugewiesen und zwar hier und wird auch nirgends anders verwendet.
Mit Hilfe der Variable Name, öffne ich mir dann die Exceltabelle. Das sieht dann so aus:

Dim oExcel As Excel.Application
Set oExcel = GetObject(, "Excel.Application")
Set oExcel = CreateObject("Excel.Application")
oExcel.Workbooks.Open (Name)
oExcel.Worksheets("Abfrage").Select

Jetzt zu meinem Problem:

Wenn ich das Bauteil mit einer anderen Tabelle verknüpfe (über „Dritte“/“Quelle ändern“ und das Makro wieder durchlaufen lasse, dann ändert sich der Wert für Name nicht. Und wenn ich mich auf den Kopf stelle. Es wird immer wieder der alte Tabellenname ausgelesen. Was allerdings noch passiert ist, dass man jetzt annehmen könnte, dass jetzt wieder die alte Tabelle ausgelesen würde. Schließlich ist der Name ja bekannt, auch wenn er eben nicht richtig ist. Das ist aber auch nicht der Fall. Die Variablen, die ich mit dem Makro einlesen möchte, bleiben leer. Wenn ich wiederum mit der Verknüpfung wieder auf die alte Tabelle verweise, dann werden die Werte wieder eingelesen.

Kann mir vielleicht irgendjemand sagen, wieso das so ist. Ich bin hier echt am verzweifeln. Es ist echt wichtig. Ich habe das Gefühl, dass es vielleicht nichts mit dem Makro zu tun hat, sondern eher, dass die alte Tabelle noch irgendwo hinterlegt ist und ich sozusagen immer den falschen Pfad auslese.

Vielen Dank im voraus, CADHeiner

P164
Mitglied



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

Beiträge: 39
Registriert: 03.06.2004

erstellt am: 21. Jun. 2006 09:47    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

Hallo CADHeiner,

ein Lösung hätte ich:
änder die Tabelle via Macro, wie in nächter Zeile

oParmTable.FileName = "c:\xyz\TabelleNeu.XLS"

------------------
das Leben ist schön, meint Ingolf

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


Ex-Mitglied

erstellt am: 21. Jun. 2006 17:08    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hallo

Andersrum würde das natürlich auch gehen. Im Prinzip ist mir das egal. Aber ich möchte nicht immer in einer Eingabebox den ganzen Dateipfad angeben. Gibt es denn einen Befehl, wo sich ein Explorerfenster öffnet, in dem man dann die Datei auswählen kann?

mfg, cadheiner

lbcad
Ehrenmitglied V.I.P. h.c.
Dipl.-Ing. Maschinenbau und CAD-Trainer



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

Beiträge: 3794
Registriert: 15.02.2001

erstellt am: 21. Jun. 2006 18:17    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

hier bitte - aus der Hilfe:

Code:

Public Sub TestFileDialog()
    ' Create a new FileDialog object.
    Dim oFileDlg As FileDialog
    Call ThisApplication.CreateFileDialog(oFileDlg)
   
    ' Define the filter to select part and assembly files or any file.
    oFileDlg.Filter = "Inventor Files (*.iam;*.ipt)|*.iam;*.ipt|All Files (*.*)|*.*"
   
    ' Define the part and assembly files filter to be the default filter.
    oFileDlg.FilterIndex = 1
   
    ' Set the title for the dialog.
    oFileDlg.DialogTitle = "Open File Test"
   
    ' Set the initial directory that will be displayed in the dialog.
    oFileDlg.InitialDirectory = "C:\Temp"
       
    ' Set the flag so an error will be raised if the user clicks the Cancel button.
    oFileDlg.CancelError = True
   
    ' Show the open dialog.  The same procedure is also used for the Save dialog.
    ' The commented code can be used for the Save dialog.
    On Error Resume Next
    oFileDlg.ShowOpen
'    oFileDlg.ShowSave
   
    ' If an error was raised, the user clicked cancel, otherwise display the filename.
    If Err Then
        MsgBox "User cancelled out of dialog"
    ElseIf oFileDlg.FileName <> "" Then
        MsgBox "File " & oFileDlg.FileName & " was selected."
    End If
End Sub


------------------
Gruß Lothar

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

Während man es aufschiebt, verrinnt das Leben.
—Lucius Annaeus Seneca (ca. 4 v. Chr - 65 n. Chr.)

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


Ex-Mitglied

erstellt am: 22. Jun. 2006 17:14    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hallo,

das mit dem Explorer funktioniert und mein Makro liest auch die benötigten Werte aus. Das sieht bei mir so aus:

Dim oFileDlg As FileDialog
Call ThisApplication.CreateFileDialog(oFileDlg)
oFileDlg.Filter = "Excel Files(*.xls)"
oFileDlg.FilterIndex = 1
oFileDlg.DialogTitle = "Exceltabelle einlesen"
oFileDlg.InitialDirectory = "P:\"
oFileDlg.CancelError = True
oFileDlg.ShowOpen
If Err Then
MsgBox ("Abbruch durch Benutzer")
ElseIf oFileDlg.FileName <> "" Then
MsgBox ("Exceltabelle " & oFileDlg.FileName & " wurde eingelesen.")
End If

Ich habe es auch hinbekommen, diese Exceltabelle mit meinem Bauteil zu verknüpfen. Das habe ich so gelöst:

Name = oFileDlg.FileName
Dim oParms As Parameters
Set oParms = oPartDoc.ComponentDefinition.Parameters.ParameterTables.AddExcelTable(Name, "A200", True)
oPartDoc.Rebuild

Jetzt aber folgendes Problem. Ich habe die Originalverknüpfung im Modellbrowser unter „Dritte“ gelöscht. Sie ist aber immer noch in den Parametern vorhanden (In der Schaltflächenleiste unter „Parameter“
Wenn ich auch dort die Verknüpfung lösche, wandern diese Parameter in die Benutzerparameter, welche wiederum mit den Modellparametern verknüpft sind. Dadurch kann ich die Benutzerparameter nicht löschen. Wenn ich jetzt den Verweis zu der neuen Tabelle zuweise, werden nur die Parameter eingelesen, die noch nicht in den Benutzerparametern aufgeführt sind. Diese ändern sich also nicht. Wenn ich das Bauteil nun aktualisiere, tut sich fast nichts, da ja nur die wenigen Parameter, die aus der Exceltabelle übernommen wurden sich auf das Modell auswirken.
Ich müsste also den Befehl wissen, wie man unter „Dritte“ die „Quelle ändert“ und nicht die alte löscht und eine neue zuweist.
Gibt es dafür vielleicht auch eine Lösung. Ich hoffe, ich habe mich weitestgehend Verständlich ausgedrückt.

Mit freundlichen Grüßen, CADHeiner

lbcad
Ehrenmitglied V.I.P. h.c.
Dipl.-Ing. Maschinenbau und CAD-Trainer



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

Beiträge: 3794
Registriert: 15.02.2001

erstellt am: 23. Jun. 2006 23:21    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

Zitat:
Original erstellt von CADHeiner:
[B... Ich hoffe, ich habe mich weitestgehend Verständlich ausgedrückt.
...[/B]


ich denke schon - nur - heute kann ich nicht mehr darüber nachdenken  . Ich habe nämlich zuvor an das gleiche gedacht, an das Jürgen auch häufiger denkt:  
.

------------------
Gruß Lothar

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

Während man es aufschiebt, verrinnt das Leben.
—Lucius Annaeus Seneca (ca. 4 v. Chr - 65 n. Chr.)

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


Ex-Mitglied

erstellt am: 24. Jun. 2006 09:30    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hallo,

ich möchte natürlich heute, an so einem wichtigen Tag niemanden wegen meiner Probleme vom Bier und vom Deutschen Sieg gegen Schweden abhalten.
Aber wenn du dir im Laufe der nächsten Woche vielleicht mal ne Minute Zeit nehmen könntest, dann wäre das wirklich nett von dir.

Ich hingegen kann das Spiel nicht sehen, da ich zu der Zeit entweder noch im Flugzeug sitze oder auf der Autobahn bin. Man sollte eben bevor man eien Flug bucht, mal in den Spielpan sehen...  

mfg, cadheiner


Ex-Mitglied

erstellt am: 03. Jul. 2006 16:56    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hallo Forumianer,

Ich habe das Problem lösen können und wollte es natürlich der Allgemeinheit nicht vorenthalten. Also so sieht der Code aus, um die unter „Dritte“ angegebene Exceltabelle auf die gerade eingelesene umzustellen.

Dim oParamTableFiles As ParameterTables
Set oParamTableFiles = oParms.ParameterTables

Dim oParamTableFile As ParameterTable

    For Each oParamTableFile In oParamTableFiles
        If oParamTableFile.FileName <> oFileDlg.FileName Then
            oParamTableFile.FileName = oFileDlg.FileName
        End If
    Next

Mit freundlichen Grüßen, Heiner

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)2023 CAD.de | Impressum | Datenschutz