Anzeige
Archiv - Navigation
976to980
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
976to980
976to980
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

VBA Codezeile per UF ändern

VBA Codezeile per UF ändern
18.05.2008 11:16:13
Gerhard
Guten Morgen
Ich habe eine "Schriftverkehrs Vorlage" erstellt, die mehrere Personen benutzen sollen.
Speichern unter geöffnetem Namen ist nicht möglich, da die Datei schreibgeschützt ist.
ich verwende folgenden Code von Ramses für die Erzeugung einer Nummer

Private Sub Workbook_Open()
'Sub Fortlaufende_RechnungsNummer()
'byRamses
'Das Makro in das Workbook_Open Ereignis einer Vorlage !!! kopieren
'um die automatische Nummern erstellung zu generieren.
'Beim speichern der Vorlage darf in der Zelle mit dem Namen "Rechnungsnummer"
'nichts stehen
'Ansonsten kann das Makro einer Schaltfläche zugwiesen werden.
'In der Zelle mit dem Namen "Rechnungsnummer" darf nichts stehen !!
'beim ausführen bzw. Start des Makros
On Error GoTo R_Error
Dim newNr As Variant, oldNr As Variant
Dim FileName As String
FileName = "G:\1001 JEDERMANN\NUMMER.ini"
'Prüfen ob bereits eine Rechnungsnummer in der Zelle steht
'Um ein erneutes hochzählen bei späterem öffnen der Datei zu vermeiden
If Range("NUMMER")  "" Then Exit Sub
'Erstellen einer externen Datei zum dokumentieren der
'fortlaufenden 5 stelligen Nummer
Close #1
'Öffnen der INI Datei
restart:
'Pfad der Datei bitte in der Deklaration anpassen
Open FileName For Input As #1
'einlesen der alten Nummer
Line Input #1, oldNr
Close #1
'Berechnen und schreiben der neuen Nummer
newNr = oldNr + 1
Open FileName For Output As #1
Write #1, newNr
'Schliessen der INI Datei
Close #1
'Länge der Zahl bestimmen
Select Case Len(newNr)
Case 1
newNr = "0000" & newNr
Case 2
newNr = "000" & newNr
Case 3
newNr = "00" & newNr
Case 4
newNr = "0" & newNr
Case 5
newNr = newNr
Case 6
MsgBox "Zahlenlimit überschritten"
Exit Sub
End Select
'Rechnungsnummer ist ein Name der sich auch eine Zelle bezieht
'Achtung:: Es dürfen keine Doppelpunkte, Slash oder Backslash verwendet werden
'Range("NUMMER") = "" & Format(Now, "yyyy") & "-" & newNr
Range("NUMMER") = "" & Left(ActiveSheet.Range("B2"), 3) & "-" & Right(Year(Date), 2) & "-" &  _
newNr & "-" & ActiveSheet.Range("L7")
R_Exit:
Exit Sub
R_Error:
Select Case Err
Case 53
'Datei ist noch nicht vorhanden
Open FileName For Output As #1
Close #1
Open FileName For Output As #1
Write #1, 0
Close #1
Err.Clear
Resume restart
Case 54
'Datei ist bereits geöffnet und wurde noch nicht wieder geschlossen
Close #1
Resume restart
Case Else
MsgBox Err & ": " & Err.Description
Resume R_Exit
End Select
End Sub


Mein Problem ist folgendes:
Der Speicherpfad der ini. Datei in dem die letzte vergebene Nummer gespeichert ist liegt ja jetzt bei mir in folgendem Pfad:
FileName = "G:\1001 JEDERMANN\NUMMER.ini"
Gibt es ne Möglichkeit z. B. per UF den Speicherpfad zu ändern, also nicht das in dem Quellcode direkt geändert wird, weil das traue ich den meisten, die es benutzen nicht zu.
Das gleiche Problem habe ich auch an anderer Stelle und zwar, kann ja nur unter vorgegebenen Namen abgespeichert werden mit diesem Code
Sub Speichern()
Dim Ergebnis
Dim XWN As String
AKTIVVER = "D:\Excel\Schriftverkehr\"
XW1 = Sheets("Tabelle1").Range("NUMMER").Value
XWN = AKTIVVER & XW1
Ergebnis = Application.GetSaveAsFilename(InitialFileName:=XWN, fileFilter:="Microsoft Excel-Arbeitsmappe (*.xls),*.xls")
If Ergebnis False Then
'Datei speichern
ActiveWorkbook.SaveAs FileName:=Ergebnis, FileFormat:=xlNormal, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, CreateBackup:=False
End If
End Sub


