VBA-Code von mehreren Dateien ändern

Hi Leute,

wir migrieren gerade von einem Server auf einen anderen. Dabei ändert sich die Dateistruktur unserer Netzlaufwerke.
Dummerweise haben wir in einigen Excel-Blättern Makros, die eben diesen Pfad im Quellcode verwenden.
Nun ist die Frage - wie würdet ihr da rangehen damit nach der vollendeten Umstellung alle Makros noch bzw wieder funktionieren.
(Die verwendung der Pfade ist dabei notwendig)

Vielen Dank für alle Tipps
Munich

Hi, Munich!

wir migrieren gerade von einem Server auf einen anderen. Dabei
ändert sich die Dateistruktur unserer Netzlaufwerke.
Dummerweise haben wir in einigen Excel-Blättern Makros, die
eben diesen Pfad im Quellcode verwenden.
Nun ist die Frage - wie würdet ihr da rangehen damit nach der
vollendeten Umstellung alle Makros noch bzw wieder
funktionieren.
(Die verwendung der Pfade ist dabei notwendig)

Wie willst Du es denn machen? Quick’n’dirty oder sauber? Entweder bastelst Du dir was, was Deinen VBA-Code exportiert, die Pfade anpasst und wieder importiert, oder Du machst es gleich sauber, damit bei dem nächsten Umzug nicht wieder das gleiche Problem aufritt: Pfadeinstellung irgendwo in die Tabelle oder ein INI-File (relativ zu den Dateien, um besagtes Problem später wieder zu vermeiden) schreiben und dann wirklich jede Datei öffnen und die Sourcen anpassen derart, dass der Pfad nicht mehr hardvercodet drin ist, sondern die variablen Stellen ausgelesen werden. Das lässt sich dann bei erneuten Umzügen relativ leicht anpassen…

Gruß, Manfred

O.T. Firmennetzwerk privat nachgestellt
Hallo Munich,
Tipp kann ich dir leider keinen geben da ich nur aus Hobby mich mit Excel beschäftige und keinen Zugriff auf Netze habe.

Aber, ich hatte massivste PC-Probleme, habe jetzt 3 Kisten da stehen und daraus einen funktioniierenden gebastelt.
Für einen zweiten würde es auch noch reichen und da ich Excelfragen die sich auf ein Firmennetz beziehen nicht beantworten kann mangels demselben, trage ich mich schon lange mit dem Gedanken, mir aus 2 PCs ein Netzwerk zu basteln.

Von Netzwerken habe ich leider Null Ahnung.
Was brauche ich da? 2 Ethernetkarten? Welches Betriebssystem bzw Software, ich glaube die heissen Novell o.ä. oder brauche ich da was mit Apache Server, was immer das auch ist, oder ist das Internet bezogen weil ich das manchmal bei Internetfehlermeldungen lese.

Ich habe nicht soviel Geld, also würde ich von der Netzwerk-Software die mir genannt wird ne uralt-version bei ebay kaufen.
Kann ich dann alle Netzwerkprobleme (sind ja eh meist nur Pfadanpassungen) nachstellen?

Und wenn ihr in Firmen arbeitet , ich nehm auch gern kostenlos irgendeine alte Netzwerksoftware.
Sie muss nur so aktuell sein, dass ich damit z.B. die Problematik von Munich mit den Pfadanpassungen austesten kann.
Der Tipp von Manfred klingt für mich logisch dass in die personal.xls o.ä zu packen und dann mit vlookup die Pfade auszulesen.
Danke für daas Intersse & Gruß
Reinhard

Hallo Rheinhard,

Für einen zweiten würde es auch noch reichen und da ich
Excelfragen die sich auf ein Firmennetz beziehen nicht
beantworten kann mangels demselben, trage ich mich schon lange
mit dem Gedanken, mir aus 2 PCs ein Netzwerk zu basteln.

Von Netzwerken habe ich leider Null Ahnung.
Was brauche ich da? 2 Ethernetkarten?

  • einne Router, um auch den DSL-Anschluß einzubinden, falls du einen solchen hast.

