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:
|
Общественное Sub ConsolidateSheets ()
Тусклое Wb1 как Workbook
Тусклое Wb2 как Workbook
Тусклое ws1 как рабочий лист
Тусклое ws2 как рабочий лист
Тусклое ws3 как рабочий лист
Тусклое rng1 как ряд
Тусклое rng2 как ряд
Тусклое rng3 как ряд
Тусклое rngArea как ряд
Тусклое lrowSpace как длиной
Тусклое lSht как длиной
Тусклое lngCalc как длиной
Тусклое lngRow как длиной
Тусклое lngCol как длиной
Тусклый x ()
Тусклое bProcessFolder как булевско
Тусклое bNewSheet как булевско
Тусклое StrPrefix
Тусклое strFileName как шнур
Тусклое strFolderName как шнур
'различному необходимо было нужно для предмета раковины использовать директорию невыполнения обязательства
Тусклое strDefaultFolder как вариант
bProcessFolder = Application.InputBox («обрабатывайте одиночный скоросшиватель (ПОИСТИНЕ),» & vbNewLine & «или одиночный архив (ЛОЖНЫЙ)», «объем применения: Скоросшиватель или одиночный архив», «True», 4)
bNewSheet = Application.InputBox («извлеките все данные к одиночному листу (ПОИСТИНЕ),» & vbNewLine & «или листу архива цели для каждого листа источника (ЛОЖНОГО)», «форма выхода: Одиночный лист или лист собранием листа», «True», 4)
Если не bProcessFolder после этого
Если не bNewSheet после этого
MsgBox «там не будет много пунктом создавая точно реплику вашего архива источника:)»
Выходите подводная лодка
Закончитесь если
Закончитесь если
'установите директорию невыполнения обязательства здесь если нужно
strDefaultFolder = «C:\temp»
'Если потребитель collating все листы к одиночному листу цели после этого дистанционирование рядка
'различить между по-разному листами можно установить здесь
lrowSpace = 0
Если bProcessFolder после этого
strFolderName = BrowseForFolder (strDefaultFolder)
'Ищите xls, xlsx, архивы xlsm
strFileName = Dir (strFolderName & «\ *.xls*")
Еще
strFileName = _ применения
.GetOpenFilename («отборный архив, котор нужно обрабатывать (*.xls), *.xls»)
Закончитесь если
Установите Wb1 = Workbooks.Add (1)
Установите ws1 = Wb1.Sheets (1)
Если не bNewSheet после этого ws1.Range, то («A1: B1») = блок («имя workbook», «отсчет рабочий лист»)
'Поверните screenupdating, случаи, сигналы тревога и вычисление комплекта к руководству
С применением
.DisplayAlerts = ложно
.EnableEvents = ложно
.ScreenUpdating = ложно
lngCalc =. Вычисление
. Вычисление = xlCalculationManual
Конец с
'установите курс вне петли
StrPrefix = strFolderName & IIf (bProcessFolder, «\», vbNullString)
Сделайте пока Len (strFileName) > 0
'Снабдите состояние прогресса потребитель
Application.StatusBar = вышло («обрабатывать» & strFolderName & «\» & strFileName, 255)
'Раскройте каждый workbook в скоросшивателе интереса
Установите Wb2 = Workbooks.Open (StrPrefix & strFileName)
Если не bNewSheet после этого
'добавьте общие детали к первому листу
ws1.Cells (Rows.Count, «a»). Конец (xlUp). Смещение (1, 0) = Wb2.Name
ws1.Cells (Rows.Count, «a»). Конец (xlUp). Смещение (0, 1) = Wb2.Sheets.Count
Закончитесь если
Для каждого ws2 в Wb2.Sheets
Если bNewSheet после этого
'Все данные к одиночному листу
'Прыгните импортирующ данные по листа цели если лист источника пуст
Установите rng2 = ws2.Cells.Find («*», ws2. [a1], xlValues, xlByRows, xlPrevious)
Если не rng2 ничего после этого
Установите rng1 = ws1.Cells.Find («*», ws1. [a1], xlValues, xlByRows, xlPrevious)
'Находите первый рядок пробела на листе цели
Если не rng1 ничего после этого
Установите rng3 = ws2.Range (ws2.UsedRange.Cells (1), ws2.Cells (rng2.Row, «a»))
'Обеспечьте что не будет превышена зона рядка в листе цели
Если rng3.Rows.Count + rng1.Row < Rows=""> 0 после этого ws1.Rows, то (rng1.Row + 1).Interior.Color = vbGreen
Еще
'лист цели будет пустым так экземпляром к первому рядку
ws2.UsedRange.Copy ws1.Cells (1, ws2.UsedRange.Cells (1).Column)
Закончитесь если
Закончитесь если
Еще
'новый лист цели для каждого листа источника
ws2.Copy поже: =Wb1.Sheets (Wb1.Sheets.Count)
'Извлекайте все соединения в нашем листе цели
С Wb1.Sheets (Wb1.Sheets.Count). Клетки
. Экземпляр
xlPasteValues .PasteSpecial
Конец с
На резюме ошибки затем
Wb1.Sheets (Wb1.Sheets.Count). Имя = ws2.Name
'имя листа уже существует в workbook цели
Если Err.Number <> 0 после этого
'Добавьте номер к имени листа до уникально имя выведено
Сделайте
lSht = lSht + 1
Установите ws3 = Wb1.Sheets (ws2.Name & ««& lSht)
Закрепите петлеть пока не ws3 ничего
lSht = 0
Закончитесь если
На ошибке переход 0
Закончитесь если
Следующее ws2
'Близко раскрынный workbook
Wb2.Close ложное
'Проверите ли принудить a закрепите петлеть выход если обрабатывающ одиночный архив
Если bProcessFolder = ложно после этого выходит, то сделайте
strFileName = Dir
Петля
'Извлекайте все соединения если потребитель использовал лист цели
Если bNewSheet после этого
С ws1.UsedRange
. Экземпляр
. Клетки (xlPasteValues 1).PasteSpecial
. Клетки (1).Activate
Конец с
Еще
'Форматируйте общий лист если потребитель создавал отдельно листы цели
ws1.Activate
ws1.Range («A1: B1»). Font.Bold = True
ws1.Columns.AutoFit
Закончитесь если
С применением
.CutCopyMode = ложно
.DisplayAlerts = True
.EnableEvents = True
.ScreenUpdating = True
. Вычисление = lngCalc
.StatusBar = vbNullString
Конец с
Подводная лодка конца
Функция BrowseForFolder (опционное OpenAt как вариант) как вариант
'От Puls Кен как используется в его статьей vbaexpress.com
'http://www.vbaexpress.com/kb/getarticle.php?kb_id=284
Тусклое ShellApp как предмет
'Создайте окно браузера архива на скоросшивателе невыполнения обязательства
Установите ShellApp = CreateObject («Shell.Application»). _
BrowseForFolder (0, «пожалуйста выбирает скоросшиватель», 0, OpenAt)
'Установите скоросшиватель к тому выбрано. (На ошибке в случае если отменено)
На ошибке возобновьте затем
BrowseForFolder = ShellApp.self.Path
На ошибке переход 0
'Разрушьте применение раковины
Установите ShellApp = ничего
'Проверите для инвалидного или non-входов и пошлите к инвалидной ошибке
'укротитель если о
'Действительные выборы могут начать l: (где l будет письмо) или
'\ \ (как в \ \ servername \ sharename. Все другие инвалидны
Выберите случай средний (BrowseForFolder, 2, 1)
Случай = «: »
Если о, то (BrowseForFolder, 1) = «: » После этого переход инвалидное
Случай = «\»
Если о, то (BrowseForFolder, 1) = «\» после этого переход инвалидное
Случай еще
Переход инвалидное
Конец отборный
Выходите функция
Инвалидно:
'Если она была определена, то что выбор был инвалидн, установило к ложному
BrowseForFolder = ложно
Функция конца
|