Toon posts:

[Excel][VBA] Macro op meerdere bestanden.

Pagina: 1
Acties:
  • 174 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Ik heb een leuke macro, die ik toe moet passen op ongeveer 70 excel bestanden. Dat kan handmatig, maar dat is natuurlijk niet leuk. Is er een manier om een macro toe te passen op alle geopende bestanden, of op alle bestanden uit een bestaande directory? Ik kan (bijna) geen Visual Basic, dus een oplossing in VBA is voor mij het handigst. Iemand een idee, of tips die leiden naar een eureka-moment bij mij?

  • Schonhose
  • Registratie: April 2000
  • Laatst online: 01-09 09:29

Schonhose

Retro Icoon

Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
Dim i As Integer
Dim FileNaam As String
Dim Naam As String
Dim xlFiles() As String
Dim dirpath As String
Dim MyFile As String

Sub SelectData()

Dim Msg As String


'''*********************************************************************************
'''   Sub     : SelectData()
'''   Subject : Displays a directory selector
'''   Comment :
'''   Date    : Juli 25, 2000
'''
'''*********************************************************************************
  Application.ScreenUpdating = False
    Worksheets("temp").Select
  Application.ScreenUpdating = True
  Msg = "Please locate your data..."
  dirpath = GetDirectory(Msg)
  If dirpath = "" Then 'user pressed cancel
    deleteTempSheet
    ActiveWorkbook.Close False ' closes the active workbook without saving any changes
    Exit Sub
  End If
  'Change directory
  ChDir dirpath
  i = 0
  MyFile = Dir(dirpath, vbDirectory)
  Do While MyFile <> ""
    ReDim Preserve xlFiles(0 To i)
    xlFiles(i) = MyFile
    MyFile = Dir
    i = i + 1
  Loop
  NumberOfFiles = i
  If UBound(xlFiles) = 0 Then
    'No files found on path handling
    MsgBox _
        "No files found in selected directory", _
        vbExclamation, _
        "For Your Information..."
        CleanUp
        Exit Sub
  End If
End Sub
Sub ProcessFilenames()

Dim startpositie As String
Dim k As Integer
Dim i As Integer

'''*********************************************************************************
'''   Sub     : ProcessFilenames()
'''   Subject : Writes and reads the found filenames to a temp sheet
'''   Comment :
'''   Date    : Juli 25, 2000
'''
'''*********************************************************************************

    Application.ScreenUpdating = False
    'Fill activesheet with filenames found
    With ActiveSheet
        .Select
        .UsedRange.Clear
        'Paste directory
        .Cells(1, 1).Value = dirpath
        For i = 1 To UBound(xlFiles)
        'Paste filename
            .Cells(i + 1, 1).Value = LCase(dirpath & xlFiles(i))
            .Cells(i + 1, 2).Value = i
            'Application.StatusBar = xlFiles(i) & "   i:" & i
        Next
    End With
    Cells(3, 1).Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Sort Key1:=Range("A3"), Order1:=xlAscending, Header:=xlGuess, _
        OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
  End Sub


Wat oude code van mij welke alle bestanden in een directory in een sheet zet.
Deze kun je met een loopje 1 voor 1 openen en dan de actie die je wilt er op los laten.

Ook al staat de macro in een andere file, hij wordt altijd uitgevoerd op de active venster.

"The thing under my bed waiting to grab my ankle isn't real. I know that, and I also know that if I'm careful to keep my foot under the covers, it will never be able to grab my ankle." - Stephen King
Quinta: 3 januari 2005


Verwijderd

Topicstarter
Hrmz, zoals ik al zei, ik kan bijna geen Visual Basic... Is er geen snellere oplossing voorhanden? Ik kan mezelf wel VB aanleren, maar ik moet andere mensen er ook mee leren werken. En aangezien dat vrouwen zijn, raken ze hopeloos in de war als ze meer dan 3 handelingen op een PC moeten doen :)

Edit:
Wat ik me nu bedenk... een standalone dingetje in VB waar je een dir op kan geven waarna de macro op alle files in die dir toegepast word is natuurlijk helemaal ideaal. Is dat met die code van jou te doen, of wordt het dan echt ingewikkeld?

Edit 2:
Met een beetje houtje-touwtje denken ben ik eruit, iig voor nu: dir /b >list.txt, dat lijstje copy/pasten naar excel, en in de macro Workbooks.Open Filename:=Range("E" & z). Zo'n command prompt, is die eigenlijk vanuit VBA aan te roepen?

[ Voor 50% gewijzigd door Verwijderd op 12-06-2003 09:31 ]