Autor
|
Thema: Makro über txt-Datei steuern ? (2606 mal gelesen)
|
3.1415926535 Mitglied
Beiträge: 59 Registriert: 20.02.2004
|
erstellt am: 11. Nov. 2004 12:29 <-- editieren / zitieren --> Unities abgeben:
Kann ich mit einem Makro bestimmte Werte aus einer Textdatei auslesen? Ich versuche so eine Art ConfigFile.Txt zu erstellen, in der ich bestimmte Werte von Variablen angebe. Ich möchte dadurch erreichen, dass der Benutzer nicht mehr die Eingaben über Inputboxes tätigen muss, sondern den ConfigFile nach seinen Wünschen modifiziert und das Makro dann ohne Benutzerführung laufen kann. Viele Grüße, Pi Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
EmilioSanchez Mitglied
Beiträge: 70 Registriert: 02.11.2003 Intel I7 4700MQQ 24GB Win10 Pro 64-Bit Catia V5 R19/R26/28/29
|
erstellt am: 11. Nov. 2004 16:01 <-- editieren / zitieren --> Unities abgeben: Nur für 3.1415926535
Hallo Pi, mit dem Modul im Dateianhang kannst du .INI Dateien auslesen wie z.B. win.ini usw. Voraussetzung: Du arbeitest mit CATVBA Folgende vorgehensweise: 1. Modul ModIniDatei (siehe Anhang) in dein Projekt importieren 2. Eine INI Datei erstellen z. B. c:\temp\test.ini Inhalt der Datei z.B.: [Beispielkapitel] Beispielwert = 5 3. Mit diesem Code liest du dann den Wert vom Beispielwert aus dem Beispielkapitel auf eine Variable: Variable = ModIniDatei.GetIniValue("Beispielkapitel", "Beispielwert", "c:\temp\test.ini" ) Du kannst die INI Datei auch beschreiben: ModIniDatei.WriteIniValue "Beispielkapitel", "Beispielwert", Neuer Wert, "c:\temp\test.ini" C4N Bernd Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Peter91 Mitglied
Beiträge: 39 Registriert: 12.10.2015 Catia V5-6R2014 Windows 7 VBA 7.1
|
erstellt am: 21. Nov. 2015 16:20 <-- editieren / zitieren --> Unities abgeben: Nur für 3.1415926535
Hallo zusammen, versuche gerade ein INI Datei auszulesen. Was muss ich an folgendem Code ändern damit es funktioniert?
Code: Sub CATMain()Dim Variable As String Variable = ModIniDatei.GetIniValue("Beispielkapitel", "Beispielwert", "C:\Users\Peter\Documents\test.ini") Call MsgBox(Variable) End Sub
Gruß Peter
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
joehz Moderator Freiberuflicher Konstrukteur
Beiträge: 1057 Registriert: 25.11.2006 Win7 Pro 64 + Ubuntu + Irix6.5.20 Dell Precision M6600 i7-2960XM 2.7GHz 16GB NVidia Quadro M5010 Catia V5R19 VB6Pro.SP6/VBA 6.5.1053
|
erstellt am: 21. Nov. 2015 16:42 <-- editieren / zitieren --> Unities abgeben: Nur für 3.1415926535
|
Peter91 Mitglied
Beiträge: 39 Registriert: 12.10.2015 Catia V5-6R2014 Windows 7 VBA 7.1
|
erstellt am: 21. Nov. 2015 22:47 <-- editieren / zitieren --> Unities abgeben: Nur für 3.1415926535
|
joehz Moderator Freiberuflicher Konstrukteur
Beiträge: 1057 Registriert: 25.11.2006 Win7 Pro 64 + Ubuntu + Irix6.5.20 Dell Precision M6600 i7-2960XM 2.7GHz 16GB NVidia Quadro M5010 Catia V5R19 VB6Pro.SP6/VBA 6.5.1053
|
erstellt am: 21. Nov. 2015 22:52 <-- editieren / zitieren --> Unities abgeben: Nur für 3.1415926535
Zitat: Original erstellt von Peter91: Der Inhalt der INI ist:[Beispielkapitel] Beispielwert = 5 Das müsste doch so stimmen oder?
Leider nein. Inis ohne Leerstellen, also [Beispielkapitel] Beispielwert=5 Leerzeilen sind OK. Die werden ignoriert. Warum machst Du's nicht über die Registy (SaveSetting)? Tschau, Joe ------------------ Inoffizielle Catia Hilfeseite Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Peter91 Mitglied
Beiträge: 39 Registriert: 12.10.2015 Catia V5-6R2014 Windows 7 VBA 7.1
|
erstellt am: 23. Nov. 2015 16:04 <-- editieren / zitieren --> Unities abgeben: Nur für 3.1415926535
Hallo Joe, Funktioniert leider immer noch nicht, es kommt immer der Fehler "Run-time error424: Object required Was meinst du mit Registy (SaveSetting)? Gruß Peter
[Diese Nachricht wurde von Peter91 am 23. Nov. 2015 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
joehz Moderator Freiberuflicher Konstrukteur
Beiträge: 1057 Registriert: 25.11.2006 Win7 Pro 64 + Ubuntu + Irix6.5.20 Dell Precision M6600 i7-2960XM 2.7GHz 16GB NVidia Quadro M5010 Catia V5R19 VB6Pro.SP6/VBA 6.5.1053
|
erstellt am: 23. Nov. 2015 16:17 <-- editieren / zitieren --> Unities abgeben: Nur für 3.1415926535
Hi Peter, Zitat:
Funktioniert leider immer noch nicht, es kommt immer der Fehler "Run-time error424: Object required
Bedeutet meistens, dass irgendwo ein 'Set' fehlt/zuviel ist. Zitat:
Was meinst du mit Registy (SaveSetting)?
Programmierst Du mt dem VBA-Editor? Dann such bitte in der Online-Hilfe nach 'SaveSetting'. Tschau, Joe ------------------ Inoffizielle Catia Hilfeseite Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Peter91 Mitglied
Beiträge: 39 Registriert: 12.10.2015 Catia V5-6R2014 Windows 7 VBA 7.1
|
erstellt am: 23. Nov. 2015 17:01 <-- editieren / zitieren --> Unities abgeben: Nur für 3.1415926535
|
joehz Moderator Freiberuflicher Konstrukteur
Beiträge: 1057 Registriert: 25.11.2006 Win7 Pro 64 + Ubuntu + Irix6.5.20 Dell Precision M6600 i7-2960XM 2.7GHz 16GB NVidia Quadro M5010 Catia V5R19 VB6Pro.SP6/VBA 6.5.1053
|
erstellt am: 23. Nov. 2015 17:14 <-- editieren / zitieren --> Unities abgeben: Nur für 3.1415926535
Hi Peter, VB ohne Online-Hilfe? Hab nicht gewusst, dass sich das unabhängig voneinander installieren läßt. Warum versuchst Du nicht mal zuerst welche in eine ini zu schreiben? Danach sollte das Format klar sein. Ein Beispiel aus dem Api-Guide: http://allapi.mentalis.org/
Code:
'This sample was submitted by Robin (rbnwares@edsamail.com.ph) 'Visit his site at http://members.fortunecity.com/rbnwares1 Private Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpString As Any, ByVal lpFileName As String) As Long Private Declare Function GetPrivateProfileInt Lib "kernel32" Alias "GetPrivateProfileIntA" (ByVal lpApplicationName As String, ByVal lpKeyName As String, ByVal nDefault As Long, ByVal lpFileName As String) As Long Private Sub Form_Load() 'Sample for reading a numbers directly on the INI file 'Write a number 55 on the sample.ini to be read WritePrivateProfileString "Sample", "Sample", "55", App.Path & "\sample.ini" 'Then, read the stored number 'No need to convert the value returned MsgBox GetPrivateProfileInt("Sample", "Sample", 0, App.Path & "\sample.ini") End Sub
Das beispiel ist für VB6 gedacht. Für VBA musst Du's ein wenig umschreiben. Tschau, Joe ------------------ Inoffizielle Catia Hilfeseite Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Peter91 Mitglied
Beiträge: 39 Registriert: 12.10.2015 Catia V5-6R2014 Windows 7 VBA 7.1
|
erstellt am: 24. Nov. 2015 19:45 <-- editieren / zitieren --> Unities abgeben: Nur für 3.1415926535
Ich habe probiert das Beispiel umzuschreiben, jedoch hat es bis jetzt leider noch nicht richtig funktioniert. (VBA- Anfänger ) Code: Sub CATMain()Dim Datei As File Set Datei = CATIA.FileSystem.GetFile("C:\Users\Peter\Documents\test.ini") Dim Strom As TextStream Set Strom = Datei.OpenAsTextStream("ForReading") Dim Zeile1 As String Zeile1 = Strom.ReadLine MsgBox (Zeile1)
Strom.Close End Sub
Mit diesem Code bekomme ich die erste Zeile ausgelesen, allerdings ist das nicht die richtige Art und Weise Ini's auszulesen. Weiß jemand wie ich das "getprivateprofilestring" einbauen muss, bzw wie ich die Ini richtig auslesen kann? Gruß Peter
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
joehz Moderator Freiberuflicher Konstrukteur
Beiträge: 1057 Registriert: 25.11.2006 Win7 Pro 64 + Ubuntu + Irix6.5.20 Dell Precision M6600 i7-2960XM 2.7GHz 16GB NVidia Quadro M5010 Catia V5R19 VB6Pro.SP6/VBA 6.5.1053
|
erstellt am: 24. Nov. 2015 19:57 <-- editieren / zitieren --> Unities abgeben: Nur für 3.1415926535
Hi Peter, zu ändern war: - der Name der Sub: FormLoad -> CatMain - der Name der ini: "\sample.ini" -> "C:\Users\Peter\Documents\test.ini" - eventuell müssen die Deklarationen angepasst werden: VBA6 -> VBA7 Für VBA6 müsst's so funktionieren:
Code:
'This sample was submitted by Robin (rbnwares@edsamail.com.ph) 'Visit his site at http://members.fortunecity.com/rbnwares1Private Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpString As Any, ByVal lpFileName As String) As Long Private Declare Function GetPrivateProfileInt Lib "kernel32" Alias "GetPrivateProfileIntA" (ByVal lpApplicationName As String, ByVal lpKeyName As String, ByVal nDefault As Long, ByVal lpFileName As String) As Long Sub CatMain() dim strFName as string strFName = "C:\Users\Peter\Documents\test.ini" 'Sample for reading a numbers directly on the INI file 'Write a number 55 on the sample.ini to be read WritePrivateProfileString "Sample", "Sample", "55", strFName 'Then, read the stored number 'No need to convert the value returned MsgBox GetPrivateProfileInt("Sample", "Sample", 0, strFName End Sub
Die Inis wurden mit Windows eingeführt und irgendwann durch die Registry abgelöst. Für VBA7 müssen die Deklarationen der Api-Funktionen noch angepasst werden. Deshalb: Mit welcher VBA-Version programmierst Du? Ausserdem: Was willst Du eigentlich steuern bzw. abspeichern? Tschau, Joe
------------------ Inoffizielle Catia Hilfeseite Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Peter91 Mitglied
Beiträge: 39 Registriert: 12.10.2015 Catia V5-6R2014 Windows 7 VBA 7.1
|
erstellt am: 24. Nov. 2015 20:12 <-- editieren / zitieren --> Unities abgeben: Nur für 3.1415926535
Ich benutze VBA 7.1. Wusste gar nicht, das es da so viele Unterschiede gibt. Ich möchte zu Beginn eines Makros verschiedene Namen für Nullpunkte und verschiedene Pfade auslesen, die im ganzen Makro oft auftauchen. Der obige Code von mir wäre ja schonmal eine Notlösung... Gruß Peter
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
joehz Moderator Freiberuflicher Konstrukteur
Beiträge: 1057 Registriert: 25.11.2006 Win7 Pro 64 + Ubuntu + Irix6.5.20 Dell Precision M6600 i7-2960XM 2.7GHz 16GB NVidia Quadro M5010 Catia V5R19 VB6Pro.SP6/VBA 6.5.1053
|
erstellt am: 24. Nov. 2015 21:02 <-- editieren / zitieren --> Unities abgeben: Nur für 3.1415926535
Peter, ich würd' Dir zu Get/SaveSettings raten. Gründe: - keine extra Datei - Inis sind veraltet - wenn Du eine Ini beschreibst, beschreibst Du gleichzeitig auch die Registry Kurz zu Get/SaveSettings:
Beispiel Lesen:
Code:
Sub ReadSettings() 'read settings from regisry and adjust controls accordingly; if 'the macro crashes, the cbo.listindex values are set to -1(none selected) cboDist.ListIndex = GetSetting(App.Title, "Settings", "LineDist", 3) If cboDist.ListIndex = -1 Then cboDist.ListIndex = 3 cboFtSize.ListIndex = GetSetting(App.Title, "Settings", "FontSize", 2) If cboFtSize.ListIndex = -1 Then cboFtSize.ListIndex = 2 cboFtName.ListIndex = GetSetting(App.Title, "Settings", "FontName", 1) If cboFtName.ListIndex = -1 Then cboFtName.ListIndex = 1 cboLayer.ListIndex = GetSetting(App.Title, "Settings", "Layer", 0) If cboLayer.ListIndex = -1 Then cboLayer.ListIndex = 0 ckBxFix.Value = GetSetting(App.Title, "Settings", "FixLines", 0) ckBxNoPick.Value = GetSetting(App.Title, "Settings", "NoPick", 0) optLead(1).Value = GetSetting(App.Title, "Settings", "LeadTrail") optLead(0).Value = Not optLead(1).Value End Sub
Die ersten lesen/setzen den abgespeicherten Wert einer Conmbo-Box; danach den Zustand von zwei CheckBoxen und zum Schluss die Einstellung der OptionButton. Der prinzipielle Aufbau ist Syntax: GetSetting(appname, section, key[, default]) Also App-Name, Schlüssel, Unterschlüssel, Vorgabewert; zurückgegeben wird der abgespeicherte Wert. (eigentlich wie bei den Ini-Einträgen) :-) Beispiel schreiben:
Code:
Sub WriteSettings() 'save all settings SaveSetting App.Title, "Settings", "LineDist", cboDist.ListIndex SaveSetting App.Title, "Settings", "FontSize", cboFtSize.ListIndex SaveSetting App.Title, "Settings", "FontName", cboFtName.ListIndex SaveSetting App.Title, "Settings", "Layer", cboLayer.ListIndex SaveSetting App.Title, "Settings", "FixLines", ckBxFix.Value SaveSetting App.Title, "Settings", "NoPick", ckBxNoPick.Value SaveSetting App.Title, "Settings", "LeadTrail", optLead(1).Value SaveSetting App.Title, "Settings", "MainLeft", Me.Left SaveSetting App.Title, "Settings", "MainTop", Me.Top '--------------------------------------------------------------------------------------- End Sub
Zu den oben erwähnten Einstellungen kommen noch die Lagewerte des Hauptfensters der App. Der prinzipielle Aufbau hier ist Syntax SaveSetting appname, section, key, setting 'Setting' ist der abzuspeichernde Wert. Alle VB/VBA settings werden abgelegt in der Registry unter: HKEY_CURRENT_USER\Software\VB and VBA Program Settings d.h. sie sind User/Rechner-abhängig. Wenn Du mit den Einstellungen auf einen anderen Rechner umziehen willst, musst sie vorher ex- und anschliessend importieren. Das könnte so aussehen:
Zitat:
Windows Registry Editor Version 5.00[HKEY_CURRENT_USER\Software\VB and VBA Program Settings\DrawNet] [HKEY_CURRENT_USER\Software\VB and VBA Program Settings\DrawNet\Settings] "LineDist"="3" "FontSize"="2" "FontName"="1" "Layer"="0" "FixLines"="0" "NoPick"="0" "LeadTrail"="Wahr" "MainLeft"="19590" "MainTop"="7590"
In der Registry sieht das ganze so aus, wie auf dem Bild. Tschau, Joe PS: Gut wäre, wenn Du die Online-Hilfe installieren würdest. Sollte auf der CD sein. ------------------ Inoffizielle Catia Hilfeseite Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Peter91 Mitglied
Beiträge: 39 Registriert: 12.10.2015 Catia V5-6R2014 Windows 7 VBA 7.1
|
erstellt am: 25. Nov. 2015 14:57 <-- editieren / zitieren --> Unities abgeben: Nur für 3.1415926535
|
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 25. Nov. 2015 15:08 <-- editieren / zitieren --> Unities abgeben: Nur für 3.1415926535
Servus Wo hast du diese Variable (Array) definiert/deklariert? Ist das eine globale/public Variable? Kommt diese aus der Userform oder andere Routine? Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
joehz Moderator Freiberuflicher Konstrukteur
Beiträge: 1057 Registriert: 25.11.2006 Win7 Pro 64 + Ubuntu + Irix6.5.20 Dell Precision M6600 i7-2960XM 2.7GHz 16GB NVidia Quadro M5010 Catia V5R19 VB6Pro.SP6/VBA 6.5.1053
|
erstellt am: 25. Nov. 2015 15:18 <-- editieren / zitieren --> Unities abgeben: Nur für 3.1415926535
Hi Peter, ich lese/speichere mit den Befehlen die Einstellungen diverser Controls ab Wenn die Controls bei Dir nicht vorhanden sind, kann's nicht funktionieren. (anbei Bild meines Makros - geschrieben mit VB) Ich wollt' Dir mit den Code-Zeilen nur die Methode an sich illustrieren. Eins zu eins übernehmen kannst das aus obigem Grund nicht, ausser Du baust die Form nach. Auf Deinen Anwendungsfall umgeschrieben müsste die Speicheranweisung:
Code:
SaveSetting strMacroName, "Settings", "NullPunkt01", strNullPunkt01
wobei zuvor Code:
const strMacroName as string = "MyMacro"Dim strNullPunkt01 as string strNullPunkt01 = "MeinNullPunkt01"
irgendwo, für die Speicherroutine sichtbar, angegeben werden müssen. Zum Auslesen dann:
Code:
strNullPunkt01 = GetSetting(strMacroName, "Settings", "NullPunkt01", "DefaultWertFürNullpunkt01")
wobei der Defaultwert optional ist. Code:
strNullPunkt01 = GetSetting(strMacroName, "Settings", "NullPunkt01")
geht also auch. Wie geht's mit der VBA-Online-Hilfe voran? Tschau, Joe ------------------ Inoffizielle Catia Hilfeseite Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Peter91 Mitglied
Beiträge: 39 Registriert: 12.10.2015 Catia V5-6R2014 Windows 7 VBA 7.1
|
erstellt am: 26. Nov. 2015 18:02 <-- editieren / zitieren --> Unities abgeben: Nur für 3.1415926535
Vielen Dank für die ausführliche Antwort. Werde es mal testen. Gruß Peter
PS: Wegen der Onlinehilfe; CD gibt es keine, da es sich um eine Studentenversion von Catia handelt [Diese Nachricht wurde von Peter91 am 26. Nov. 2015 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
joehz Moderator Freiberuflicher Konstrukteur
Beiträge: 1057 Registriert: 25.11.2006 Win7 Pro 64 + Ubuntu + Irix6.5.20 Dell Precision M6600 i7-2960XM 2.7GHz 16GB NVidia Quadro M5010 Catia V5R19 VB6Pro.SP6/VBA 6.5.1053
|
erstellt am: 26. Nov. 2015 19:41 <-- editieren / zitieren --> Unities abgeben: Nur für 3.1415926535
gibt's auch direkt zum Nachlesen: https://msdn.microsoft.com/en-us/library/aa338032%28VS.60%29.aspx Tschau, Joe Beispiel zu GetSetting: https://msdn.microsoft.com/en-us/library/aa445019%28v=vs.60%29.aspx Zu FSO: https://msdn.microsoft.com/en-us/library/aa242706%28v=vs.60%29.aspx Und noch ein Link zu VBA für Office 2013: https://www.microsoft.com/en-us/download/details.aspx?id=40326 Und auf deutsch: https://msdn.microsoft.com/de-de/library/office/gg264383.aspx ------------------ Inoffizielle Catia Hilfeseite Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |