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 :
104 :
105 :
106 :
107 :
108 :
109 :
110 :
111 :
112 :
113 :
114 :
115 :
116 :
117 :
118 :
119 :
120 :
121 :
122 :
123 :
124 :
125 :
126 :
127 :
128 :
129 :
130 :
131 :
132 :
133 :
134 :
135 :
136 :
137 :
138 :
139 :
140 :
141 :
142 :
143 :
144 :
145 :
146 :
147 :
148 :
149 :
150 :
151 :
152 :
153 :
154 :
155 :
156 :
157 :
158 :
159 :
160 :
161 :
162 :
163 :
164 :
165 :
166 :
167 :
168 :
169 :
170 :
171 :
172 :
173 :
174 :
175 :
176 :
177 :
178 :
179 :
180 :
181 :
182 :
183 :
184 :
185 :
186 :
187 :
188 :
189 :
190 :
191 :
192 :
193 :
194 :
195 :
196 :
197 :
198 :
199 :
|
ConsolidateSheets secondaire public ()
Faible Wb1 comme cahier de travail
Faible Wb2 comme cahier de travail
Faible ws1 comme feuille de travail
Faible ws2 comme feuille de travail
Faible ws3 comme feuille de travail
Faible rng1 comme gamme
Faible rng2 comme gamme
Faible rng3 comme gamme
Faible rngArea comme gamme
Faible lrowSpace en tant que longtemps
Faible lSht en tant que longtemps
Faible lngCalc en tant que longtemps
Faible lngRow en tant que longtemps
Faible lngCol en tant que longtemps
Faible X ()
Faible bProcessFolder comme booléen
Faible bNewSheet comme booléen
Faible StrPrefix
Faible strFileName comme corde
Faible strFolderName comme corde
'la déclaration variable a dû pour que l'objet de Shell emploie un annuaire de défaut
Faible strDefaultFolder comme variante
bProcessFolder = Application.InputBox (« traiter une chemise simple (VRAIE), » et vbNewLine et « ou dossier simple (FAUX) », « champ d'application : La chemise ou le dossier simple », « rectifient », 4)
bNewSheet = Application.InputBox (« extraire toutes les données à une feuille simple (VRAIE), » et vbNewLine et « ou une feuille de dossier de cible pour chaque feuille de source (FAUSSE) », « format de rendement : La feuille simple ou la feuille par la collection de feuille », « rectifient », 4)
Sinon bProcessFolder alors
Sinon bNewSheet alors
MsgBox « là n'est pas beaucoup de point créant une reproduction exacte de votre fichier source :) »
Sortir le sous-marin
Finir si
Finir si
'placer l'annuaire de défaut ici si nécessaire
strDefaultFolder = « C:\temp »
'Si l'utilisateur assemble toutes les feuilles à une feuille monocible puis l'espacement de rangée
'distinguer différentes feuilles peut être placé ici
lrowSpace = 0
Si bProcessFolder alors
strFolderName = BrowseForFolder (strDefaultFolder)
'Rechercher les xls, xlsx, dossiers de xlsm
strFileName = Dir (strFolderName et « \ *.xls*")
Autrement
strFileName = _ d'application
.GetOpenFilename (« dossier choisi à traiter (*.xls), *.xls »)
Finissent si
Placer Wb1 = Workbooks.Add (1)
Placer ws1 = Wb1.Sheets (1)
Sinon bNewSheet puis ws1.Range (« A1 : B1 ») = rangée (« nom de cahier de travail », « compte de feuille de travail »)
'Tourner au loin screenupdating, événements, alertes et calcul d'ensemble au manuel
Avec l'application
.DisplayAlerts = faux
.EnableEvents = faux
.ScreenUpdating = faux
lngCalc =. Calcul
. Calcul = xlCalculationManual
Extrémité avec
'placer le chemin en dehors de la boucle
StrPrefix = strFolderName et IIf (bProcessFolder, « \ », vbNullString)
Faire tandis que Len (strFileName) > 0
'Fournir l'état d'avancement à l'utilisateur
Application.StatusBar = est parti (« traitement » et strFolderName et « \ » et strFileName, 255)
'Ouvrir chaque cahier de travail dans la chemise d'intérêt
Placer Wb2 = Workbooks.Open (StrPrefix et strFileName)
Sinon bNewSheet alors
'ajouter les détails récapitulatifs à la première feuille
ws1.Cells (Rows.Count, « A »). Extrémité (xlUp). Excentrage (1, 0) = Wb2.Name
ws1.Cells (Rows.Count, « A »). Extrémité (xlUp). Excentrage (0, 1) = Wb2.Sheets.Count
Finir si
Pour chaque ws2 dans Wb2.Sheets
Si bNewSheet alors
'Toutes les données à une feuille simple
'Sauter en important des données de feuille de cible si la feuille de source est blanche
Placer rng2 = ws2.Cells.Find (« * », ws2. [a1], xlValues, xlByRows, xlPrevious)
Sinon rng2 n'est rien alors
Placer rng1 = ws1.Cells.Find (« * », ws1. [a1], xlValues, xlByRows, xlPrevious)
'Trouver la première rangée de blanc sur la feuille de cible
Sinon rng1 n'est rien alors
Placer rng3 = ws2.Range (ws2.UsedRange.Cells (1), ws2.Cells (rng2.Row, « A »))
'S'assurer que le secteur de rangée dans la feuille de cible ne sera pas dépassé
Si rng3.Rows.Count + rng1.Row < Rows=""> 0 puis ws1.Rows (rng1.Row + 1).Interior.Color = vbGreen
Autrement
la 'feuille de cible est ainsi copie vide à la première rangée
ws2.UsedRange.Copy ws1.Cells (1, ws2.UsedRange.Cells (1).Column)
Finir si
Finir si
Autrement
'nouvelle feuille de cible pour chaque feuille de source
ws2.Copy ensuite : =Wb1.Sheets (Wb1.Sheets.Count)
'Enlever tous les liens en notre feuille de cible
Avec Wb1.Sheets (Wb1.Sheets.Count). Cellules
. Copie
xlPasteValues de .PasteSpecial
Extrémité avec
Sur le résumé d'erreur après
Wb1.Sheets (Wb1.Sheets.Count). Nom = ws2.Name
le 'nom de feuille existe déjà en cahier de travail de cible
Si Err.Number <> 0 puis
'Ajouter un nombre au nom de feuille jusqu'à ce qu'un nom unique soit dérivé
Faire
lSht = lSht + 1
Placer ws3 = Wb1.Sheets (ws2.Name et « « et lSht)
Faire une boucle tandis que pas ws3 n'est rien
lSht = 0
Finir si
Sur l'erreur 0 GoTo
Finir si
Prochain ws2
'Étroit le cahier de travail ouvert
Wb2.Close faux
'Vérifier si forcer a font une boucle la sortie si traitant un dossier simple
Si le bProcessFolder = faux sortent alors faire
strFileName = Dir
Boucle
'Enlever tous les liens si l'utilisateur a employé une feuille de cible
Si bNewSheet alors
Avec ws1.UsedRange
. Copie
. Cellules (xlPasteValues 1).PasteSpecial
. Cellules (1).Activate
Extrémité avec
Autrement
'Composer la feuille récapitulative si l'utilisateur a créé les feuilles séparées de cible
ws1.Activate
ws1.Range (« A1 : B1 »). Font.Bold = rectifient
ws1.Columns.AutoFit
Finir si
Avec l'application
.CutCopyMode = faux
.DisplayAlerts = rectifient
.EnableEvents = rectifient
.ScreenUpdating = rectifient
. Calcul = lngCalc
.StatusBar = vbNullString
Extrémité avec
Sous-marin d'extrémité
Fonction BrowseForFolder (OpenAt facultatif comme variante) comme variante
'Des Puls de Ken comme utilisés en son article de vbaexpress.com
'http://www.vbaexpress.com/kb/getarticle.php?kb_id=284
Faible ShellApp comme objet
'Créer une fenêtre de navigateur de dossier à la chemise de défaut
Placer ShellApp = CreateObject (« Shell.Application »). _
BrowseForFolder (0, « choisissent svp une chemise », 0, OpenAt)
'Placer la chemise à celle choisie. (Sur l'erreur au cas où décommandé)
Sur l'erreur reprendre après
BrowseForFolder = ShellApp.self.Path
Sur l'erreur 0 GoTo
'Détruire l'application de Shell
Placer ShellApp = rien
'Vérifier inadmissible ou les non-entrées et envoyer à l'erreur inadmissible
'traiteur si trouvé
'Les choix valides peuvent commencer L : (où L est une lettre) ou
'\ \ (comme dans \ \ servername \ sharename. Tous les autres sont inadmissibles
Choisir le cas mi (BrowseForFolder, 2, 1)
Le cas est = « : »
Si parti (BrowseForFolder, 1) = « : » Inadmissible puis GoTo
Le cas est = « \ »
Sinon parti (BrowseForFolder, 1) = « \ » inadmissible puis GoTo
Cas autrement
Inadmissible GoTo
Extrémité choisie
Sortir la fonction
Inadmissible :
'Si on le déterminait que le choix était inadmissible, a placé à faux
BrowseForFolder = faux
Fonction de fin
|