Здравствуйте, уважаемые форумчане. Прошу помочь макросом, т.к. формулой вытянуть данные невозможно. Про макросы знаю не много.... Имеется файл, в котором много листов с номерами машин (более 30) и в каждом листе несколько карточек, идущих вниз листа, в которых есть номер шины и производитель, а также дата снятия с учета, пробег, ну и другие данные. Номера шин на одном листе могут быть разные Подскажите, пожалуйста, можно ли чтобы на отдельном листе (Свод) была сборка данных со всех листов, из которых вытягивались название листа (это номер авто) и к нему дату снятия с учета, номер шин и модель шин (например),которые есть на листе. Пример прилагаю Заранее спасибо.
Здравствуйте, уважаемые форумчане. Прошу помочь макросом, т.к. формулой вытянуть данные невозможно. Про макросы знаю не много.... Имеется файл, в котором много листов с номерами машин (более 30) и в каждом листе несколько карточек, идущих вниз листа, в которых есть номер шины и производитель, а также дата снятия с учета, пробег, ну и другие данные. Номера шин на одном листе могут быть разные Подскажите, пожалуйста, можно ли чтобы на отдельном листе (Свод) была сборка данных со всех листов, из которых вытягивались название листа (это номер авто) и к нему дату снятия с учета, номер шин и модель шин (например),которые есть на листе. Пример прилагаю Заранее спасибо.Liza9314
Sub Prepare() Dim Sh As Worksheet, Sh1 As Worksheet, out() Set Sh1 = ThisWorkbook.Worksheets("Свод") Sh1.Columns("D:D").NumberFormat = "m/d/yyyy"
LastR = Sh1.Cells(Sh1.Rows.Count, "A").End(xlUp).Row For Each Sh In ThisWorkbook.Worksheets If Sh.Name <> "Свод" Then LastRow = Sh.Cells(Sh.Rows.Count, "C").End(xlUp).Row dx = Sh.Range("A1:H" & LastRow) Шина = "" Модель_шины = dx(7, 8) For n = 24 To UBound(dx) If dx(n, 1) <> "" Then Шина = dx(n, 1) End If
If dx(n, 7) = "Модель шины" Then Модель_шины = dx(n, 8) End If
If dx(n, 3) <> "" Then If IsDate(dx(n, 3)) Then ReDim out(1 To 1, 1 To 5) out(1, 1) = Sh.Name out(1, 2) = Модель_шины out(1, 3) = Шина out(1, 4) = dx(n, 3) out(1, 5) = dx(n, 7) LastR = LastR + 1 Sh1.Cells(LastR, 1).Resize(1, 5) = out
End If End If Next
End If Next End Sub
[/vba]
Добавил и модель шины к пробегу
[vba]
Код
Sub Prepare() Dim Sh As Worksheet, Sh1 As Worksheet, out() Set Sh1 = ThisWorkbook.Worksheets("Свод") Sh1.Columns("D:D").NumberFormat = "m/d/yyyy"
LastR = Sh1.Cells(Sh1.Rows.Count, "A").End(xlUp).Row For Each Sh In ThisWorkbook.Worksheets If Sh.Name <> "Свод" Then LastRow = Sh.Cells(Sh.Rows.Count, "C").End(xlUp).Row dx = Sh.Range("A1:H" & LastRow) Шина = "" Модель_шины = dx(7, 8) For n = 24 To UBound(dx) If dx(n, 1) <> "" Then Шина = dx(n, 1) End If
If dx(n, 7) = "Модель шины" Then Модель_шины = dx(n, 8) End If
If dx(n, 3) <> "" Then If IsDate(dx(n, 3)) Then ReDim out(1 To 1, 1 To 5) out(1, 1) = Sh.Name out(1, 2) = Модель_шины out(1, 3) = Шина out(1, 4) = dx(n, 3) out(1, 5) = dx(n, 7) LastR = LastR + 1 Sh1.Cells(LastR, 1).Resize(1, 5) = out
doober, Доброе утро. Подскажите, пожалуйста, если в рабочем файле выбивает ошибку Run time error 13 Type mismatch. В раб.файле вкладок с авто около 30 и сами карточки вниз 1500 строк. Может ли быть из-за слишком больших файлов? Пыталась на половине опробовать, все равно ошибка. Читала в интернете про эту ошибку но не поняла какое решение(в настройках безопасности стоит галочка в макросах)...Может Вы сможете подсказать. В дебагере ошибька на строке If dx(n, 3) <> "" Then Заранее спасибо.
doober, Доброе утро. Подскажите, пожалуйста, если в рабочем файле выбивает ошибку Run time error 13 Type mismatch. В раб.файле вкладок с авто около 30 и сами карточки вниз 1500 строк. Может ли быть из-за слишком больших файлов? Пыталась на половине опробовать, все равно ошибка. Читала в интернете про эту ошибку но не поняла какое решение(в настройках безопасности стоит галочка в макросах)...Может Вы сможете подсказать. В дебагере ошибька на строке If dx(n, 3) <> "" Then Заранее спасибо.Liza9314
Сообщение отредактировал Liza9314 - Вторник, 27.08.2024, 09:15
Я поняла в чем проблема. Предыдущий вопрос отпадает. Может Вы знаете как добавить проверку наличия ошибки? И, если ошибка, чтобы он пропускал и дальше собирал данные Заранее спасибо
Я поняла в чем проблема. Предыдущий вопрос отпадает. Может Вы знаете как добавить проверку наличия ошибки? И, если ошибка, чтобы он пропускал и дальше собирал данные Заранее спасибоLiza9314
Сообщение отредактировал Liza9314 - Вторник, 27.08.2024, 11:17
Liza9314, пробуйте сперва проверить на CVErr(), но нужно в файле посмотреть. Хотя проще перед циклом добавить On Error Resume Next а после On Error GoTo 0
Liza9314, пробуйте сперва проверить на CVErr(), но нужно в файле посмотреть. Хотя проще перед циклом добавить On Error Resume Next а после On Error GoTo 0Hugo