Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1136to1140
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
Inhaltsverzeichnis

VBA Script

VBA Script
Achim
Hallo Leute
Brauche mal wieder hilfe
Ich habe einen Ordner der Preisliten in Unterorner enthält
Beispiel: Preislisten\Folien.... Preislisten\Handwerkszeuge und so weiter, also Hauptverzeichnis (Preislisten mit vielen Unterverzeichnissen)
Diese Excel Tabellen enthalten alle ein Autostartmakro das die Tabellen aktualisiert und wieder Schließt.
Nun wäre es gut wenn mann die Tabellen per Script oder Makro nacheinander öffnet und wenn die erste wieder geschlossen ist die nächte usw. Das könnte dan per Taskmanager automatisch jeden ersten des Monats passieren. Sind ca. 910 Tabellnen.
Es müssen aber alle in den Unterverzeichnissen enthaltenen Orner angesprochen werden, geht das.
Folgende Funtion geht leider nur wenn alle Tabellen in einem Verzeichnis sind

Sub AlleOeffnen()
Dim sDatei As String, sPfad As String
Application.ScreenUpdating = False
sPfad = "\\Debian-raid\DATEN\Preislisten\Folien"
If Right(sPfad, 1)  "/" Then
sPfad = sPfad & "\"
End If
sDatei = Dir(sPfad & "*.xls")
Do While sDatei  ""
Workbooks.Open sPfad & sDatei
sDatei = Dir()
Loop
Application.ScreenUpdating = True
End Sub

Wie muß die Funtion umgebaut werden das alle unterverzeichnisse ausgewählt werden.
Danke schon mal....
AW: VBA Script
06.02.2010 10:41:24
Ramses
Hallo
Grundsätzlich möglich, aber kannst du noch das Autostart Makro zeigen ?
Gruss Rainer
AW: VBA Script
06.02.2010 10:52:43
aCHIM
Das Autostart makro
Sub workbook_open()
Preis_Akt
End Sub

AW: VBA Script
06.02.2010 10:55:25
Ramses
Hallo
Kannst du das Makro "Preis_Akt" auch noch zeigen ?
Gruss Rainer
AW: VBA Script
06.02.2010 11:37:19
Ramses
Hallo
Mal ohne Berücksichtigung zeitintensiver Aktualisierung
Erstelle eine Neue Mappe und speichere diese im Basisverzeichnis "\\Debian-raid\DATEN\Preislisten\" unter dem Namen "Preis_Update.xls"
Erstelle diese AutoOpen-Anweisung in dieser Mappe
Private Sub Workbook_Open()
Preis_Update_All_Files
End Sub
Füge ein neues Modul ein und kopiere dorthin diesen Code
Option Explicit

'Beginn CodeSequenz Alternative FileSearch 2007
'by Nepumuk
Public Enum SORT_BY
Sort_by_None
Sort_by_Name
Sort_by_Path
Sort_by_Size
Sort_by_Last_Access
Sort_by_Last_Modyfy
Sort_by_Date_Create
End Enum

Public Enum SORT_ORDER
Sort_Order_Ascending
Sort_Order_Descending
End Enum

Public Type FILEINFO
    strFilename As String
    strPath As String
    lngSize As Long
    dmtLastAccess As Date
    dmtLastModify As Date
    dmtDateCreate As Date
End Type

