Herbers Excel-Forum - das Archiv
Mittels Makro in anderen Makros Zeilen ändern
Informationen und Beispiele zu den hier genannten Dialog-Elementen:

|
Betrifft: Mittels Makro in anderen Makros Zeilen ändern
von: Claudia
Geschrieben am: 12.12.2003 11:46:43
Hallo liebe Forumer,
ich bin noch halber Anfänger in VBA aber lerne täglich dazu vor allem durch das Forum. Ist echt super hier.
Ich habe ein mittelgroßes Programm für unsere Firma geschrieben in dem bestimmte Daten eingelesen werden. In jedem der Excel-Dateien befinden sich verschiedene Makros die teilweise auch automatisch nacheinander abgearbeitet werden. Auch habe ich ein Add-In geschrieben wo ein weiterer Automatismus generiert wird.
Das Programm kann sowohl im Netz als auch bei meinen Kollegen/innen stationär eingesetzt werden. Bei der Installation muß ich aber jedes Mal in jedes Programm, in jedes Makro und dort bestimmte Zeilen abändern wegen der Laufwerks und Pfadzugehörigkeit.
Wie kann ich das mittels eines Makros automatisieren in dem ich in eine Abfragebox den
- Namen des Makros
- die Zeilennummer
- den zu ändernden Wert eingebe
Kann mir einer helfen? Wäre echt super
Vielen Dank für Eure RÜ's
Gruss Claudia

 |
Betrifft: Rückfrage
von: ChrisL
Geschrieben am: 12.12.2003 11:57:06
Hi Claudia
Verstehe zwar in etwa was du machen möchtest, frage mich aber ob es nötig ist.
Kannst du denn deine Makros nicht im vornherein 'variabel' gestalten. Meine damit die Pfadangabe kannst du z.B. mittles ThisWorkbook.Path ermitteln resp. mit Left auch den Laufwerksbuchstaben.
Gruss
Chris
Betrifft: AW: Rückfrage
von: Claudia
Geschrieben am: 12.12.2003 12:10:50
Hi Chriss,
ups, das kenne ich nicht. Wie gesagt, ich bin noch Anfänger. Mein Problem ist, das evtl. 200 Mitarbeiter dieses Programm bekommen sollen. Einige hängen hier am Netz in der Verwaltung, einige haben Home-Offices, einige arbeiten in Niederlassungen. Ich muss das Programm so gestalten, das alle Mitarbeiter beim kopieren bzw. installieren eine eigene Abfrage erhalten wo Sie eingeben können
- Namen des Makros (gebe ich Ihnen im Anschreiben vor)
- die Zeilennummer (gebe ich Ihnen im Anschreiben vor)
- den zu ändernden Wert eingebe (müssen Sie selber definieren dürfen)
Kannst Du mein Problem verstehen, warum ich eine "Art Abfragebox" benötige?
Danke und Gruss Claudia
Betrifft: AW: Rückfrage
von: ChrisL
Geschrieben am: 12.12.2003 13:18:34
Hi Claudia
ja aber... :-)
Zeig mal einen Auszug von deinem Makro. Den Teil, welcher individuell angepasst werden soll.
Gruss
Chris
Betrifft: AW: Rückfrage
von: Claudia
Geschrieben am: 12.12.2003 14:38:35
Hi Chriss,
sorry abe kann erst jetzt, nach dem Meeting wieder antworten. Hoffe Du liest es.
Also hier sind z.B. zwei der vielen Makros. Im ersten Beispiel müssen in Zeile 6 Angaben verändert werden dürfen. Sowohl in diesem als auch in anderen Makros müssen solche oder ähnliche Zeilen geändert werden. Aber die Angaben beziehen sich immer auf das Laufwerk und ggfs. einen Übergeordneten Dateiordner/Pfad in dem der User das Programm ablegt.
Erstes Beispiel:
Sub copy_Data()
Dim wb1 As Workbook, wks1 As Worksheet
Dim wb2 As Workbook, wks2 As Worksheet
Dim wbo As String
Dim wksr1 As Long, wksr2 As Long
wbo = "E:\ALWIN\Prod\Archivierung.xls" 'Pfad zur Datei 2 anpassen
Set wb1 = ActiveWorkbook 'Datei "ArchivAenderung.xls"
Set wb2 = Workbooks.Open(wbo) 'Datei "Archivierung.xls"
Set wks1 = wb1.Worksheets("Archiv") 'Namen bitte anpassen
Set wks2 = wb2.Worksheets("Archiv") 'Namen bitte anpassen
'Datenbereich der kopiert werden muss auslesen
wksr1 = wks1.Cells(65536, 1).End(xlUp).Row
'Kopiervorgang beginnen
wks1.Rows("2:" & wksr1).Copy Destination:=wks2.Rows(Cells(65536, 1).End(xlUp).Row + 1)
'Datei 2 schliessen
wb2.Close True
'Daten in aktiver Tabelle löschen
wks1.Rows("2:" & wksr1).Delete
End Sub
ZWEITES Beispiel (nur ein Auszug aus dem Makro)
Public
Sub lesen()
Dim fso As New FileSystemObject
Dim f As Folder
Dim p As File
Dim str As String
Dim aktuell As String
Dim u As UsedObjects
Set WS = Worksheets("Archiv")
Set fso = New FileSystemObject
Set f = fso.GetFolder("E:\ALWIN\Aenderung\")
h = 0
USW USW so bibt es viele Makros.
Ich hoffe Du kannst mit diesen Angaben etwas anfangen.
Danke und Gruß Claudia
Betrifft: AW: Rückfrage
von: ChrisL
Geschrieben am: 12.12.2003 14:46:41
Hi Claudia
Ich gehe mal davon aus, dass es dir um folgende Zeilen geht...
wbo = "E:\ALWIN\Prod\Archivierung.xls" 'Pfad zur Datei 2 anpassen
Set f = fso.GetFolder("E:\ALWIN\Aenderung\")
Befindet sich denn die Datei mit den Makros im selben Ordner z.B. "E:\ALWIN\DeineDatei.xls" oder wo...
Mein Ansatz wäre den Code z.B. wie folgt zu gestalten...
wbo = ThisWorkbook.Path & "\Prod\Archivierung.xls"
Set f = fso.GetFolder(ThisWorkbook.Path & "\Aenderung\")
Gruss
Chris
Betrifft: AW: Rückfrage
von: Claudia
Geschrieben am: 12.12.2003 15:05:12
Hi Chris,
hier die Struktur des Programmes so wie es auf meinem Rechner liegt. Nun ist es möglich für jeden Mitarbeiter (gerade für die die ein HomeOffice haben) das diese sich das Programm auf ein Laufwerk Ihrer Wahl legen und ggfs. das gesamt Programm noch in einen Dateiordner ablegen. Wenn dem so wäre (und davon muss ich ausgehen) dann sind in allen *.xls und *.xla Dateien einen ganze Menge Makros zu ändern die zur Zeit nur auf das Laufwerk und den Pfad in meinem Rechner verweisen.
E:\ALWIN
├───Aenderung
│ └ArchivAenderung.xls
├───Table_Scripts
│ ├───_scripts
│ │ ├───tabelle
│ │ │ └displayTab.
│ │ └───images
│ │ ├ check.gif
│ │ ├ down.gif
│ │ ├ Logo.gif
│ │ └ up.gif
│ ├───_css
│ │ ├ CMbase.css
│ │ └ tabStyle.css
│ └───Excel add-in
│ └ CMTabellen_erweitert.xla
├───Prod
│ └Archivierung.xls
│
└───Programm
├───Originale
│ ├ Archivierung.xls
│ └ ArchivAenderung.xls
├───Backups
└───Progs
├3Namenaendern.xls
Ich muss erreicheen, das wenn das Programm zum erstten Mal gestartet wird, der Anwender die Möglichkeit hat in den einzelnen Makros die entsprechenden Angaben (wie schon geschrieben Makroname, Makrozeile würde ich mitgeben) zu ändern und anschließend zu speichern. Die Makros werden laut Firmenleitung nicht geschützt.
Kannst Du damit etwas anfangen?
Vielen Dank und Gruss Claudia
Betrifft: AW: Rückfrage
von: ChrisL
Geschrieben am: 12.12.2003 15:42:53
Hi Claudia
> Wenn dem so wäre (und davon muss ich ausgehen) dann sind in allen *.xls und *.xla Dateien einen ganze Menge Makros zu ändern die zur Zeit nur auf das Laufwerk und den Pfad in meinem Rechner verweisen.
Dies kannst du relativ einfach per Suchen/Ersetzen bezogen auf das ganze Projekt erledigen. Auch wenn du den von dir gewünschten Ansatz umsetzen willst, musst du trotzdem sämtliche Programmzeilen identifizieren, welche geändert werden müssen.
Du könntest den Pfad in einem versteckten Tabellenblatt ablegen. Per Workbook_Open Ereignis prüfst du ob schon eine Pfadangabe besteht und falls nicht, rufst du die Abfrage auf. Den Programmcode beziehst du nachher auf die Zelle in der Tabelle. Etwa so (Ansatz)...
With Worksheets("Tabelle1")
If .Range("A1") = "" Then
' Abfrage z.B. Inputbox
.Range("A1") = Abfrage
End If
End With
Persönlich würde ich aber den Ansatz ThisWorkbook.Path weiter verfolgen. Ich würde die Struktur so vorgeben, dass die Zusatz- und Hilfsdateien in einen spezifischen Unterordner des selben Verzeichnisses in welchem sich die Makrodatei befindet muss.
Also z.B.
IrgendeinLaufwerk:\IrgendeinVerzeichnis\DeineDatei.xls
IrgendeinLaufwerk:\IrgendeinVerzeichnis\Programm\HierDieHilfsdateien
In dem Verzeichnis z.B. Programm kann eine beliebige Struktur (Unterordner) bestehen.
Mit einer solchen Struktur kannst du wie folgt arbeiten...
z.B.
ThisWorkbook.Path & "\Programm\Unterordner\Hilfsdatei.xla"
Bin jetzt dann bald offline und erst wieder am Montag dabei. Ich hoffe, mein Input hilft.
Gruss
Chris
Betrifft: AW: Rückfrage
von: Claudia
Geschrieben am: 12.12.2003 15:46:39
Hi Chris,
danke für Deine Ansätze. Ich werde diese mal nachher gleich probieren. Vielen Dank und schönes Wochenende.
Gruß Claudia