Auch hier wäre es klasse den Speicherpfad per VBA zu ändern.
Gibt es hierfür Möglichkeiten?
Ganz genial wäre ja, das sich die UF beim ersten Mal selbst öffnet (Workbook Open), um alles einstellen zu können und dann nur noch per Commandbutton aufrufbar ist....
LG Gerhard

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Codezeile per UF ändern
18.05.2008 11:23:06
Hajo_Zi
Hallo Gerhard,
sie dürfen nicht den Code ändern, Du glaust aber das Sie in Excel einstellen können, das der Zufgriff auf das VBA Projekt erlaubt wird?

AW: VBA Codezeile per UF ändern
18.05.2008 11:29:32
Gerhard
Moin Hajo...
ööhm... ich komm da jetzt leider ned ganz mit, mit deiner Fragestellung.
Wenn ich ne Anweisung schreibe, die beim ersten Öffnen der Datei eine UF aufgeht, in dem sie ihren Speicherort ihres Schriftverkehrs angeben (vllt war es etwas missverständlich geschrieben, aber die ini. Datei liegt dann in dem selben Ordner wie die anderen "Schriftstücke) sollte doch jeder in der Lage sein, einen Speicherort (C:\Schriftverkehr o.ä.) anzugeben, oder?

Anzeige
AW: VBA Codezeile per UF ändern
18.05.2008 11:35:00
Hajo_Zi
Hallo Gerhard,
ja auf der Zugriff auf das VBA Projekt muss zugelassen wrden. Du willst ja den Code ändern. Du kennst die Stelle wo Du das einstellen musst. Meine Frage war nur ob die anderen auch das einstellen können. Mit der Einstellung kann jeder VBA Code das VBA Projekt verändern.
Gruß Hajo

AW: VBA Codezeile per UF ändern
18.05.2008 14:45:00
Gerhard
Sers Hajo... Jetzt habe ich verstanden was du meinst...
Ich habe mit das "theoretisch" so gedacht gehabt:
Userform mit einer Textbox und nem Label: Geben sie bitte den Speicherpfadder Datei an!
In die Textbox muss dann der Speicherpfad eingeben werden und bei click auf ok, wird dann dieser eingebene Speicherpfad, an den in meinem ersten Post erwähnten Stellen geändert... ned mehr und ned weniger... Geht das überhaupt?
LG

Anzeige
AW: VBA Codezeile per UF ändern
18.05.2008 14:59:00
Hajo_Zi
Hallo Gerhard,
das hatte ich schon in meinem ersten Beitrag beantwortet. Ja das geht.
Gruß Hajo

AW: VBA Codezeile per UF ändern
18.05.2008 15:05:00
Gerhard
:-)
Klasse Hajo... Und wenn mir jetzt noch verrätst wie, zünde ich (wenn ich mal dahin komme) in Lourdes n Kerzchen an..
Ne ma Spass beiseite, kannst du mir da etwas Hilfestellung geben?
Oder n Link geben wo so was ähnliches wie ich brauche finde und nachlesen kann?
Oder für ganz faule, die reichtigen Schlagwärter für die Archivsuche? Meine geben da ned wirklich viel her...
many thx

Anzeige
AW: VBA Codezeile per UF ändern-anderer Weg?
18.05.2008 17:14:31
Gerhard
nachdem ich nun knapp 3 Stunden im Archiv verbracht habe und nix gefunden hab, was nur im entferntesten in die von mir gewünschte Richtung geht, muss ich vllt ein wenig umdenken...
Gibt es eine Möglichkeit den Explorer zu öffnen, den gewünschten Pfad zu wählen, und diesen in eine Textbox zu bringen?
Werde diesen Pfad dann "versteckt" auf meinem Sheet unterbringen und für einen Botton "Speichern" verwenden...
thx für evtl. Hilfe