Public Sub Preis_Update_All_Files()
    'Code im Klassenmodul "clsFileSearch" Bestandteil dieser Funktion
    'by Nepumuk
    'Modified by Ramses
    Dim objFileSearch As clsFileSearch
    Dim lngIndex As Long
    Dim appStatus As Variant
    Set objFileSearch = New clsFileSearch
    appStatus = Application.StatusBar
    With objFileSearch
        .CaseSenstiv = True
        .Extension = "*.xls"
        .FolderPath = "\\Debian-raid\DATEN\Preislisten\"
        .SearchLike = "*"
        .SubFolders = True
        If .Execute(Sort_by_Size, Sort_Order_Descending) > 0 Then
            For lngIndex = 1 To .FileCount
                Application.StatusBar = "Datei " & lngIndex & " von " & .FileCount & " = " & .Files(lngIndex).strFilename
                With .Files(lngIndex)
                    'Kontrolle zur Funktion aller Datein
                    'Der Rest in With Schleife kann dann ausgeklammert werden
                    Debug.Print .strFilename, .lngSize
                    ''Modifikation Ramses
                    'zum öffnen einer Anzahl X-XLS-files zur Aktualisierung
                    'aus allen vorkommenden Files in und Unterordnern eines
                    'definierten Folders
                    'Ereignisse abschalten
                    Application.EnableEvents = False
                    'Datei öffnen
                    Workbooks.Open .strFilename
                    'spezifisches Makro starten
                    Application.Run .strFilename & "!PreisAkt"
                    'Datei schliessen und speichern = TRUE
                    ActiveWorkbook.Close , True
                    'Ereignisse wieder aktiveren
                    Application.EnableEvents = True
                End With
            Next
        End If
    End With
    Application.StatusBar = appStatus
    Set objFileSearch = Nothing
End Sub
'Ende CodeSequenz by Nepumuk

Erstelle jetzt noch ein neues Klassenmodul und benenne dieses Klassenmodul mit dem Namen "clsFileSearch" und kopiere dorthin diesen Code
Option Explicit

'Classmodule Code developed by Nepumuk
Private Declare Function FindFirstFile Lib "kernel32.dll" Alias "FindFirstFileA" ( _
    ByVal lpFileName As String, _
    ByRef lpFindFileData As WIN32_FIND_DATA) As Long

Private Declare Function FindNextFile Lib "kernel32.dll" Alias "FindNextFileA" ( _
    ByVal hFindFile As Long, _
    ByRef lpFindFileData As WIN32_FIND_DATA) As Long

Private Declare Function FindClose Lib "kernel32.dll" ( _
    ByVal hFindFile As Long) As Long

Private Declare Function FileTimeToLocalFileTime Lib "kernel32.dll" ( _
    ByRef lpFileTime As FILETIME, _
    ByRef lpLocalFileTime As FILETIME) As Long

Private Declare Function FileTimeToSystemTime Lib "kernel32.dll" ( _
    ByRef lpFileTime As FILETIME, _
    ByRef lpSystemTime As SYSTEMTIME) As Long


Private Enum FILE_ATTRIBUTE
FILE_ATTRIBUTE_READONLY = &H1
FILE_ATTRIBUTE_HIDDEN = &H2
FILE_ATTRIBUTE_SYSTEM = &H4
FILE_ATTRIBUTE_DIRECTORY = &H10
FILE_ATTRIBUTE_ARCHIVE = &H20
FILE_ATTRIBUTE_NORMAL = &H80
FILE_ATTRIBUTE_TEMPORARY = &H100
End Enum

Private Const MAX_PATH = 260&
Private Const INVALID_HANDLE_VALUE = -1&

Private Type FILETIME
    dwLowDateTime As Long
    dwHighDateTime As Long
End Type

Private Type SYSTEMTIME
    wYear As Integer
    wMonth As Integer
    wDayOfWeek As Integer
    wDay As Integer
    wHour As Integer
    wMinute As Integer
    wSecond As Integer
    wMilliseconds As Integer
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 mlngFileCount As Long
Private mudtFiles() As FILEINFO
Private mstrFolderPath As String
Private mstrExtension As String
Private mstrSearchLike As String
Private mblnSubFolders As Boolean
Private mblnCaseSenstiv As Boolean

Friend Property Get Files(lngIndex As Long) As FILEINFO
    Files = mudtFiles(lngIndex)
End Property

Friend Property Get FileCount() As Long
    FileCount = mlngFileCount
End Property