Welches Betriebssystem
bzw Software, ich glaube die heissen Novell o.ä. oder brauche
ich da was mit Apache Server, was immer das auch ist, oder ist
das Internet bezogen weil ich das manchmal bei
Internetfehlermeldungen lese.

Für ein einfaches Netzwerk daheim reichen auch die Bordmittel von Windoxs. Ich hab privat Notebook, Desktop-PC und DSL-Modem zu einem Netzwerk unter Win95 bzw.Win98 zusammengeschaltet.

Ich habe nicht soviel Geld, also würde ich von der
Netzwerk-Software die mir genannt wird ne uralt-version bei
ebay kaufen.
Kann ich dann alle Netzwerkprobleme (sind ja eh meist nur
Pfadanpassungen) nachstellen?

Die Anschaffung einer speziellen Netzwerkssoftware für 2 PCs wäre hier meiner Meinung nach etwas Overkill, es sei denn du möchtest dich mit Netzwerksadministration und den damit verbundenen Tücken beschäftigen.

Sie muss nur so aktuell sein, dass ich damit z.B. die
Problematik von Munich mit den Pfadanpassungen austesten kann.

Um Pfadverschiebungen zu testen reicht es schon aus lokal Dateien von Laufwerk C nach D zu verschieben. Da hab hab ich auch schon so manches aha-Erlebnis gehabt.

Gruß
Franz

Wie willst Du es denn machen? Quick’n’dirty oder sauber?
Entweder bastelst Du dir was, was Deinen VBA-Code exportiert,
die Pfade anpasst und wieder importiert,

hmmm… aber wie tu ich das denn? Wenn ich ein Makro aufzeichne kann ich ja nix im VBA-Editor machen…

oder Du machst es
gleich sauber, damit bei dem nächsten Umzug nicht wieder das
gleiche Problem aufritt: Pfadeinstellung irgendwo in die
Tabelle oder ein INI-File (relativ zu den Dateien, um besagtes
Problem später wieder zu vermeiden) schreiben und dann
wirklich jede Datei öffnen und die Sourcen anpassen derart,
dass der Pfad nicht mehr hardvercodet drin ist, sondern die
variablen Stellen ausgelesen werden. Das lässt sich dann bei
erneuten Umzügen relativ leicht anpassen…

Damit hatte ich schon geliebäugelt, aber unsere Dateien sind wirklich sehr umfangreich…
Bis zu 20 Module mit je bis zu 20 Makros oder so…
Dazu kommt dass es eben aus verschiedenen Federn kommt und der Hauptanteil von einer bereits ausgeschiedenen MA ist…
Ich denke also dass die quick’n’dirty lösung die bessere Wahl wäre zumal eine weitere umstellung wohl erst nach meiner Amtszeit wieder ansteht *g*

Hallo Munich,
Tipp kann ich dir leider keinen geben da ich nur aus Hobby
mich mit Excel beschäftige und keinen Zugriff auf Netze habe.

Deine Hilfsbereitschaft ist echt bemerkenswert. Find ich echt toll von Dir, wie motiviert Du dabei bist :smile:

Von Netzwerken habe ich leider Null Ahnung.
Was brauche ich da? 2 Ethernetkarten? Welches Betriebssystem
bzw Software, ich glaube die heissen Novell o.ä. oder brauche
ich da was mit Apache Server, was immer das auch ist, oder ist
das Internet bezogen weil ich das manchmal bei
Internetfehlermeldungen lese.

also im Prinzip reicht dazu sogar ein Rechner - aber das kommt eben darauf an was Du in diesem Netzwerk alles simulieren willst…
Besser wäre es jedenfalls wenn Du Win XP professional hättest.
Ein Netzwerk kannst Du dann simulieren indem Du einfach ein Verzeichnis freigibst und auf dieses Verzeichnis wiederum mapst. Das sieht dann für den PC wie ein Netzlaufwerk aus, ist aber effektiv auf der eigenen Platte.
Effekte dürften aber nur sein, dass gelöschte Dokumente nicht in den Papierkorb wandern sondern einfach weg sind
Apache ist für html-seiten, damit würdest Du auf einem Rechner einen Internetserver installieren, der aber erst mal nicht besonders bekannt wäre im Internet…
Für ein Netzwerk ist das eigentlich genauso unnötig denke ich…
Netzwerkkarten bräuchtest Du sicherlich, ja…
entweder eine in jedem Rechner und einen Router für die Einwahl ins Internet oder in einem Rechner 2 und im anderen nur eine… dann müsstest Du aber ein gekreuztes Kabel nehmen für die PC zu PC verbindung…

Ich habe nicht soviel Geld, also würde ich von der
Netzwerk-Software die mir genannt wird ne uralt-version bei
ebay kaufen.
Kann ich dann alle Netzwerkprobleme (sind ja eh meist nur
Pfadanpassungen) nachstellen?

wurde ja schon geklärt denk ich…

Grüsse aus München.
Munich

PS: Netzwerkkarten könnt ich vielleicht irgendwo aufschnappen…

Hallo, Munich!

Wie willst Du es denn machen? Quick’n’dirty oder sauber?
Entweder bastelst Du dir was, was Deinen VBA-Code exportiert,
die Pfade anpasst und wieder importiert,

hmmm… aber wie tu ich das denn? Wenn ich ein Makro
aufzeichne kann ich ja nix im VBA-Editor machen…

Das ist ein umfangreicheres Thema. Bei Bedarf und Zeit dazu mehr.

Damit hatte ich schon geliebäugelt, aber unsere Dateien sind
wirklich sehr umfangreich…
Bis zu 20 Module mit je bis zu 20 Makros oder so…
Dazu kommt dass es eben aus verschiedenen Federn kommt und der
Hauptanteil von einer bereits ausgeschiedenen MA ist…

Das könnte ein Problem geben. War wirklich jeder so nett und hat im Code Pfad = „C:\MeinPfad\Hallo\Tschüß\BisDann“ stehen? Oder kann auch mal ein Pfad = „C:“ & MEINE_PFADKONSTANTE stehen? Wenn Du so was nicht ausschließen kannst, wird Dir die saubere Lösung nicht erspart bleiben und Du musst manuell nachprüfen. Oder Du korrigierst immer im Fehlerfall. Das könnte allerdings auch nervig werden. Den ersten Fall müsste man, meine ich, automatisieren können…

Ich denke also dass die quick’n’dirty lösung die bessere Wahl
wäre zumal eine weitere umstellung wohl erst nach meiner
Amtszeit wieder ansteht *g*

Das habe ich jetzt mal überlesen. Das ist nicht wirklich nett von Dir:wink:

Gruß, Manfred

Hiho Manfred :smile:

Das ist ein umfangreicheres Thema. Bei Bedarf und Zeit dazu
mehr.

also Bedarf zu lernen hab ich immer *g*

Das könnte ein Problem geben. War wirklich jeder so nett und
hat im Code Pfad = „C:\MeinPfad\Hallo\Tschüß\BisDann“ stehen?
Oder kann auch mal ein Pfad = „C:“ & MEINE_PFADKONSTANTE
stehen? Wenn Du so was nicht ausschließen kannst, wird Dir die
saubere Lösung nicht erspart bleiben und Du musst manuell
nachprüfen. Oder Du korrigierst immer im Fehlerfall. Das
könnte allerdings auch nervig werden. Den ersten Fall müsste
man, meine ich, automatisieren können…

also wenn ich im VBA Code was gesehen hab dann war das immer hardcoded als \servername\share\verzeichnis\usw\undsofort drin…
Es haben nicht allzu versierte Leute daran gearbeitet also würde ich das mal vorsichtig behauptet ausschliessen, das da mit konstanten gearbeitet wurde.
Selbst die Dame aus deren Hand das meiste stammte hat das nicht getan…

Das habe ich jetzt mal überlesen. Das ist nicht wirklich nett
von Dir:wink:

naja, wenn andere Leute behaupten, dass es klug ist die Netzwerkpfade anders zu belegen als es von der EDV vorgegeben wird, dann hab ich damit auch kein Problem :wink:
Ausserdem kann man eine quick’n’dirty Lösung ja auch ein zweitesmal einsetzen, oder? :smile:

LG
Munich

Hiho Munich!

Das ist ein umfangreicheres Thema. Bei Bedarf und Zeit dazu
mehr.

also Bedarf zu lernen hab ich immer *g*

Wenn sich keienr meldet, setze ich mich mal dran, wenn ich ein wenig Zeit finde. Ist momentan aber ein wenig eng bei mir…

also wenn ich im VBA Code was gesehen hab dann war das immer
hardcoded als \servername\share\verzeichnis\usw\undsofort
drin…
Es haben nicht allzu versierte Leute daran gearbeitet also
würde ich das mal vorsichtig behauptet ausschliessen, das da
mit konstanten gearbeitet wurde.
Selbst die Dame aus deren Hand das meiste stammte hat das
nicht getan…

Dann gehen wir mal von optimalen/einfachen Fall aus und suchen alle Texte, die mit „\“ oder „?:“ anfangen und ersetzen die durch einen Zugriff auf einen dann zu definierenden Namen in der Datei. Würde das passen?

Gruß, Manfred

Hossa Manfred :smiley:

Dann gehen wir mal von optimalen/einfachen Fall aus und suchen
alle Texte, die mit „\“ oder „?:“ anfangen und ersetzen die
durch einen Zugriff auf einen dann zu definierenden Namen in
der Datei. Würde das passen?

ja, wobei ich den suchstring noch erweitern würde…
alt ist irgendwo mit g:\muc…\secret\ bzw \de.local\dfs\muc…\secret\
und neu ist
\de.local\dfs\de\muc…\secret\

wobei das … jeweils unterschiedliche Ordner sind (geänderte abteilungsnamen/kürzel)

vielen Dank jedenfalls :smile:

Grüsse
Munich

ja, wobei ich den suchstring noch erweitern würde…
alt ist irgendwo mit g:\muc…\secret\ bzw
\de.local\dfs\muc…\secret\
und neu ist
\de.local\dfs\de\muc…\secret\
wobei das … jeweils unterschiedliche Ordner sind (geänderte
abteilungsnamen/kürzel)

Hallo Munich,
das kriegst du doch locker selbst hin, hier gibts reichlich Codebeispiele:
http://groups.google.de/groups?q=lines+module&hl=de
Gruß
Reinhard

Hola, Munich!

Dann gehen wir mal von optimalen/einfachen Fall aus und suchen
alle Texte, die mit „\“ oder „?:“ anfangen und ersetzen die
durch einen Zugriff auf einen dann zu definierenden Namen in
der Datei. Würde das passen?

ja, wobei ich den suchstring noch erweitern würde…
alt ist irgendwo mit g:\muc…\secret\ bzw
\de.local\dfs\muc…\secret\
und neu ist
\de.local\dfs\de\muc…\secret\

Kannste machen. Was ich nun machen würde:

  1. Alle XL-Dateien öffnen
  2. Dann für alle Module:
    2.1 exportieren in eine Textdatei
    2.2 Entfernen aus dem Projekt
    2.3 einlesen der Textdatei
    2.4 Ändern aller obiger Muster
    2.5 Speichern der Textdatei
    2.6 Importieren der Textdatei

Wie das geht, ist grob unter http://www.vb-fun.de/cgi-bin/loadframe.pl?ID=vb/tipp… beschrieben. Das Suchen und ersetzen läuft z. B. über InStr.

Langt Dir das?

Gruß, Manfred

1 Like

hmmm… ob ich das so hinbekomme… *bezweifel*
ich fürchte fast dass ich da schneller bin wenn ich die Dateien einzeln bearbeite…

  1. Problem:
    ich weiss nicht wie ich Verzeichnisse (rekursiv) auslese und alle Exceldateien öffne
  2. Problem:
    Ich weiss nicht, wie ich die Namen der Module per Makro herausbekommen sollte
  3. Problem:
    Ich weiss nicht, wie ich eine Datei öffne und mit neuem inhalt wieder speichere

aber danke für den Link… wandert gleich in meine Bookmarks *

Dein Vertrauen ehrt mich :wink:

aber ich bin da nicht ganz so zuversichtlich… :frowning:

Zum Finden der Excel-Dateien:

Manchmal ist es sehr einfach, die betroffenen Dateien per Windows-Suche oderso zu identifizieren. Dann kannst Du eine Liste generieren, in der jedens File mit absolutem Pfad drin steht. Diese Liste arbeitest Du dann mit einem Tool ab.

Ich habe mal ein kleines Tool geschrieben, mit dem man sich im Windows-Explorer oder in der Suche angezeigte Dateien per Drag&Drop in eine solche Liste schreibt. Bei Bedarf suche ich mal den Link raus.

Kristian

Hi Munich,

  1. Problem:
    ich weiss nicht wie ich Verzeichnisse (rekursiv) auslese und
    alle Exceldateien öffne

Rekursiv = Searchsubfoldderstrue ,die namen kriegste mit z.B (aus der Hilfe):

Set fs = Application.FileSearch
With fs
 .LookIn = "C:\My Documents"
 .SearchSubFolders = True
 .FileName = "cmd\*"
 If .Execute() \> 0 Then
 MsgBox "There were " & .FoundFiles.Count & \_
 " file(s) found."
 For i = 1 To .FoundFiles.Count
 MsgBox .FoundFiles(i)
 Next i
 Else
 MsgBox "There were no files found."
 End If
End With
  1. Problem:
    Ich weiss nicht, wie ich die Namen der Module per Makro
    herausbekommen sollte

aus Google (nach Module name gegoogelt)

Sub ListVBAModules()
Dim i As Integer
Dim Module As Object
i = 1
ActiveWorkbook.Sheets("ToC").Activate
Range("C3:C500").Clear
 For Each Module In ActiveWorkbook.VBProject.VBComponents
 If Module.Type 100 \_
 Then
 Cells(i + 3, 3).Value = Module.Name
 i = i + 1
 End If
 Next
End Sub
  1. Problem:
    Ich weiss nicht, wie ich eine Datei öffne und mit neuem inhalt
    wieder speichere

…open
ändern
…close savvechanges=true

Gruß
Reinhard

1 Like

Hi Munich,

  1. Problem:

klasse code… super!

  1. Problem:

aus Google (nach Module name gegoogelt)

Sub ListVBAModules()
Dim i As Integer
Dim Module As Object
i = 1
ActiveWorkbook.Sheets(„ToC“).Activate
Range(„C3:C500“).Clear
For Each Module In ActiveWorkbook.VBProject.VBComponents
If Module.Type 100 _
Then
Cells(i + 3, 3).Value = Module.Name
i = i + 1
End If
Next
End Sub

Laufzeitfehler 1004:
Der programmatische Zugriff auf das Visual Basic-Projekt ist nicht sicher

macht er mir also nicht…

  1. Problem:
    Ich weiss nicht, wie ich eine Datei öffne und mit neuem inhalt
    wieder speichere

…open
ändern
…close savvechanges=true

hm okay, und wie ändere ich *duck* :wink:

Vielen Dank jedenfalls
Munich

Laufzeitfehler 1004:
Der programmatische Zugriff auf das Visual Basic-Projekt ist
nicht sicher

…open
ändern
…close savvechanges=true

hm okay, und wie ändere ich *duck* :wink:

Hallo Munich,
nach Anpassung des tabellenamens läuft der Code bei mir (XL2000).
Es muss an irgendwelchen Sicherheitseinstellungen bei dir liegen.

Auf der googleseite die ich nannte waren doch reichlich Codes wie man auf Lines von Modulen zugreift.
Gruß
Reinhard