Ik bben met je eens dat dit -vanuit het aspect van uitvoeringsgemak, je weet, zei je, weinig van VBA- niet optimaal is.
Echter, ik gok dat je er niet aan ontkomt VBA te gebruiken, niet specifiek dit brokje code, om dit probleem op te lossen, wanneer blijkt dat de INDIRECT formules van hierboven alleen werken als je werkboeken open zijn.
Wat ik me kan voorstellen, als oplossingsrichting is een wijziging in het stukje code van hierboven.
-Alleen bepaalde bestanden:
Je maakt een lijst van de bestanden ergens in je "totaal" bestand. MEt de hele bestandsnamen, dus "C:\Een map\ab1001.xls", niet "ab1001.xls".
in de For Next lus van het macro bouw je een if...-then statement in.
Daarbij gebruik je de functie VLOOKUP, die je ook in VBA kan gebruiken, zodat je iets krijgt als
Visual Basic:
1
2
3
| IF NOT(application.worksheetfunctions.iserror(application.worksheetfunction.vlookup(.foundfiles(i).name,Verwijzing naar lijstje, 1, FALSE))) then
'hier de code die de data kopieert.
end if |
De code
Visual Basic:
1
| cel.Value = anderwb.Worksheets(1).Range("A1").Value |
kan je heel makkelijk aanpassen.
Bijvoorbeeld:
Als je ervan maakt (het hele stukje tussen de for-next)
Visual Basic:
1
2
3
4
5
6
7
8
| Set anderwb = Workbooks.Open(.FoundFiles(i))
anderwb.worksheets(1) .Range("A1:B150").Copy
cel.Offset(1,0)PasteSpecial Operation:=xlPasteValues
'plak kolom a en b in de kolom waar cel in staat, vanaf rij 2, en de kolom ernaast.
cel.Value = anderwb.Name
'plak de naam van het bestand
Set cel = cel.Offset(0,2)
'verplaats "cel" 2 naar rechts. |
En zo heb je de info uit alle werkbladen naast elkaar in je totaalblad.
Probeer alle methodes die ik aangaf eens uit te vogelen in de VBA help (da's niet de Excelhelp, gewoon in VBA of F1 drukken) en probeer een idee te hebben hoe je je data wilt binnenhalen (waar moet wat staan etc.), want het is allemaal goed te programmeren. (En de leercurve is er wel, maar die is voor VBA niet heel lang. Je zit even te prutsen, maar in no-time heb je iig. de basis te pakken.)