Скопировать данные из нескольких книг в одну - VBA
Формулировка задачи:
Доброго времени суток!
Понимаю что тема изъезженная, но все же прошу вас помочь.
Прочитал несколько топиков и применив на практике не получил результат.
Задача следующая:
1. Есть один большой сводный файл (чуть больше 20к строк и 199 столбцов).
2. Есть много мелких файлов (110 штук, потом еще будут добавляться). Структура этих файлов одинаковая.
3. В большом сводном файле под каждый мелкий предусмотрен диапазон ячеек. Структура как в мелких файлах. Все на одном листе ("Лист1").
4. В большом файле на отдельном листе ("Лист2") расположены исходные данные (пути к файлам).
5. На пользовательскую форму вынесены чекбоксы и кнопки (см. рисунок).
6. Все файлы в двоичном формате, т.е. расширение "*.xlsb". Excel - 2010.
При копировании возникает ошибка "Run-time error 9: Subscript out of range". Ошибка возникает в строке 65.
Может я просто туплю... Но не могу понять почему возникает эта ошибка.
Картинку с формой чуть позже добавлю.
Листинг программы
- Private Sub LoadData_Click()
- Dim p_string As String
- Dim cb_name As String
- Dim start_row, i_row As Variant
- cb_counter = 0
- For i = 1 To 250
- If i < 10 Then
- If KPForm.MultiPage1.KPTab.Controls("CheckBoxKP00" & i).Value = True Then
- cb_counter = cb_counter + 1
- Exit For
- End If
- End If
- If i >= 10 And i < 100 Then
- If KPForm.MultiPage1.KPTab.Controls("CheckBoxKP0" & i).Value = True Then
- cb_counter = cb_counter + 1
- Exit For
- End If
- End If
- If i >= 100 Then
- If KPForm.MultiPage1.KPTab.Controls("CheckBoxKP" & i).Value = True Then
- cb_counter = cb_counter + 1
- Exit For
- End If
- End If
- Next i
- If cb_counter = 0 Then
- MsgBox ("Не выделено ни одной КП." & vbNewLine & "Необходимо выбрать не менее одной КП!")
- Exit Sub
- End If
- check_col = 4
- start_row = 57
- start_col = 5
- awb_name = ThisWorkbook.Name
- awb_path = ThisWorkbook.Path
- Application.DisplayAlerts = False
- Application.ScreenUpdating = False
- For i = 1 To 250
- If i < 10 Then
- cb_name = "CheckBoxKP00" & i
- End If
- If i >= 10 And i < 100 Then
- cb_name = "CheckBoxKP0" & i
- End If
- If i > 100 Then
- cb_name = "CheckBoxKP" & i
- End If
- kp_i_row = 22
- kp_j_col = 5
- If (KPForm.MultiPage1.KPTab.Controls(cb_name).Enabled = True) And _
- (KPForm.MultiPage1.KPTab.Controls(cb_name).Value = True) Then
- p_string = Ëèñò2.Cells(i, check_col).Value
- Set KPBook = Workbooks.Open(Filename:=p_string, ReadOnly:=True)
- kp_name = KPBook.Name
- For i_row = start_row To start_row + 5
- For j_col = start_col To start_col + 13
- Workbooks(awb_name).Worksheets("Лист1").Cells(i_row, j_col).Value = KPBook.Worksheets("Лист1").Cells(kp_i_row, kp_j_col).Value
- kp_j_col = kp_j_col + 1
- Next j_col
- kp_i_row = kp_i_row + 1
- Next i_row
- KPBook.Close SaveChanges:=False
- End If
- Select Case i
- Case Is = 2
- GoTo lbl1
- Case Is = 6
- GoTo lbl1
- Case Is = 216
- GoTo lbl1
- Case 62 To 65
- GoTo lbl1
- Case 132 To 199
- GoTo lbl1
- Case 204 To 208
- GoTo lbl1
- Case 223 To 250
- GoTo lbl1
- Case Else
- start_row = start_row + 130
- End Select
- lbl1:
- Next i
- Application.ScreenUpdating = True
- Application.DisplayAlerts = True
- MsgBox ("Загрузка завершена!")
- End Sub
Решение задачи: «Скопировать данные из нескольких книг в одну»
textual
Листинг программы
- Worksheets("" & i)
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д