| | | 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 / zitieren -->
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
Beiträge: 39 Registriert: 03.06.2004
|
erstellt am: 21. Jun. 2006 09:47 <-- editieren / zitieren --> Unities abgeben:
|
Ex-Mitglied
|
erstellt am: 21. Jun. 2006 17:08 <-- editieren / zitieren -->
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
Beiträge: 3794 Registriert: 15.02.2001
|
erstellt am: 21. Jun. 2006 18:17 <-- editieren / zitieren --> Unities abgeben:
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 / zitieren -->
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
Beiträge: 3794 Registriert: 15.02.2001
|
erstellt am: 23. Jun. 2006 23:21 <-- editieren / zitieren --> Unities abgeben:
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 / zitieren -->
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 / zitieren -->
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 >>)
|