AW: VBA Codezeile per UF ändern-anderer Weg?
18.05.2008 17:18:00
Hajo_Zi
Hallo Gerhard,

Option Explicit
Option Private Module
'   von Nepumuk
Private Type InfoT
hwnd As Long
Root As Long
DisplayName As Long
Title As Long
Flags As Long
FName As Long
lParam As Long
Image As Long
End Type
Private Declare Function SHBrowseForFolder Lib "shell32" (lpbi As InfoT) As Long
Private Declare Function CoTaskMemFree Lib "ole32" (ByVal hMem As Long) As Long
Private Declare Function lstrcat Lib "kernel32" Alias "lstrcatA" (ByVal lpStr1 As String, ByVal  _
lpStr2 As String) As Long
Private Declare Function SHGetPathFromIDList Lib "shell32" (ByVal pList As Long, ByVal lpBuffer  _
As String) As Long
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassname As  _
String, ByVal lpWindowName As String) As Long
Function GetAOrdner() As String
Dim xl As InfoT, IDList As Long, RVal As Long, FolderName As String
With xl
.hwnd = FindWindow("xlmain", vbNullString)
'        .hwnd = FindWindow("", "Auswahl")  ' Userform Auswahl
.Title = lstrcat("Bitte wählen Sie ein Verzeichnis", "")
.Flags = 1
End With
IDList = SHBrowseForFolder(xl)
If IDList  0 Then
FolderName = Space(256)
RVal = SHGetPathFromIDList(IDList, FolderName)
CoTaskMemFree (IDList)
FolderName = Trim(FolderName)
FolderName = Left(FolderName, Len(FolderName) - 1)
End If
GetAOrdner = FolderName
End Function
'   nicht verwendeter Code
'   Aufruf mit
Sub test()
StOrdner = GetAOrdner                       ' Verzeichnis auswählen
End Sub


Gruß Hajo

Anzeige
AW: VBA Codezeile per UF ändern-anderer Weg?
18.05.2008 17:46:00
Gerhard
Super Hajo...danke...
Aber ich kriegs ned gebacken diesen Pfad in meine textbox zu bekommen...Kannst mer nochmal Helfen?
UserForm1 und TextBox1 reichen als Beispiel...
LG

AW: VBA Codezeile per UF ändern-anderer Weg?
18.05.2008 17:49:05
Hajo_Zi
Hallo Gerhard,
erstze
StOrdner = GetAOrdner ' Verzeichnis auswählen
durch
Textbox1 = GetAOrdner ' Verzeichnis auswählen
Gruß Hajo

Danke!!!
19.05.2008 00:49:00
Gerhard
Super Klasse Hajo... Mit dem hat es funktioniert und hast scho recht ghabt... so isses auf jeden Fall besser als im Quellcode rumzuwurschteln... Nochmals Danke...
Betrachte auch meinen neuen Thread... habe da n Code Schnippsel von deiner Webseite verwendet... :)
LG Gerhard

Anzeige
Andere Ansätze:
18.05.2008 17:19:00
ransi
HAllo
Code mit Code ändern zu wollen hat immer irgendwelche Tücken.
Du kannst den Pfad auch woanders ablegen.
1)
Im workbook_open prüfst du ob es den Namen "Pfad" schon gibt.
Der Name "Pfad" bezieht sich auf " "D:\Excel\Schriftverkehr\"
Gibt es den Namen nicht wird er erstellt und auf visible=false gesetzt.
Gibt es ihn schon ist alles gut.
In deinem weiteren Code beziehst du dich immer auf Thisworkbook.Nmaes("Pfad").value
2)
Lege den Pfad in der Registry ab.
Im Workbook_open prüfen ob es den Schlüssel schon gibt.
Wenn ja Wert auslesen, wenn nein anlegen.
3)
Lege den Pfad in eine .ini Datei.
Wieder im Workbook_open prüfen ob es die Datei schon gibt.
Wenn ja, Pfad auslesen, wenn nein Datei anlegen und Pfad reinschreiben.
ransi
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige