Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  AutoCAD VBA
  VBA und INI-Dateien

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:  VBA und INI-Dateien (1452 mal gelesen)
Dirk.B
Mitglied
Tischler / Leiter Arbeitsvorbereitung


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

Beiträge: 534
Registriert: 25.11.2003

erstellt am: 03. Okt. 2006 15: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

Hallo zusammen!

Ich habe mir vor längerer Zeit ein kleines Tool unter VBA geschrieben, in dem ich Dateien in ein bestimmtes Verzeichnis konvertiere:

C:\ww4\dxf

Wichtig ist der Ordner \dxf. Dieser kann sich aber auf anderen Rechnern in einem ganz anderen Verzeichnis befinden.
Über den Ordnerauswahldialog kann man zwar ein neues Verzeichnis auswählen aber es nicht in eine Textbox speichern, so daß dieser beim nächsten Programmstart auch wieder angezeigt wird.
Ich hatte da schon mal im Forum nachgefragt und da kam der Hinweis bzgl. einer eigenen INI-Datei um den Pfad entsprechend zu speichern.

Könnte mir dabei jemand helfen, da ich überhaupt nicht weiß, wie ich da anfangen soll.

Die INI-Datei soll cnc.ini lauten.

Hier ein Auszug aus meinem Programm:

Code:

Private Const MAX_PATH = 260
'*********************************************************
Private Type BrowseInfo
    hWndOwner As Long
    pIDLRoot As Long
    pszDisplayName As Long
    lpszTitle As Long
    ulFlags As Long
    lpfnCallback As Long
    lParam As Long
    iImage As Long
End Type
'*********************************************************
Private Const BIF_BROWSEFORCOMPUTER = &H1000
Private Const BIF_BROWSEFORPRINTER = &H2000
Private Const BIF_BROWSEINCLUDEFILES = &H4000
Private Const BIF_DONTGOBELOWDOMAIN = &H2
Private Const BIF_RETURNFSANCESTORS = &H8
Private Const BIF_RETURNONLYFSDIRS = &H1
Private Const BIF_STATUSTEXT = &H4
'*********************************************************
Private Declare Sub CoTaskMemFree Lib "ole32.dll" _
  (ByVal hMem As Long)
'*********************************************************
Private Declare Function lstrcat Lib "kernel32" Alias _
  "lstrcatA" (ByVal lpString1 As String, _
  ByVal lpString2 As String) As Long
'*********************************************************
Private Declare Function GetActiveWindow Lib "user32" () _
  As Long
'*********************************************************
Private Declare Function SHGetPathFromIDList Lib "shell32" _
  (ByVal pidList As Long, ByVal lpBuffer As String) As Long
'********************************************************
Private Declare Function SHBrowseForFolder Lib "shell32" _
  (lpbi As BrowseInfo) As Long
'*********************************************************
Public Function BrowseForFolder(Prompt As String) As String
    Dim n As Integer
    Dim IDList As Long
    Dim Result As Long
    Dim ThePath As String
    Dim BI As BrowseInfo
    With BI
        .hWndOwner = GetActiveWindow()
        .lpszTitle = lstrcat(Prompt, "")
        .ulFlags = BIF_RETURNONLYFSDIRS
    End With
    IDList = SHBrowseForFolder(BI)
If IDList Then
    ThePath = String$(MAX_PATH, 260)
    Result = SHGetPathFromIDList(IDList, ThePath)
    Call CoTaskMemFree(IDList)
    n = InStr(ThePath, vbNullChar)
    If n Then ThePath = Left$(ThePath, n - 1)
End If
    BrowseForFolder = ThePath
End Function

...
...

Private Sub cmd4_Click()
Dim objDxf As AcadSelectionSet
Dim strTempName As String
Dim strTempPath As String
Dim strFilename As String
Dim objExportFile As AcadDocument
UserForm1.Hide

Select Case Cbo.ListIndex

Case 0  'Abspeichern des WBloks unter R 12.dxf

'strTempPath = ThisDrawing.path & "\" & tbo1.Text
strTempPath = tbo.Text & "\" & tbo1.Text

strFilename = RemoveExtension(ThisDrawing.name)
Set objDxf = ThisDrawing.SelectionSets.Add("dxfcnc"): objDxf.SelectOnScreen
ThisDrawing.Wblock strTempPath, objDxf
Set objExportFile = ThisDrawing.Application.Documents.Open(strTempPath)
With objExportFile
.SaveAs ThisDrawing.path & "\" & tbo1.Text, acR12_dxf
.Close
End With
Kill strTempPath & ".dwg"
'Kill strTempPath 'delete temp. Wblock.dwg File
strTempPath = RemoveExtension(strTempPath)
objDxf.Delete
Set objDxf = Nothing
Set objExportFile = Nothing
UserForm1.Show

Case 1  'Abspeichern des WBloks unter R 13.dxf

strTempPath = ThisDrawing.path & "\" & tbo1.Text
'strTempPath = ThisDrawing.path & "\tmpDxfOut.dwg"
strFilename = RemoveExtension(ThisDrawing.name)
Set objDxf = ThisDrawing.SelectionSets.Add("dxfcnc"): objDxf.SelectOnScreen
ThisDrawing.Wblock strTempPath, objDxf
Set objExportFile = ThisDrawing.Application.Documents.Open(strTempPath)
With objExportFile
'.SaveAs ThisDrawing.path & "\" & strFilename, acR13_dxf
.SaveAs ThisDrawing.path & "\" & tbo1.Text, acR13_dxf
.Close
End With
Kill strTempPath & ".dwg"
'Kill strTempPath 'delete temp. Wblock.dwg File
strTempPath = RemoveExtension(strTempPath)
objDxf.Delete
Set objDxf = Nothing
Set objExportFile = Nothing
UserForm1.Show

Case 2  'Abspeichern des WBloks unter R 14.dxf

strTempPath = ThisDrawing.path & "\" & tbo1.Text
'strTempPath = ThisDrawing.path & "\tmpDxfOut.dwg"
strFilename = RemoveExtension(ThisDrawing.name)
Set objDxf = ThisDrawing.SelectionSets.Add("dxfcnc"): objDxf.SelectOnScreen
ThisDrawing.Wblock strTempPath, objDxf
Set objExportFile = ThisDrawing.Application.Documents.Open(strTempPath)
With objExportFile
'.SaveAs ThisDrawing.path & "\" & strFilename, acR14_dxf
.SaveAs ThisDrawing.path & "\" & tbo1.Text, acR14_dxf
.Close
End With
Kill strTempPath & ".dwg"
'Kill strTempPath 'delete temp. Wblock.dwg File
strTempPath = RemoveExtension(strTempPath)
objDxf.Delete
Set objDxf = Nothing
Set objExportFile = Nothing
UserForm1.Show


End Select
End Sub

Public Function RemoveExtension(FileName1 As String) As String
RemoveExtension = Left(FileName1, Len(FileName1) - 4)
End Function

Private Sub cmd6_Click()
    ThePath = BrowseForFolder("Wählen Sie einen Ordner aus")
    If ThePath <> "" Then 'wenn Rückgabewert nicht leer dann
    Text1.Text = ThePath '& "/" & newname 'alternativ falls Backslash fehlt:
    End If
End Sub

Private Sub UserForm_Initialize()
UserForm1.tbo.Text = "C:\ww4\dxf"
StatusBar1.Panels(1).Text = "aktueller Zeichnungsname = " & ThisDrawing.name

Cbo.Value = "R12 - DXF"

With Cbo
    .AddItem "R12 - DXF", 0
    .AddItem "R13 - DXF", 1
    .AddItem "R14 - DXF", 2
End With
     
End Sub
Private Sub Cmd1_click()
    End
End Sub


Für Hilfe wäre ich wie immer sehr dankbar.

Gruß

Dirk

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

Carsten1210
Mitglied
staatl. geprüfter Holztechniker


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

Beiträge: 1357
Registriert: 24.07.2002

AutoCAD ACA 2018
Solidworks 2016 Sp5
Enterprise PDM 2016 Sp5
Pascam Woodworks
Visual Studio 2017 Pro
Windows 10 64Bit
Dell T3620
Intel Core i7-7700K
16 GB Arbeitsspeicher
2x Samsung S24C650
Dell M4800

erstellt am: 03. Okt. 2006 16:06    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 Dirk.B 10 Unities + Antwort hilfreich

Hallo Dirk,

Verstehe ich es richtig, das du den letzten gewählten Pfad in deiner Auswahlbox der Pfad stehen haben willst, oder ist das je Rechner eine einmalige Angelegenheit?!
Wenn due nur den letzten gewählten Pfad in der Box beim Aufrufen haben willst würde ich den Pfad in einen Registrierungsschlüssel speichern und beim nächsten Mal diesen Schlüssel wieder auslesen.
Du hast ausserdem eine PM von mir.

Gruß, Carsten.

[Diese Nachricht wurde von Carsten1210 am 03. Okt. 2006 editiert.]

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

Dirk.B
Mitglied
Tischler / Leiter Arbeitsvorbereitung


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

Beiträge: 534
Registriert: 25.11.2003

erstellt am: 03. Okt. 2006 17: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

Hi Carsten!

Genau!
Es würde mir reichen, wenn der zuletzt aufgerufen Pfad in der TBox erscheinen würde.
Nur wie speicher ich diesen in einem Registrierungsschlüssel ab bzw. lese diesen wieder aus?

Gruß

Dirk

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

Carsten1210
Mitglied
staatl. geprüfter Holztechniker


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

Beiträge: 1357
Registriert: 24.07.2002

AutoCAD ACA 2018
Solidworks 2016 Sp5
Enterprise PDM 2016 Sp5
Pascam Woodworks
Visual Studio 2017 Pro
Windows 10 64Bit
Dell T3620
Intel Core i7-7700K
16 GB Arbeitsspeicher
2x Samsung S24C650
Dell M4800

erstellt am: 03. Okt. 2006 17:52    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 Dirk.B 10 Unities + Antwort hilfreich

Hallo Drik,

Guckst du hier  .

Gruß, Carsten

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

Dirk.B
Mitglied
Tischler / Leiter Arbeitsvorbereitung


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

Beiträge: 534
Registriert: 25.11.2003

erstellt am: 04. Okt. 2006 09:36    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

Hi Carsten!

Wenn ich ehrlich bin, komme ich damit nicht klar.
Es soll ein Eintrag in die Registrie geschrieben werden, z.B.:

1. linke Baumstruktur:
HKEY_CURRENT_USER\Software\Autodesk\DB_Tuning\CNC

2. rechts
Name / Typ / Wert (C:\ww4\dxf = aus der TextBox)

Der gespeicherte Wert wird dann beim Neustart des Programms wieder ausgelesen.

Für weitere Hilfe schon mal vielen Dank im voraus.

Gruß

Dirk

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

Carsten1210
Mitglied
staatl. geprüfter Holztechniker


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

Beiträge: 1357
Registriert: 24.07.2002

AutoCAD ACA 2018
Solidworks 2016 Sp5
Enterprise PDM 2016 Sp5
Pascam Woodworks
Visual Studio 2017 Pro
Windows 10 64Bit
Dell T3620
Intel Core i7-7700K
16 GB Arbeitsspeicher
2x Samsung S24C650
Dell M4800

erstellt am: 04. Okt. 2006 13:11    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 Dirk.B 10 Unities + Antwort hilfreich

Hallo Dirk,

Probier folgendes:

Public Sub reglesen()
Dim regpfad As String
Dim Wert As String
regpfad = "HKEY_CURRENT_USER\Software\Autodesk\DB_Tuning\CNC"
Wert = RegRead(regpfad)
MsgBox Wert
End Sub
Public Sub regschreiben()
Dim regpfad As String
Dim Wert As String
Dim a
regpfad = "HKEY_CURRENT_USER\Software\Autodesk\DB_Tuning\CNC"
Wert = "C:\ww4\dxf"
a = RegWrite(regpfad, Wert, "REG_SZ")
End Sub
Public Function RegRead(Path As String) As String
  Dim ws As Object

  On Error GoTo ErrHandler
  Set ws = CreateObject("WScript.Shell")
  RegRead = ws.RegRead(Path)
  Exit Function

ErrHandler:
  RegRead = ""
End Function
Public Function RegWrite(ByVal Path As String, _
  ByVal Value As String, _
  Optional ByVal Typ As String = "REG_SZ") As Boolean

  Dim ws As Object

  On Error GoTo ErrHandler
  Set ws = CreateObject("WScript.Shell")
  ws.RegWrite Path, Value, Typ
  RegWrite = True
  Exit Function

ErrHandler:
  RegWrite = False
End Function

Und grüß den Rolf Stratmann mal von mir. 

Gruß, Carsten

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

Dirk.B
Mitglied
Tischler / Leiter Arbeitsvorbereitung


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

Beiträge: 534
Registriert: 25.11.2003

erstellt am: 04. Okt. 2006 15: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

Hi Carsten!

Vielen Dank für die Hilfe.
Nach erstem testen funktionierts sehr gut.

Code:

Public Function RegRead(Path As String) As String
  Dim ws As Object

  On Error GoTo ErrHandler
  Set ws = CreateObject("WScript.Shell")
  RegRead = ws.RegRead(Path)
  Exit Function

ErrHandler:
  RegRead = ""
End Function
Public Function RegWrite(ByVal Path As String, _
  ByVal Value As String, _
  Optional ByVal Typ As String = "REG_SZ") As Boolean

  Dim ws As Object

  On Error GoTo ErrHandler
  Set ws = CreateObject("WScript.Shell")
  ws.RegWrite Path, Value, Typ
  RegWrite = True
  Exit Function

ErrHandler:
  RegWrite = False
End Function
...
...
...
Public Sub UserForm_Initialize()
Dim regpfad As String
Dim Wert As String
regpfad = "HKEY_CURRENT_USER\Software\Autodesk\DB_Tuning\CNC"
UserForm1.tbo.Text = RegRead(regpfad)
StatusBar1.Panels(1).Text = "aktueller Zeichnungsname = " & ThisDrawing.name
Cbo.Value = "R2004 - DXF"
With Cbo
    .AddItem "R2004 - DXF", 0
    .AddItem "R14 - DXF", 1
End With
End Sub

Public Sub cmd6_Click()
Dim regpfad As String
Dim Wert As String
Dim a
regpfad = "HKEY_CURRENT_USER\Software\Autodesk\DB_Tuning\CNC"
Wert = tbo.Text
a = RegWrite(regpfad, Wert, "REG_SZ")
    End
End Sub


Woher kennst Du denn Rolf Stratmann?

Gruß

Dirk

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

Carsten1210
Mitglied
staatl. geprüfter Holztechniker


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

Beiträge: 1357
Registriert: 24.07.2002

AutoCAD ACA 2018
Solidworks 2016 Sp5
Enterprise PDM 2016 Sp5
Pascam Woodworks
Visual Studio 2017 Pro
Windows 10 64Bit
Dell T3620
Intel Core i7-7700K
16 GB Arbeitsspeicher
2x Samsung S24C650
Dell M4800

erstellt am: 04. Okt. 2006 15:23    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 Dirk.B 10 Unities + Antwort hilfreich

Hi Dirk,

Frag ihn doch einfach Mal. 

Gruß, Carsten

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

schrema
Mitglied
Umweltingenieur


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

Beiträge: 12
Registriert: 21.02.2006

erstellt am: 06. Okt. 2006 11: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 Nur für Dirk.B 10 Unities + Antwort hilfreich

Hallo,

falls doch lieber in Ini-Datei speichern, gibt es hier einen guten Workshop zu dem Thema:
http://www.vbarchiv.net/workshop/workshop17.php

MfG

Marco Schreiter

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

Dirk.B
Mitglied
Tischler / Leiter Arbeitsvorbereitung


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

Beiträge: 534
Registriert: 25.11.2003

AutoCAD 2021/2022
CAD+T
HP ZBook 15 G4, 64-bit,
WIN 10 Pro

erstellt am: 07. Okt. 2006 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

Hi Marco!

Vielen Dank für die Info.
Ich werde dieses mal probieren.

Gruß

Dirk

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

Stelli1
Moderator
Verm.-Ing.


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

Beiträge: 1521
Registriert: 17.08.2005

Map 2000-2014, Rasterdesign,
MapGuide, Autodesk Topobase,
VS6, VS.net 2013

erstellt am: 10. Okt. 2006 11:54    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 Dirk.B 10 Unities + Antwort hilfreich

Hallo Dirk,

in VBA gibt es auch die einfache Variante

Code:

SaveSetting "IS_VBA_TOOL", "Startup", "MDB", Me.txt_VorlageMDB.Text
bzw.
tmp = GetSetting("IS_VBA_TOOL", "Startup", "WIEDERHOLEN", 1)


Stelli

------------------
Warum lisp'eln wenn's auch anders geht.
www.ib-stelberg.de

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