Friend Property Let FolderPath(strFolderPath As String)
    mstrFolderPath = strFolderPath
End Property

Friend Property Let Extension(strExtension As String)
    mstrExtension = strExtension
End Property

Friend Property Let SearchLike(strSearchLike As String)
    mstrSearchLike = strSearchLike
End Property

Friend Property Let SubFolders(blnSubFolders As Boolean)
    mblnSubFolders = blnSubFolders
End Property

Friend Property Let CaseSenstiv(blnCaseSenstiv As Boolean)
    mblnCaseSenstiv = blnCaseSenstiv
End Property

Friend Function Execute(Optional enmSortBy As SORT_BY = Sort_by_None, _
    Optional enmSortOrder As SORT_ORDER = Sort_Order_Ascending) As Long

    Call FindFiles(mstrFolderPath)
    If mlngFileCount > 1 And enmSortBy <> Sort_by_None Then _
    Call prcSort(1, mlngFileCount, enmSortBy, enmSortOrder)
    Execute = mlngFileCount
End Function

Private Sub FindFiles(ByVal strFolderPath As String)
    Dim WFD As WIN32_FIND_DATA, lngSearch As Long, strDirName As String
    On Error GoTo ErrorHandling
    If Right$(strFolderPath, 1) <> "\" Then strFolderPath = strFolderPath & "\"
    lngSearch = FindFirstFile(strFolderPath & "*.*", WFD)
    If lngSearch <> INVALID_HANDLE_VALUE Then
        Call GetFilesInFolder(strFolderPath)
        If mblnSubFolders Then
            Do
                If (WFD.dwFileAttributes And FILE_ATTRIBUTE_DIRECTORY) Then
                    strDirName = Left$(WFD.cFileName, InStr(WFD.cFileName, Chr$(0)) - 1)
                    If (strDirName <> ".") And (strDirName <> "..") Then _
                    Call FindFiles(strFolderPath & strDirName)
                End If
            Loop While FindNextFile(lngSearch, WFD)
        End If
        FindClose lngSearch
    End If
    Exit Sub
    ErrorHandling:
    MsgBox "Fehler " & CStr(Err.Number) & vbLf & vbLf & _
    Err.Description, vbCritical, "Fehler"
End Sub

Private Sub GetFilesInFolder(ByVal strFolderPath As String)
    Dim WFD As WIN32_FIND_DATA, lngSearch As Long, strFilename As String
    Dim udtFiletime As FILETIME, udtSystemtime As SYSTEMTIME
    On Error GoTo ErrorHandling
    If Right$(strFolderPath, 1) <> "\" Then strFolderPath = strFolderPath & "\"
    lngSearch = FindFirstFile(strFolderPath & mstrExtension, WFD)
    If lngSearch <> INVALID_HANDLE_VALUE Then
        Do
            If (WFD.dwFileAttributes And FILE_ATTRIBUTE_DIRECTORY) <> FILE_ATTRIBUTE_DIRECTORY Then
                strFilename = Left$(WFD.cFileName, InStr(WFD.cFileName, Chr$(0)) - 1)
                If IIf(mblnCaseSenstiv, strFilename, LCase$(strFilename)) Like _
                    IIf(mblnCaseSenstiv, mstrSearchLike, LCase$(mstrSearchLike)) Then
                    mlngFileCount = mlngFileCount + 1
                    ReDim Preserve mudtFiles(1 To mlngFileCount)
                    With mudtFiles(mlngFileCount)
                        .strPath = strFolderPath & strFilename
                        .strFilename = strFilename
                        .lngSize = WFD.nFileSizeLow
                        FileTimeToLocalFileTime WFD.ftCreationTime, udtFiletime
                        FileTimeToSystemTime udtFiletime, udtSystemtime
                        .dmtDateCreate = CDate(DateSerial(udtSystemtime.wYear, udtSystemtime.wMonth, udtSystemtime.wDay) + _
                        TimeSerial(udtSystemtime.wHour, udtSystemtime.wMinute, udtSystemtime.wSecond))
                        FileTimeToLocalFileTime WFD.ftLastAccessTime, udtFiletime
                        FileTimeToSystemTime udtFiletime, udtSystemtime
                        .dmtLastAccess = CDate(DateSerial(udtSystemtime.wYear, udtSystemtime.wMonth, udtSystemtime.wDay) + _
                        TimeSerial(udtSystemtime.wHour, udtSystemtime.wMinute, udtSystemtime.wSecond))
                        FileTimeToLocalFileTime WFD.ftLastWriteTime, udtFiletime
                        FileTimeToSystemTime udtFiletime, udtSystemtime
                        .dmtLastModify = CDate(DateSerial(udtSystemtime.wYear, udtSystemtime.wMonth, udtSystemtime.wDay) + _
                        TimeSerial(udtSystemtime.wHour, udtSystemtime.wMinute, udtSystemtime.wSecond))
                    End With
                End If
            End If
        Loop While FindNextFile(lngSearch, WFD)
        FindClose lngSearch
    End If
    Exit Sub
    ErrorHandling:
    MsgBox "Fehler " & CStr(Err.Number) & vbLf & vbLf & _
    Err.Description, vbCritical, "Fehler"
