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:
|
Вариант точный
Общественное sFolder как шнур
Общественное sFilename () как шнур
Общественное NFiles как интежер
Sub GetFileList ()
Тусклое varFileList как вариант
Затемните I как интежер
«Получите директорию от потребителя»
С Application.FileDialog (msoFileDialogFolderPicker)
. Выставка
Если .SelectedItems.Count = 0 после этого выходят подводная лодка «отмененный потребитель», то
sFolder = .SelectedItems (1)
Конец с
«Получите список всех архивов в этой директории.»
«Заметьте что это не рекурсивно… хотя оно smogло быть…»
varFileList = GetFileNames (sFolder, «*.txt»)
Если не IsArray (varFileList) после этого
MsgBox «никакие, котор архивы не нашли. », vbInformation
Выходите подводная лодка
Закончитесь если
«Setup блок filename основанный на выбранной директории»
NFiles = UBound (varFileList) + 1
sFilename ReDim (1 к NFiles)
«Скопируйте filenames в блок шнура для пользы в другом месте»
Для I = 0 к UBound (varFileList)
sFilename (I + 1) = CStr (varFileList (I))
Затем iий
OutputFilenames2XL
ImportFileContent
Подводная лодка конца
Приватная функция GetFileNames (sPath ByVal как шнур, опционное sFilter как шнур) как вариант
« Возвращает одноразмерный блок с filenames»
« В противном случае возвращает ложное»
Тусклый f как шнур
Затемните I как интежер
Затемните FileList () как шнур
Если sFilter = sFilter "" после этого = «*.*», то
Выберите случай Right$ (sPath, 1)
Покрывайте «\», «/»
sPath = Left$ (sPath, Len (sPath) - 1)
Конец отборный
Заповедник FileList ReDim (0)
f = Dir$ (sPath & «\» & sFilter)
Сделайте пока Len (f) > 0
Заповедник FileList ReDim (I) как шнур
FileList (I) = f
iий = I + 1
f = Dir$ ()
Петля
Если FileList (0) <> опорожняет после этого
GetFileNames = FileList
Еще
GetFileNames = ложно
Закончитесь если
Закончите функцию
Приватная подводная лодка OutputFilenames2XL ()
Тусклое iBaseRow как интежер, iBaseCol как интежер
Тусклое shTarget как рабочий лист
Затемните I как интежер
Установите shTarget = Application.ActiveSheet
iBaseRow = ряд («BaseCell»). Рядок
iBaseCol = ряд («BaseCell»). Колонка
«Заселите поля коллектора»
shTarget.Range («ImportDate»). Значение = теперь
shTarget.Range («FolderPath»). Значение = sFolder
shTarget.Range («NFiles») = NFiles
«Заселите колонку filename таблицы»
Для I = 1 к NFiles
shTarget.Cells (iBaseRow + I - 1, iBaseCol). Значение = sFilename (I)
Затем iий
«Положите формулу для того чтобы parse удостоверение личности трудыов в первую колонку»
shTarget.Range (клетки (iBaseRow, iBaseCol - 1), клетки (iBaseRow + NFiles - 1, iBaseCol - 1)) .FormulaR1C1 = «=MID (r [0] c [1], LEN (r [0] c [1]) - 14.8)»
Подводная лодка конца
Приватное Sub ImportFileContent ()
Затемните I как интежер, j как интежер
Затемните shTarget как рабочий лист
Затемните iBaseRow как интежер, iBaseCol как интежер
Затемните shSource как рабочий лист
Затемните sActiveFilename как шнур
Затемните sFullPath как шнур
Затемните iRowCount как интежер
Затемните iTargetColumn как интежер
Затемните rSourceRange как ряд
«Данные по магазина низкопробные для рабочий лист цели, котор мы строим»
Установите shTarget = Application.ActiveSheet
iBaseRow = ряд («BaseCell»). Рядок
iBaseCol = ряд («BaseCell»). Колонка
«Теперь обрабатывайте каждый filename как раз импортированный к рабочий лист»
Application.ScreenUpdating = ложно
Application.WindowState = xlMinimized
Application.Calculation = xlCalculationManual
Application.Visible = ложно
«Адвокатское сословие прогресса установки»
frmProgress нагрузки
frmProgress.ProgressBar.Max = NFiles
frmProgress.ProgressBar.Value = 0
frmProgress.Show
Для I = 1 к NFiles
sActiveFilename = sFilename (I)
sFullPath = sFolder & «\» & sActiveFilename
«Размежеванный ввозом архив текста»
Filename Workbooks.OpenText: =sFullPath, _
Начало: =437, StartRow: =1, DataType: =xlDelimited, TextQualifier: = _
xlDoubleQuote, ConsecutiveDelimiter: =False, плата: =True, Semicolon: =False, _
Запятой: =False, космос: =False, другое: =False, FieldInfo: =Array (1, 1), _
TrailingMinusNumbers: =True
«Храньте имя листа и форма/добавляет необходима формулы»
Установите shSource = Application.ActiveSheet
iRowCount = Application.WorksheetFunction.CountA (колонки («a: »))
shSource.Range (клетки (1, 2), клетки (iRowCount, 2)) .FormulaR1C1 = «=FIND ("": "", R [0] C [- 1])»
shSource.Range (клетки (1, 3), клетки (iRowCount, 3)) .FormulaR1C1 = «ОЕ =IF ((r [0] c [- 2], "" комментария "" 7)=, 61, ЗНАЧЕНИЕ (СРЕДНЕЕ (r [0] c [- 2], 2, r [0] c [- 1] - 2)))»
shSource.Range (клетки (1, 4), клетки (iRowCount, 4)) .FormulaR1C1 = «=RIGHT (r [0] c [- 3], LEN (r [0] c [- 3]) - r [0] c [- 2] - 1)»
«Сделайте конечно клетки будьте обновлен при в настоящее время только необходимо данные (если вычисление установлено к руководству)», то
shSource.Calculate
«Теперь скопируйте приводя к parsed данные в правильно клетки на рабочий лист цели»
Для j = 1 к iRowCount
iTargetColumn = CInt (shSource.Cells (j, 3).Value)
Установите rSourceRange = shSource.Cells (j, 4)
shTarget.Cells (iBaseRow + I - 1, iBaseCol + iTargetColumn). Значение = rSourceRange.Value
Следующий j
«Окончательно конец архив workbook источника в виду того что мы закончены с им»
Workbooks (sActiveFilename). Близкое SaveChanges: =False
frmProgress.ProgressBar.Value = I
frmProgress.Repaint
Затем iий
shTarget.Columns («c: BK») .EntireColumn.AutoFit
frmProgress.Hide
Application.Calculation = xlCalculationAutomatic
Application.Calculate
Application.ScreenUpdating = True
Application.WindowState = xlMaximized
Application.Visible = True
Подводная лодка конца
|