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?
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
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?
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 ]