Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
460to464
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
460to464
460to464
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

bestehende VBA-Scribts anpassen

bestehende VBA-Scribts anpassen
03.08.2004 10:54:39
Jürg
Hallo Forum!
bei uns wurden die Laufwerksnamen geändert. (alt hiess es N:\PROJ\NOTIZ\Scha9\ NEU: S:\Operations_Technology\PROJ\NOTIZ\Scha9\) In Excelvorlagen sind vba-scribts vorhanden, bei denen auf die alten Laufwerksbezeichnungen hinweisen.... wie kann man das ändern, ohne die dateien zu öffnen? kann mir jemand da ein scribt anfertigen wo das rationell geht. also es handelt sich da um mehrer hundert Dateien..
viel Dank
Mit Gruss
jürg

15
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: bestehende VBA-Scribts anpassen
Ulf
Ohne zu öffnen, gar nicht!
Ulf
AW: bestehende VBA-Scribts anpassen
03.08.2004 14:10:38
Jürg
Hallo ulf !
...und mit öffnen/schliessen? es kann ja schnell gehen ohne fast zu sehen ....
gibt es den da was?
AW: bestehende VBA-Scribts anpassen
ChrisL
Hi Jürg
Da hatte ja jemand eine tolle Idee mit dem Laufwerksnamen ändern, vielleicht kann der ja das Problem lösen ;-)
Suche dir in der Forumsrecherche nach einem Code, der das Laufwerk nach Dateien durchsucht. An den Oeffnen, Suchen ersetzten und Schliessen Code kommst du mit dem Makrorekorder ran.
Ein wenig Effort deinerseits wird den Beitrag hoffenlich wiederbeleben ;-)
Gruss
Chris
AW: bestehende VBA-Scribts anpassen
04.08.2004 09:06:19
Jürg
Hallo
gut werde ich versuchen ..... diesen code zu finden....
ja weisst du das ganze netzwerk wurde angepasst eine sogenante migration wurde durchgeführt, das heisst via holland werden wir gewartet
Anzeige
AW: bestehende VBA-Scribts anpassen
07.08.2004 00:21:52
Nepumuk
Hallo Jürg,
ist der Code in den Mappe mit Kennwort geschützt? Dann ist das nicht möglich. Ansonsten eigentlich relativ einfach.
Beispiel:


Public Sub Teistring_tauschen()
    Dim objVBC As Object, intLine As Integer, strFront As String, strBack As String
    For Each objVBC In Workbooks("Mappe1.xls").VBProject.VBComponents
        With objVBC.CodeModule
            For intLine = 1 To .CountOfLines
                If InStr(1, .Lines(intLine, 1), "N:\PROJ\NOTIZ\Scha9\") <> 0 Then
                    strFront = Left$(.Lines(intLine, 1), InStr(1, .Lines(intLine, 1), "N:\PROJ\NOTIZ\Scha9\") - 1)
                    strBack = Mid$(.Lines(intLine, 1), InStr(1, .Lines(intLine, 1), "N:\PROJ\NOTIZ\Scha9\") + 20)
                    .DeleteLines intLine
                    .InsertLines intLine, strFront & "S:\Operations_Technology\PROJ\NOTIZ\Scha9\" & strBack
                End If
            Next
        End With
    Next
End Sub


Beim einbinden des Codes, in ein Makro zum suchen und öffnen von Exceldateien, bin ich dir im Bedarfsfall natürlich behilflich.
Gruß
Nepumuk
Anzeige
AW: bestehende VBA-Scribts anpassen
09.08.2004 09:03:03
Jürg
Hy Nepumuk..!!!!!
supper !!!! werde es ausprobieren und dir dann bericht geben!!!
hab im Archiv vielerots durchgesuch aber nix gefunden...
vielen Dank erstmal!
gruss
Jürg
AW: bestehende VBA-Scribts anpassen
09.08.2004 14:43:13
Jürg
Hallo Nepumuk
also habs versuchtden code in eine mappe zu pcken. habe ein modul eröffnet aber bei diesem bereich
For Each objVBC In Workbooks("Mappe1.xls").VBProject.VBComponents
spuckt es debuggen heraus
vermutlich wegen ("Mappe1.xls") den es handelt sich um viele Dateien die alle einen eigenenen Namen haben , aber das Tabellen blatt heisst immer gleich
kannst du mir da noch en weiteren Tip geben?!!!
veilen Dank!!!
mit gruss
jürg
Anzeige
AW: bestehende VBA-Scribts anpassen
09.08.2004 18:45:39
Nepumuk
Hallo Jürg,
das folgende Programm sucht sich die Mappen selbst und ändert sie. Du hast in der Routine "start" zwei Möglichkeiten.
1. Du lässt nach allen Exceldateien auf den Computer bearbeiten (Die Möglichkeit ist Momentan auskommentiert)
2. Du lässt nur die Mappen in einem Ordner bearbeiten.
Unterordner werden bei der Suche mit einbezogen. Der Rest sollte automatisch laufen. Probleme kann es geben, wenn in den Mappen Ereignisroutinen sind, die auf das öffnen reagieren.


Option Explicit
Private Declare Function FindFirstFile Lib "kernel32" Alias "FindFirstFileA" (ByVal lpFileName As String, lpFindFileData As WIN32_FIND_DATA) As Long
Private Declare Function FindNextFile Lib "kernel32" Alias "FindNextFileA" (ByVal hFindFile As Long, lpFindFileData As WIN32_FIND_DATA) As Long
Private Declare Function FindClose Lib "kernel32" (ByVal hFindFile As LongAs Long
Private Const MAX_PATH = 260
Private Const INVALID_HANDLE_VALUE = -1
Private Const FILE_ATTRIBUTE_ARCHIVE = &H20
Private Const FILE_ATTRIBUTE_DIRECTORY = &H10
Private Const FILE_ATTRIBUTE_HIDDEN = &H2
Private Const FILE_ATTRIBUTE_NORMAL = &H80
Private Const FILE_ATTRIBUTE_READONLY = &H1
Private Const FILE_ATTRIBUTE_SYSTEM = &H4
Private Const FILE_ATTRIBUTE_TEMPORARY = &H100
Private Type FILETIME
    dwLowDateTime As Long
    dwHighDateTime As Long
End Type
Private Type WIN32_FIND_DATA
    dwFileAttributes As Long
    ftCreationTime As FILETIME
    ftLastAccessTime As FILETIME
    ftLastWriteTime As FILETIME
    nFileSizeHigh As Long
    nFileSizeLow As Long
    dwReserved0 As Long
    dwReserved1 As Long
    cFileName As String * MAX_PATH
    cAlternate As String * 14
End Type
Private lngDirCount As Long
Private lngFileCount As Long
Private strFiles() As String
Public Sub start()
    Dim intIndex As Integer, strDateiname As String
    Dim myFSO As Object, myDrives As Object, myDrive As Object
    lngDirCount = 1
    lngFileCount = 0
    
'   ******************* Diesen Teil verwenden, wenn alle Mappen auf allen Laufwerke bearbeitet werden
'    Set myFSO = CreateObject("Scripting.FileSystemObject")
'    Set myDrives = myFSO.Drives
'    For Each myDrive In myDrives
'        If myDrive.IsReady Then Call FindFiles(myDrive.DriveLetter & ":\", "*.xls")
'    Next
    
'   **************************************************************************************************
'   ******************* Diesen Teil verwenden, wenn alle Mappen in einem Ordner bearbeitet werden
    Call FindFiles("D:\Eigene Dateien\Eigene Tabellen\", "*.xls")
    
'   **************************************************************************************************
    Application.ScreenUpdating = False
    For intIndex = 1 To lngFileCount
        If strFiles(intIndex) <> ThisWorkbook.FullName Then
            strDateiname = Right(strFiles(intIndex), InStr(1, StrReverse(strFiles(intIndex)), "\") - 1)
            On Error Resume Next
            Application.ScreenUpdating = False
            Workbooks.Open strFiles(intIndex)
            Call Teistring_tauschen(strDateiname)
            Workbooks(strDateiname).Close SaveChanges:=True
        End If
    Next
    Application.ScreenUpdating = True
    MsgBox "Fertig.", 64, "Info"
End Sub
Private Sub FindFiles(ByVal strFolderPath As StringByVal strSearch As String)
    Dim WFD As WIN32_FIND_DATA
    Dim lngSearch As Long
    Dim strDirName As String
    If Right$(strFolderPath, 1) <> "\" Then strFolderPath = strFolderPath & "\"
    lngSearch = FindFirstFile(strFolderPath & "*.*", WFD)
    If lngSearch <> INVALID_HANDLE_VALUE Then
        GetFilesInFolder strFolderPath, strSearch
        Do
            If (WFD.dwFileAttributes And FILE_ATTRIBUTE_DIRECTORY) Then
                strDirName = TrimNulls(WFD.cFileName)
                If (strDirName <> ".") And (strDirName <> "..") Then
                    lngDirCount = lngDirCount + 1
                    FindFiles strFolderPath & strDirName, strSearch
                End If
            End If
        Loop While FindNextFile(lngSearch, WFD)
        FindClose lngSearch
    End If
End Sub
Private Sub GetFilesInFolder(ByVal strFolderPath As StringByVal strSearch As String)
    Dim WFD As WIN32_FIND_DATA
    Dim lngSearch As Long
    Dim strFileName As String
    If Right$(strFolderPath, 1) <> "\" Then strFolderPath = strFolderPath & "\"
    lngSearch = FindFirstFile(strFolderPath & strSearch, WFD)
    If lngSearch <> INVALID_HANDLE_VALUE Then
        Do
            If (WFD.dwFileAttributes And FILE_ATTRIBUTE_DIRECTORY) <> FILE_ATTRIBUTE_DIRECTORY Then
                strFileName = TrimNulls(WFD.cFileName)
                lngFileCount = lngFileCount + 1
                ReDim Preserve strFiles(1 To lngFileCount)
                strFiles(lngFileCount) = strFolderPath & strFileName
            End If
        Loop While FindNextFile(lngSearch, WFD)
        FindClose lngSearch
    End If
End Sub
Private Function TrimNulls(ByVal strStringIn As StringAs String
    If InStr(strStringIn, Chr(0)) > 0 Then strStringIn = Left$(strStringIn, InStr(strStringIn, Chr(0)) - 1)
    TrimNulls = strStringIn
End Function
Private Sub Teistring_tauschen(strDateiname As String)
    Dim objVBC As Object, intLine As Integer, strFront As String, strBack As String
    For Each objVBC In Workbooks(strDateiname).VBProject.VBComponents
        With objVBC.CodeModule
            For intLine = 1 To .CountOfLines
                If InStr(1, .Lines(intLine, 1), "N:\PROJ\NOTIZ\Scha9\") <> 0 Then
                    strFront = Left$(.Lines(intLine, 1), InStr(1, .Lines(intLine, 1), "N:\PROJ\NOTIZ\Scha9\") - 1)
                    strBack = Mid$(.Lines(intLine, 1), InStr(1, .Lines(intLine, 1), "N:\PROJ\NOTIZ\Scha9\") + 20)
                    .DeleteLines intLine
                    .InsertLines intLine, strFront & "S:\Operations_Technology\PROJ\NOTIZ\Scha9\" & strBack
                End If
            Next
        End With
    Next
End Sub


Gruß
Nepumuk
Anzeige
AW: bestehende VBA-Scribts anpassen
10.08.2004 17:02:08
Jürg
Hallo Nepumuk
...vorerst mal viel, vielen dank!!!
habe das scribt ausprobiert ... habe bei anpassungen ein bischen leiden müssen bis ich gefunden habe wo die anz. zeichen eingestellt werden müssen..
noch ne frage : wenn bei einen directory noch eine bezeichnung hinzu kommt , wie muss den di zeichenfolge sein , wenn das komt" "" & strBack"" bekomme ich einen fehler. es muss dann noch der dateiname mitgespeichert werden
.... aber nichts desto trotz bis jetzt supper!!!
danke
mt gruss
Jürg
AW: bestehende VBA-Scribts anpassen
10.08.2004 17:12:36
Nepumuk
Hallo Jürg,
die Frage verstehe ich nicht. Was meinst du genau?
Gruß
Nepumuk
Anzeige
AW: bestehende VBA-Scribts anpassen
11.08.2004 15:03:01
Jürg
Hallo Nepumuk!!!
sorry dass ich nicht so genau das beschrieben habe . Lege noch die Datei bei wo das bestehnde scribt drinn das angepasst werden muss .. unten ist das von mir verschlimmerte scribt
Option Explicit
Private Declare Function FindFirstFile Lib "kernel32" Alias "FindFirstFileA" (ByVal lpFileName As String, lpFindFileData As WIN32_FIND_DATA) As Long
Private Declare Function FindNextFile Lib "kernel32" Alias "FindNextFileA" (ByVal hFindFile As Long, lpFindFileData As WIN32_FIND_DATA) As Long
Private Declare Function FindClose Lib "kernel32" (ByVal hFindFile As Long) As Long
Private Const MAX_PATH = 260
Private Const INVALID_HANDLE_VALUE = -1
Private Const FILE_ATTRIBUTE_ARCHIVE = &H20
Private Const FILE_ATTRIBUTE_DIRECTORY = &H10
Private Const FILE_ATTRIBUTE_HIDDEN = &H2
Private Const FILE_ATTRIBUTE_NORMAL = &H80
Private Const FILE_ATTRIBUTE_READONLY = &H1
Private Const FILE_ATTRIBUTE_SYSTEM = &H4
Private Const FILE_ATTRIBUTE_TEMPORARY = &H100
Private Type FILETIME
dwLowDateTime As Long
dwHighDateTime As Long
End Type
Private Type WIN32_FIND_DATA
dwFileAttributes As Long
ftCreationTime As FILETIME
ftLastAccessTime As FILETIME
ftLastWriteTime As FILETIME
nFileSizeHigh As Long
nFileSizeLow As Long
dwReserved0 As Long
dwReserved1 As Long
cFileName As String * MAX_PATH
cAlternate As String * 14
End Type
Private lngDirCount As Long
Private lngFileCount As Long
Private strFiles() As String
Public Sub start()
Dim intIndex As Integer, strDateiname As String
Dim myFSO As Object, myDrives As Object, myDrive As Object
lngDirCount = 1
lngFileCount = 0

' ******************* Diesen Teil verwenden, wenn alle Mappen auf allen Laufwerke bearbeitet werden
' Set myFSO = CreateObject("Scripting.FileSystemObject")
' Set myDrives = myFSO.Drives
' For Each myDrive In myDrives
' If myDrive.IsReady Then Call FindFiles(myDrive.DriveLetter & ":\", "*.xls")
' Next

' **************************************************************************************************
' ******************* Diesen Teil verwenden, wenn alle Mappen in einem Ordner bearbeitet werden
Call FindFiles("D:\test\feda", "*.xls")
Print Ersazlaufwerk; zu; ausproieren
'Call FindFiles("X:\Common\Sop\Stammdaten\Fertigungsunterlagen\Fertigungsdaten\", "*.xls")

' **************************************************************************************************
Application.ScreenUpdating = False
For intIndex = 1 To lngFileCount
If strFiles(intIndex) ThisWorkbook.FullName Then
strDateiname = Right(strFiles(intIndex), InStr(1, StrReverse(strFiles(intIndex)), "\") - 1)
On Error Resume Next
Application.ScreenUpdating = False
Workbooks.Open strFiles(intIndex)
Call Teistring_tauschen(strDateiname)
Workbooks(strDateiname).Close SaveChanges:=True
End If
Next
Application.ScreenUpdating = True
MsgBox "Fertig.", 64, "Info"
End Sub

Private Sub FindFiles(ByVal strFolderPath As String, ByVal strSearch As String)
Dim WFD As WIN32_FIND_DATA
Dim lngSearch As Long
Dim strDirName As String
If Right$(strFolderPath, 1) <> "\" Then strFolderPath = strFolderPath & "\"
lngSearch = FindFirstFile(strFolderPath & "*.*", WFD)
If lngSearch <> INVALID_HANDLE_VALUE Then
GetFilesInFolder strFolderPath, strSearch
Do
If (WFD.dwFileAttributes And FILE_ATTRIBUTE_DIRECTORY) Then
strDirName = TrimNulls(WFD.cFileName)
If (strDirName <> ".") And (strDirName <> "..") Then
lngDirCount = lngDirCount + 1
FindFiles strFolderPath & strDirName, strSearch
End If
End If
Loop While FindNextFile(lngSearch, WFD)
FindClose lngSearch
End If
End Sub


Private Sub GetFilesInFolder(ByVal strFolderPath As String, ByVal strSearch As String)
Dim WFD As WIN32_FIND_DATA
Dim lngSearch As Long
Dim strFileName As String
If Right$(strFolderPath, 1) <> "\" Then strFolderPath = strFolderPath & "\"
lngSearch = FindFirstFile(strFolderPath & strSearch, WFD)
If lngSearch <> INVALID_HANDLE_VALUE Then
Do
If (WFD.dwFileAttributes And FILE_ATTRIBUTE_DIRECTORY) <> FILE_ATTRIBUTE_DIRECTORY Then
strFileName = TrimNulls(WFD.cFileName)
lngFileCount = lngFileCount + 1
ReDim Preserve strFiles(1 To lngFileCount)
strFiles(lngFileCount) = strFolderPath & strFileName
End If
Loop While FindNextFile(lngSearch, WFD)
FindClose lngSearch
End If
End Sub


Private Function TrimNulls(ByVal strStringIn As String) As String
If InStr(strStringIn, Chr(0)) > 0 Then strStringIn = Left$(strStringIn, InStr(strStringIn, Chr(0)) - 1)
TrimNulls = strStringIn
End Function


Private Sub Teistring_tauschen(strDateiname As String)
Dim objVBC As Object, intLine As Integer, strFront As String, strBack As String
For Each objVBC In Workbooks(strDateiname).VBProject.VBComponents
With objVBC.CodeModule
For intLine = 1 To .CountOfLines
If InStr(1, .Lines(intLine, 1), "S:\sop\STAMMDATEN\FERTIGUNGSUNTERLAGEN\FERTIGUNGSDATEN\" & Filename & ".XLS") <> 0 Then
' Direktory ab bestehndem FEDA-Test hineinkopiert
strFront = Left$(.Lines(intLine, 1), InStr(1, .Lines(intLine, 1), "S:\sop\STAMMDATEN\FERTIGUNGSUNTERLAGEN\FERTIGUNGSDATEN\" & Filename & ".XLS") - 1)
strBack = Mid$(.Lines(intLine, 1), InStr(1, .Lines(intLine, 1), "S:\sop\STAMMDATEN\FERTIGUNGSUNTERLAGEN\FERTIGUNGSDATEN\" & Filename & ".XLS") + 75)
.DeleteLines intLine
.InsertLines intLine, strFront & "X:\Common\Sop\Stammdaten\Fertigungsunterlagen\Fertigungsdaten\" & Filename & ".XLS" & strBack
' NEUE Laufwerksbezeichnung mit file
End If
Next
End With
Next
End Sub

vielen Dank für deine Hilfe
Gruss
Jürg
Link zu bearbitende datei: https://www.herber.de/bbs/user/9517.xls
Anzeige
AW: bestehende VBA-Scribts anpassen
11.08.2004 15:21:34
Nepumuk
Hallo Jürg,
so geht's:


Private Sub Teistring_tauschen(strDateiname As String)
    Dim objVBC As Object, intLine As Integer, strFront As String, strBack As String
     For Each objVBC In Workbooks(strDateiname).VBProject.VBComponents
           With objVBC.CodeModule
            For intLine = 1 To .CountOfLines
                If InStr(1, UCase$(.Lines(intLine, 1)), "S:\SOP\STAMMDATEN\FERTIGUNGSUNTERLAGEN\FERTIGUNGSDATEN\") <> 0 Then
                ' Direktory ab bestehndem FEDA-Test hineinkopiert
                    strFront = Left$(.Lines(intLine, 1), InStr(1, UCase$(.Lines(intLine, 1)), "S:\SOP\STAMMDATEN\FERTIGUNGSUNTERLAGEN\FERTIGUNGSDATEN\") - 1)
                    strBack = Mid$(.Lines(intLine, 1), InStr(1, UCase$(.Lines(intLine, 1)), "S:\SOP\STAMMDATEN\FERTIGUNGSUNTERLAGEN\FERTIGUNGSDATEN\") + 55)
                    .DeleteLines intLine
                    .InsertLines intLine, strFront & "X:\Common\Sop\Stammdaten\Fertigungsunterlagen\Fertigungsdaten\" & strBack
                    ' NEUE Laufwerksbezeichnung mit file
                    Stop
                End If
            Next
        End With
    Next
End Sub


Gruß
Nepumuk
Anzeige
AW: bestehende VBA-Scribts anpassen
12.08.2004 16:04:46
Jürg
Hallo Nepumuk
erstens möchte ich mich dür deinen Service bedanken! es ist alles geändert!
habe aber trotzdem doch eine Frage : wie siehr das ganze bei word aplikationen aus ... kann ich einfach das gleiche mit der eingabe doc laufen lassen?
mit Gruss
Jürg
AW: bestehende VBA-Scribts anpassen
12.08.2004 16:17:50
Nepumuk
Hallo Jürg,
da frägst du den falschen. Von Word habe ich keine Ahnung oder fast keine. Die Spezialisten dafür findest du hier:
http://spotlight.de/zforen/msw/t/forum_msw_1.html
http://www.vb-fun.de/vb/index.htm
http://www.ms-office-forum.net/forum/index.php
http://foren.activevb.de/cgi-bin/foren/list.pl?forum=7&id=a4103298617b89fc0ba5ab4bbc00ade4
http://www.office-loesung.de/index.php?c=2&sid=f3785e1c5ba829ae07e10d78c22645be
http://support.microsoft.com/newsgroups/default.aspx?ICP=GSS3&NewsGroup=microsoft.public.de.word&SLCID=DE&sd=GN&id=fh;DE;NEWSGROUPS
Aber es gibt sicher noch viele andere.
Gruß
Nepumuk
Anzeige
AW: bestehende VBA-Scribts anpassen
Jürg
Hallo Nepumuk
vielen Dank für deine bemühungen es hatt alles gut funktioniert!!!
mit Gruss
Jürg

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige