Vraag : De behoeften van de Code VBA omgezet van MS Excel 2003 tot 2007

Hello heeft de Deskundigen,

The Excel Werkboek dat ik gebruik om veelvoudige werkboeken in te consolideren voor rapportering het werken tegengehouden omdat enkele 2003 methodes van Excel niet beschikbaar in MS Excel 2007 zijn. De code leest door om het even welk werkboek in een bepaalde folder en trekt de gegevens uit de gespecificeerde cel.

I dacht oorspronkelijk het probleem toe te schrijven aan macroveiligheid was of vertrouwde op wegen maar dat door het in 2003 te testen elimineert - het werkte daar boete.

Can één van u te herschrijven gelieve hieronder de code om in MS Excel 2007 te werken? De één methode die ik weet werkt niet zonder twijfel is FIleSearch.

I heeft steekproefdossiers voor testdoeleinden ontspannen:
File MSEx2007 heeft de code die indien dat de gegevens van Summiere TestData zou moeten laden. copyFromFiles ()
Schemerige wksCopyTo

Sub als/> Schemerige wkbCopyFrom Worksheet
Schemerige copyToHere Workbook

= Geplaatste ThisWorkbook.Sheets (1)
wksCopyTo.Cells.Clear


copyToHere = wksCopyTo.Range („a1“)
n = 0

op Fout hervat Next

Application.FileSearch.LookIn = ThisWorkbook.Path
Application.FileSearch.FileType = msoFileTypeExcelWorkbooks
Application.FileSearch.SearchSubFolders = False
Application.FileSearch.Execute

voor I = 1 aan Application.FileSearch.FoundFiles.Count
als Application.FileSearch.FoundFiles (I) = ThisWorkbook.FullName dan GoTo NotMe

wkbCopyFrom = Workbooks.Open plaatsen (Application.FileSearch.FoundFiles (I))
n = n + 1
met wkbCopyFrom.Sheets („Sheet1“)
copyToHere.Offset (0, 1) =. Waaier („D4“). Project Name
copyToHere.Offset van de waarde het „(0, 2) =. Waaier („D5“). De waarde „verzocht om het Eind van By


With

„met wkbCopyFrom.Sheets („Sheet2“)
„copyToHere.Offset (0, 6) =. Waaier („J7“). Eind van de waarde
het „With

met wkbCopyFrom.Sheets („Sheet3l“)

copyToHere.Offset (0, 30) =. Waaier („C60“). Het Eind/>

With

van de waarde

wkbCopyFrom.Close False

NotMe:
Volgende i


End Sub


Thank u voor " BC " het nemen van een blik bij this.

Steph M.

bevat

Antwoord : De behoeften van de Code VBA omgezet van MS Excel 2003 tot 2007

ik heb de code naar een module verplaatst, die de gemeenschappelijkere plaats is om het te vinden.

en dan toegevoegd een Klasse die het grootste deel van Application.FileSearch nabootst.
het is meestal het werk van anderen maar ik bevestigde het beter aan onderzoekssubfolders en impement functioneert meer van originele fileseach.

Ik uploadde het herziene werkboek maar anders….

>%ur<---------> herziene code…. de plaats in een module en schrapt oud van Workbook1

Sub copyFromFiles ()
   Schemerige wksCopyTo als Aantekenvel
   Schemerige wkbCopyFrom als Werkboek
   Schemerige copyToHere als Waaier
   
   Vastgestelde wksCopyTo = ThisWorkbook.Sheets (1)
   wksCopyTo.Cells.Clear
   
   
   Reeks copyToHere = wksCopyTo.Range („a1“)
   n = 0
   
   Op Fout hervat daarna
   Verduister AppFileSearch als Nieuwe FileSearch
   
   AppFileSearch.LookIn = ThisWorkbook.path
   AppFileSearch.fileType = „xls?“            „<>    AppFileSearch.fileName = „SummarytestData““<>    AppFileSearch.SearchSubFolders = Waar
   AppFileSearch.Execute
   
   Voor I = 1 aan AppFileSearch.Count
       Als AppFileSearch.FoundFiles (I) = ThisWorkbook.FullName toen
           „sla dit één over“
           'GoTo NotMe
       Anders
            Reeks wkbCopyFrom = Workbooks.Open (AppFileSearch.FoundFiles (I))
            n = n + 1
            Met wkbCopyFrom.Sheets („Sheet1“)
                copyToHere.Offset (0, 1) =. Waaier („A1“) .value
                copyToHere.Offset (0, 2) =. Waaier („B1“) .value
                copyToHere.Offset (0, 3) =. Waaier („C1“) .value
                copyToHere.Offset (0, 4) =. Waaier („A4“) .value
                copyToHere.Offset (0, 5) =. Waaier („B4“) .value
                copyToHere.Offset (0, 6) =. Waaier („C4“) .value
             Eind met
           
            Reeks copyToHere = copyToHere.Offset (1)
   
           wkbCopyFrom.Close vals
       Eind als

   Volgende I
     
       
Sub van het eind


>%place<---------------------> deze code in een nieuwe ClassModule en noemt het FileSearch


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:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
'' door PrismP @ http://social.msdn.microsoft.com/Forums/en-US/isvvba/thread/a450830d-4fc3-4f4e-aee2-03f7994369d6
'http://social.msdn.microsoft.com/profile/prizmp/?type=forum&referrer=http://social.msdn.microsoft.com/Forums/en-US/isvvba/thread/a450830d-4fc3-4f4e-aee2-03f7994369d6


Schemerige pLookIn als Koord
Schemerige pSearchSubFolders zoals Van Boole
Schemerige pFileName als Koord
Schemerige pFileType als Koord

Openbare pFoundFiles als Nieuwe Inzameling


Privé SubClass_Initialize ()
    pLookIn = „.“
    pFileType = „*“
    pFileName = „*“
    pSearchSubFolders = Vals
    
Sub van het eind
Overheidsfunctie NewSearch ()
    Class_Initialize
    Reeks pFoundFiles = Nieuwe Inzameling
    
De Functie van het eind
Het openbare Bezit krijgt Telling () als Koord
    Telling = pFoundFiles.Count
Het Bezit van het eind
Het openbare Bezit krijgt FoundFiles (xx) als Koord
    FoundFiles = pFoundFiles (xx)
Het Bezit van het eind
Het openbare Bezit krijgt LookIn () als Koord
    LookIn = pLookIn
Het Bezit van het eind
Het openbare Bezit liet LookIn (waarde als Koord)
    pLookIn = waarde
Het Bezit van het eind
Het openbare Bezit krijgt SearchSubFolders () zoals Van Boole
    SearchSubFolders = pSearchSubFolders
Het Bezit van het eind
Het openbare Bezit liet SearchSubFolders (waarde zoals Van Boole)
    pSearchSubFolders = waarde
Het Bezit van het eind
Het openbare Bezit krijgt fileName () als Koord
    fileName = pFileName
Het Bezit van het eind
Het openbare Bezit liet fileName (waarde als Koord)
    pFileName = waarde
Het Bezit van het eind
Het openbare Bezit krijgt fileType () als Koord
    fileType = pFileType
Het Bezit van het eind
Het openbare Bezit liet fileType (waarde als Koord)
    pFileType = waarde
Het Bezit van het eind
De Overheidsfunctie voert () zoals lang uit

    Schemerige I zoals lang
    Schemerige sLookIn als Koord
    Schemerige sDirName als Koord
    Schemerige sCurDir als Koord
    Schemerige sFileName als Koord
    'Schemerig FF als FilesFound
   
    i = 1
    'Plaats FF = Nieuwe FileSearchFound
    sLookIn = pLookIn
    RecurseFolder (sLookIn)
    
    
    
    Voer = pFoundFiles.Count uit
Beëindig Functie

Sub RecurseFolder (sFolderStart)
    
    sFileName = Dir (sFolderStart & „\“ & pFileName & „.“ & pFileType, vbNormal)
    Doe tot Len (sFileName) = 0

        pFoundFiles.Add (sFolderStart & „\“ & sFileName)
        sFileName = Dir
    Lijn
    Als pSearchSubFolders toen
        sDirName = Dir (sFolderStart & „\“, vbDirectory)
        Schemerige FoundDirectories als Nieuwe Inzameling, xxDir als Variant
        Doe tot Len (sDirName) = 0
        
            sCurDir = sFolderStart & „\“ & sDirName
            Als GetAttr (sCurDir) = vbDirectory en sDirName <> „.“ En sDirName <> „.“ Dan
                FoundDirectories.Add sCurDir
            Eind als
            sDirName = Dir
        Lijn
        Voor Elke xxDir in FoundDirectories
            RecurseFolder (xxDir)
        Volgende xxDir
 
    Eind als


Sub van het eind
Duidelijke Overheidsfunctie () zoals lang
    NewSearch
De Functie van het eind
 
Bijgewerkt macrowerkboek
 
Andere oplossingen  
 
programming4us programming4us