End Sub

Private Sub prcSort(lngLBorder As Long, lngUBorder As Long, enmSortBy As SORT_BY, enmSortOrder As SORT_ORDER)
    Dim lngIndex1 As Long, lngIndex2 As Long
    Dim udtBuffer As FILEINFO, vntTemp As Variant
    lngIndex1 = lngLBorder
    lngIndex2 = lngUBorder
    Select Case enmSortBy
        Case Sort_by_Name: vntTemp = mudtFiles((lngLBorder + lngUBorder) \ 2).strFilename
        Case Sort_by_Path: vntTemp = mudtFiles((lngLBorder + lngUBorder) \ 2).strPath
        Case Sort_by_Size: vntTemp = mudtFiles((lngLBorder + lngUBorder) \ 2).lngSize
        Case Sort_by_Last_Access: vntTemp = mudtFiles((lngLBorder + lngUBorder) \ 2).dmtLastAccess
        Case Sort_by_Last_Modyfy: vntTemp = mudtFiles((lngLBorder + lngUBorder) \ 2).dmtLastModify
        Case Sort_by_Date_Create: vntTemp = mudtFiles((lngLBorder + lngUBorder) \ 2).dmtDateCreate
    End Select
    Do
        Select Case enmSortBy
            Case Sort_by_Name
                If enmSortOrder = Sort_Order_Ascending Then
                    Do While mudtFiles(lngIndex1).strFilename < vntTemp
                        lngIndex1 = lngIndex1 + 1
                    Loop
                    Do While vntTemp < mudtFiles(lngIndex2).strFilename
                        lngIndex2 = lngIndex2 - 1
                    Loop
                Else
                    Do While mudtFiles(lngIndex1).strFilename > vntTemp
                        lngIndex1 = lngIndex1 + 1
                    Loop
                    Do While vntTemp > mudtFiles(lngIndex2).strFilename
                        lngIndex2 = lngIndex2 - 1
                    Loop
                End If
            Case Sort_by_Path
                If enmSortOrder = Sort_Order_Ascending Then
                    Do While mudtFiles(lngIndex1).strPath < vntTemp
                        lngIndex1 = lngIndex1 + 1
                    Loop
                    Do While vntTemp < mudtFiles(lngIndex2).strPath
                        lngIndex2 = lngIndex2 - 1
                    Loop
                Else
                    Do While mudtFiles(lngIndex1).strPath > vntTemp
                        lngIndex1 = lngIndex1 + 1
                    Loop
                    Do While vntTemp > mudtFiles(lngIndex2).strPath
                        lngIndex2 = lngIndex2 - 1
                    Loop
                End If
            Case Sort_by_Size
                If enmSortOrder = Sort_Order_Ascending Then
                    Do While mudtFiles(lngIndex1).lngSize < vntTemp
                        lngIndex1 = lngIndex1 + 1
                    Loop
                    Do While vntTemp < mudtFiles(lngIndex2).lngSize
                        lngIndex2 = lngIndex2 - 1
                    Loop
                Else
                    Do While mudtFiles(lngIndex1).lngSize > vntTemp
                        lngIndex1 = lngIndex1 + 1
                    Loop
                    Do While vntTemp > mudtFiles(lngIndex2).lngSize
                        lngIndex2 = lngIndex2 - 1
                    Loop
                End If
            Case Sort_by_Last_Access
                If enmSortOrder = Sort_Order_Ascending Then
                    Do While mudtFiles(lngIndex1).dmtLastAccess < vntTemp
                        lngIndex1 = lngIndex1 + 1
                    Loop
                    Do While vntTemp < mudtFiles(lngIndex2).dmtLastAccess
                        lngIndex2 = lngIndex2 - 1
                    Loop
                Else
                    Do While mudtFiles(lngIndex1).dmtLastAccess > vntTemp
                        lngIndex1 = lngIndex1 + 1
                    Loop
                    Do While vntTemp > mudtFiles(lngIndex2).dmtLastAccess
                        lngIndex2 = lngIndex2 - 1
                    Loop
                End If
            Case Sort_by_Last_Modyfy
                If enmSortOrder = Sort_Order_Ascending Then
                    Do While mudtFiles(lngIndex1).dmtLastModify < vntTemp
                        lngIndex1 = lngIndex1 + 1
                    Loop
                    Do While vntTemp < mudtFiles(lngIndex2).dmtLastModify
                        lngIndex2 = lngIndex2 - 1
                    Loop
                Else
                    Do While mudtFiles(lngIndex1).dmtLastModify > vntTemp
                        lngIndex1 = lngIndex1 + 1
                    Loop
                    Do While vntTemp > mudtFiles(lngIndex2).dmtLastModify
                        lngIndex2 = lngIndex2 - 1
                    Loop
                End If
            Case Sort_by_Date_Create
                If enmSortOrder = Sort_Order_Ascending Then
                    Do While mudtFiles(lngIndex1).dmtDateCreate < vntTemp
                        lngIndex1 = lngIndex1 + 1
                    Loop
                    Do While vntTemp < mudtFiles(lngIndex2).dmtDateCreate
                        lngIndex2 = lngIndex2 - 1
                    Loop
                Else
                    Do While mudtFiles(lngIndex1).dmtDateCreate > vntTemp
                        lngIndex1 = lngIndex1 + 1
                    Loop
                    Do While vntTemp > mudtFiles(lngIndex2).dmtDateCreate
                        lngIndex2 = lngIndex2 - 1
                    Loop
                End If
        End Select
        If lngIndex1 <= lngIndex2 Then
            udtBuffer = mudtFiles(lngIndex1)
            mudtFiles(lngIndex1) = mudtFiles(lngIndex2)
            mudtFiles(lngIndex2) = udtBuffer
            lngIndex1 = lngIndex1 + 1
            lngIndex2 = lngIndex2 - 1
        End If
    Loop Until lngIndex1 > lngIndex2
    If lngLBorder < lngIndex2 Then Call prcSort(lngLBorder, lngIndex2, enmSortBy, enmSortOrder)
    If lngIndex1 < lngUBorder Then Call prcSort(lngIndex1, lngUBorder, enmSortBy, enmSortOrder)
End Sub


Speichere und schliesse die Datei.
Damit sollte es eigentlich funktionieren. Eigentlich,.... weil testen nicht möglich :-)
Gruss Rainer
Anzeige
Der wird ein Problem mit den leider...
09.02.2010 17:03:43
Luc:-?
...durch die Tool-Automatik falsch umgebrochenen Zeilen haben, falls er ahnungslos genug ist, Rainer,
oder/und ist mit dem Einrichten von Klassenmodulen schlicht überfordert.
Nu hatta wat unn haddoh nischt... ;-)
Gruß Luc :-?
AW: Der wird ein Problem mit den leider...
09.02.2010 22:54:51
Ramses
Hallo
"...und ist mit dem Einrichten von Klassenmodulen schlicht überfordert...:"
Ist doch beschrieben was er zu machen hat.
Wo ist das Problem :-)
Wenn er beim ersten Mal (einfügen Modul) aufpasst, sieht er, dass dort die Option "Klassenmodul" steht.
Ansonsten muss er halt nachfragen.
Da kenne ich keine Gnade :-)
Gruss Rainer
Anzeige
Recht so...! ;-) Gruß owT
10.02.2010 14:20:46
Luc:-?
:-?
AW: Recht so...! ;-) Gruß owT
10.02.2010 17:57:07
Achim
Hallo...
bin nur Froh, dass wir solche Geistesgrößen in Deutschland haben. Vielleicht ist es hilfreich ab und zu zu lesen, (das soll Bilden habe ich gehört) dann hättest du feststellen können dass ich lediglich mit dem benennen des Moduls Probleme hatte, welche ich jedoch dank deiner Hilfe nun auch gelöst habe.
Ich denke mal dass ich dich nach dem Skineffekt und dessen berechnung nicht fragen brauche das weiß du…..
Gruß Achim
Wen meinst du denn nun,...
11.02.2010 15:20:32
Luc:-?
...Achim,
meine Antwort galt nur Ramses... Und irgendeine fachliche Kompetenz hatte ich dir ja auch nicht abgesprochen. Designer arbeiten idR nicht mit VBA oder worauf immer sich deine Bemerkung bezieht. Ich versuche ja auch nicht, spezielles Fach- oder Allgemeinwissen bei dir „anzubohren“ - für VBA gibt's aber Regeln, nennen sich Syntax... :->
...und Ramses ggüber wäre das auch ungerecht und übrigens nicht zutreffend, denn er ist Schweizer...
„Beiße nie die Hand, die dir Futter gibt!“ :-|
Luc :-?
Anzeige
AW: Wen meinst du denn nun,...
11.02.2010 17:52:52
Achim
Hallo luc-?
ich meinte bei meinen ausführungen eigentlich dich, da ich deine Anwort auf mich und meine Unkennis in VBA bezogen habe. Da das offentsichtlich falsch war möchte ich mich daher bei dir Entschuldigen. Übrings bezog sich meine Bemerkung auf die Elektrotechnik - Bin Techniker _ sorry.
sonst alles Gute
Gruß Achim
Aha, E-Technik-Hierarchiestufe 3 wohl...
12.02.2010 03:43:24
Luc:-?
War zu faul zum Wikipeden und als interessierter Laie sollte/könnte ich evtl schon mal was davon gehört haben, bin aber eigentl kaum über Licht und Schatten hinaus... ;-)
Gruß Luc :-?
Nee, doch alle Hierarchiestufen... ;-) owT
12.02.2010 13:42:04
Luc:-?
:-?
AW: VBA Script
09.02.2010 18:17:37
Achim
Hallo....
es tut mir leid wenn du denkst ich will hier nur abzocken, aber dein Macro von Sonntag geht so nicht und leider kann ich nicht rauskriegen woran es liegt......
Das kleine Makro welches ich dabeigelegt habe (auch nicht von mir) geht, aber leider nicht über das Haupverzeichnis hinweg.
Ich war schon mächtig erschrocken über das lange Makro was auch noch in zwei verschiedene Module geht, was weiß dennn ich schon was ein Klassenmodul ist und wie man das benennt.
Ich bin Blutiger VBA Anfänger.....
sorry....
Anzeige
AW: VBA Script
09.02.2010 22:51:34
Ramses
Hallo
"...Das kleine Makro welches ich dabeigelegt habe (auch nicht von mir) geht,..:"
aber eben nicht mehr unter E2007
Es ist nicht mein Problem wenn du VBA-Neuling bist und keine Ahnung hast.
Du willst eine Lösung, du hast sie. Über den Umfang kannst du dich wundern, aber es geht eben nicht mehr anders.
Wenn du Fragen hast oder wenn etwas unklar ist, musst du halt nochmals nachfragen.
Gruss Rainer
AW: VBA Script
09.02.2010 16:53:28
Achiim
Hallo....
es tut mir leid wenn du denkst dass ich nur in Foren bin zwecks Abzocke...
Dein Script von Sonntag macht nur Fehlermeldungen.
Da ich leider nicht über ausreichend VBA Kennnisse verfüge kann ich daS sCRIP AUCH NICHT NACHVOLLZIEHEN UM fEHLER ZU FINDEN:
Es ist mir auch nicht verständlich das dass Script so lang ist, wenn man bedenkt das dass script welches ich mit ins Forum eingestellt habe (auch nicht von mir) innerhalb ders Ordners funtionioert, nur die unterordner nicht mit einbezieht.
sorry....
Anzeige
Was ist los ? Kein Interesse mehr o.w.T.
08.02.2010 19:26:41
Ramses
...
AW: Was ist los ? Kein Interesse mehr o.w.T.
09.02.2010 18:23:08
Achim
es tut mir leid wenn du denkst dass ich nur in Foren bin zwecks Abzocke...
Dein Script von Sonntag macht nur Fehlermeldungen.
Da ich leider nicht über ausreichend VBA Kennnisse verfüge kann ich daS sCRIP AUCH NICHT NACHVOLLZIEHEN UM fEHLER ZU FINDEN:
Es ist mir auch nicht verständlich das dass Script so lang ist, wenn man bedenkt das dass script welches ich mit ins Forum eingestellt habe (auch nicht von mir) innerhalb ders Ordners funtionioert, nur die unterordner nicht mit einbezieht.
Ich bin Blutiger VBA Neuling.. sorry
sorry....
AW: Was ist los ? Kein Interesse mehr o.w.T.
09.02.2010 22:49:03
Ramses
Hallo
Der Code wurde von mir getestet und funktioniert.
WAS funktioniert denn nicht.
Das ist eine miserable Grundhaltung von Dir kein Feedback mehr zu geben und stattdessen die gleiche Frage neu zu stellen
Gruss Rainer
Anzeige
AW: Was ist los ? Kein Interesse mehr o.w.T.
10.02.2010 08:42:07
Achim
Hallo
im ersten teil Deiner Funktion (Modul1)
(Public Sub Preis_Update_All_Files()
'Code im Klassenmodul "clsFileSearch" Bestandteil dieser Funktion
'by Nepumuk
'Modified by Ramses
Dim objFileSearch As clsFileSearch
kommt folgende Fehlermeldung "Fehler beim Kompilieren - Benutzerdefinierter Typ anstelle eines Projekts erwartet" und Excel steht und die Zeile "Public Sub Preis_Update_All_Files()" wird gelb....
warum....
gruß Achim
AW: Was ist los ? Kein Interesse mehr o.w.T.
10.02.2010 09:40:18
Ramses
Hallo
zum anschauen
https://www.herber.de/bbs/user/67881.xls
Gruss Rainer
Anzeige
AW: Was ist los ? Kein Interesse mehr o.w.T.
10.02.2010 17:41:29
Achim
Hallo und Danke ersmal das du dir die Mühe gemachst hast, alles in eine Datei reinzubauen, so das ich endlich sehe wie das aussehen sollte.
Aber leider funzt das immer noch nicht , bricht mit einem Laufzeitfehler(1004)(Meldung A3.xls(ist der Dateiname) wurde nicht gefunden....., es gibt zur Zeit zu Testzwecken nur 2 Dateien in einem Unterordner die das Script finden soll) ab.
Meine Vermutung, es hägt mit der Internetaktualisierung ca. 5-15 Sekunden je nach Datenbestand zusammen.
With .Files(lngIndex)
'Kontrolle zur Funktion aller Datein
'Der Rest in With Schleife kann dann ausgeklammert werden
Debug.Print .strFilename, .lngSize
''Modifikation Ramses
'zum öffnen einer Anzahl X-XLS-files zur Aktualisierung
'aus allen vorkommenden Files in und Unterordnern eines
'definierten Folders
'Ereignisse abschalten
Application.EnableEvents = False
'Datei öffnen
Workbooks.Open .strFilename
'spezifisches Makro starten
Application.Run .strFilename & "!PreisAkt"
'Datei schliessen und speichern = TRUE
ActiveWorkbook.Close , True
'Ereignisse wieder aktiveren
Application.EnableEvents = True
End With
Next
End If
End With
Application.StatusBar = appStatus
Set objFileSearch = Nothing
End Sub
leider keine Ahnung wo ich Ansetzen soll....
Gruß Achim
Anzeige
AW: Was ist los ? Kein Interesse mehr o.w.T.
10.02.2010 20:34:55
Ramses
Hallo
*":..Meine Vermutung, es hägt mit der Internetaktualisierung ca. 5-15 Sekunden je nach Datenbestand zusamme..."
Was heisst "Internetaktualisierung" ?
Ich denke der Pfad ist bei Euch im Netzwerk.
Du kannst alternativ mal das probieren.
Application.EnableEvents = True
End With
application.Wait now + timeserial(0,0,5)
Next
End If
Die 5 gibt an, 5 Sekunden zu warten mit der Ausführung des nächsten Befehls, also dem öffnen der nächsten Datei
Gruss Rainer
AW: Was ist los ? Kein Interesse mehr o.w.T.
11.02.2010 12:25:41
Achim
Hallo
danke erstmal für die info, scheint aber eine andere Ursache zu haben.
Wenn ich das script so wie unten verändere (auskommentier) dann laäuft das teil aber ohne die Tabellen zu öffnen.
Es zeigt mit in der Statusleiste die Anzahl der files sowie Datei x von x und so weiter und läuft bis zum ende.
Wenn ich dann aber wieder die Zeile mit dem "Workbooks.Open .strFilename" aktiviere bleibt das Script wieder mit der gleichen Fehlermeldung wie gestern stehen.
Meine vermutung ist das es den Namen vom file wohl weiß aber den Speicherort vergessen hat.
die variablen scheinen bis auf die Pfad angabe zu stimmen.
Die dateien liegen auf dem unserem Server und können einzeln von da gestartet werden.
Dabei aktualisieren sich die Daten aus dem Internet und schließen sich selber.
In der Variable "strFilename" steht nur der Name der Datei die geöffnet werden soll aber kein Pfad.
Woher weiß Excel wo bzw. in welchem Unterverzeichnis die Dateien sind...?
With .Files(lngIndex)
'Kontrolle zur Funktion aller Datein
'Der Rest in With Schleife kann dann ausgeklammert werden
Debug.Print .strFilename, .lngSize
''Modifikation Ramses
'zum öffnen einer Anzahl X-XLS-files zur Aktualisierung
'aus allen vorkommenden Files in und Unterordnern eines
'definierten Folders
'Ereignisse abschalten
'Application.EnableEvents = False
'Datei öffnen
' Workbooks.Open .strFilename
'spezifisches Makro starten
'Application.Run .strFilename & "!PreisAkt"
'Datei schliessen und speichern = TRUE
'ActiveWorkbook.Close , True
'Ereignisse wieder aktiveren
'Application.EnableEvents = True
End With
Gruß Achim
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige