Здравствуйте, уважаемые гуру VBA. Прошу помочь разобраться в следующей ситуации: При проведении инвентаризации возникла необходимость немного автоматизировать процесс. Из 1С выгружается кривая ведомость (во вложении). Графа №8 (статус объекта учета) делится на 3 столбца (AJ,AK,AL), графа №9 (целевая функция актива) на столбцы AM:AR, а одни должны быть едиными ячейками - как показано на листе "Как должно быть". Для того чтобы объединить столбцы в строках пишу макрос (пока только для графы №8):
[vba]
Код
Sub Rec() Dim i As Long Dim j As Long Dim k As Long Dim myRange As Range Set myRange = Range("AJ41:AL500") Application.DisplayAlerts = False
For k = 1 To myRange.Areas.Count For i = 1 To myRange.Areas(k).Rows.Count For j = 1 To myRange.Areas(k).Columns.Count If myRange.Areas(k).Cells(j, i).Value = "" Then myRange.Areas(k).Rows(i).Merge myRange.Areas(k).Cells(i, 1).HorizontalAlignment = xlHAlignCenter End If Next Next Next Application.DisplayAlerts = True End Sub
[/vba]
Но после его выполнения, слетает форматирование и в тех строках, которые не должны меняться. Подскажите пожалуйста, в чём ошибка?
На исходном листе нужные диапазоны выделил толстой границей.
Разрабатываемый макрос планируется встроить в другой макрос, который уже вносит изменения в инвентарные описи без их открытия (их больше 1000 шт):
[vba]
Код
Sub Макрос1()
Dim FilesToOpen Dim x As Integer Application.ScreenUpdating = False FilesToOpen = Application.GetOpenFilename _ (FileFilter:="Microsoft Excel Files (*.xlsx), *.xlsx", _ MultiSelect:=True, Title:="Выберите файлы") If TypeName(FilesToOpen) = "Boolean" Then MsgBox "Не выбрано ни одного файла!" GoTo ExitHandler End If x = 1 Application.Visible = False While x <= UBound(FilesToOpen) Workbooks.Open Filename:=FilesToOpen(x)
Sheets(1).Range("BP17").Value = "10.06.2022" 'на листе 1 в ячейку BP17 написать "Новая дата окончания" Sheets(1).Range("AL1:AL1500").Replace What:="А. А. Корешков", Replacement:="А. А. Котов" Sheets(1).Range("AJ41:AL41").Merge 'на листе 1 объединить ячейки AJ41:AL41 Sheets(1).Range("AM41:AR41").Merge 'на листе 1 объединить ячейки AM41:AR41
ActiveWorkbook.Close savechanges:=True x = x + 1 Wend
ExitHandler: Application.ScreenUpdating = True Application.Visible = True Exit Sub ErrHandler: MsgBox Err.Description Resume ExitHandler End Sub
Здравствуйте, уважаемые гуру VBA. Прошу помочь разобраться в следующей ситуации: При проведении инвентаризации возникла необходимость немного автоматизировать процесс. Из 1С выгружается кривая ведомость (во вложении). Графа №8 (статус объекта учета) делится на 3 столбца (AJ,AK,AL), графа №9 (целевая функция актива) на столбцы AM:AR, а одни должны быть едиными ячейками - как показано на листе "Как должно быть". Для того чтобы объединить столбцы в строках пишу макрос (пока только для графы №8):
[vba]
Код
Sub Rec() Dim i As Long Dim j As Long Dim k As Long Dim myRange As Range Set myRange = Range("AJ41:AL500") Application.DisplayAlerts = False
For k = 1 To myRange.Areas.Count For i = 1 To myRange.Areas(k).Rows.Count For j = 1 To myRange.Areas(k).Columns.Count If myRange.Areas(k).Cells(j, i).Value = "" Then myRange.Areas(k).Rows(i).Merge myRange.Areas(k).Cells(i, 1).HorizontalAlignment = xlHAlignCenter End If Next Next Next Application.DisplayAlerts = True End Sub
[/vba]
Но после его выполнения, слетает форматирование и в тех строках, которые не должны меняться. Подскажите пожалуйста, в чём ошибка?
На исходном листе нужные диапазоны выделил толстой границей.
Разрабатываемый макрос планируется встроить в другой макрос, который уже вносит изменения в инвентарные описи без их открытия (их больше 1000 шт):
[vba]
Код
Sub Макрос1()
Dim FilesToOpen Dim x As Integer Application.ScreenUpdating = False FilesToOpen = Application.GetOpenFilename _ (FileFilter:="Microsoft Excel Files (*.xlsx), *.xlsx", _ MultiSelect:=True, Title:="Выберите файлы") If TypeName(FilesToOpen) = "Boolean" Then MsgBox "Не выбрано ни одного файла!" GoTo ExitHandler End If x = 1 Application.Visible = False While x <= UBound(FilesToOpen) Workbooks.Open Filename:=FilesToOpen(x)
Sheets(1).Range("BP17").Value = "10.06.2022" 'на листе 1 в ячейку BP17 написать "Новая дата окончания" Sheets(1).Range("AL1:AL1500").Replace What:="А. А. Корешков", Replacement:="А. А. Котов" Sheets(1).Range("AJ41:AL41").Merge 'на листе 1 объединить ячейки AJ41:AL41 Sheets(1).Range("AM41:AR41").Merge 'на листе 1 объединить ячейки AM41:AR41
ActiveWorkbook.Close savechanges:=True x = x + 1 Wend
ExitHandler: Application.ScreenUpdating = True Application.Visible = True Exit Sub ErrHandler: MsgBox Err.Description Resume ExitHandler End Sub
Gestapovich, - Прочитайте Правила форума - Оформите код тегами (в режиме правки поста выделите код и нажмите кнопку #, пояснялка здесь) Помогающим просьба воздержаться от ответов в этой теме до исправления замечания
Gestapovich, - Прочитайте Правила форума - Оформите код тегами (в режиме правки поста выделите код и нажмите кнопку #, пояснялка здесь) Помогающим просьба воздержаться от ответов в этой теме до исправления замечаниякитин
Не судите очень строго:я пытаюсь научиться ЯД 41001877306852
Sub tt() c1_ = 36 n1_ = 3 c2_ = 39 n2_ = 6 c_ = 11 r0_ = Cells(1, c_).End(4).Row nr_ = Cells(Rows.Count, c_).End(3).Row - r0_ + 2 ar0 = Cells(r0_, c_).Resize(nr_).Value For i = 1 To nr_ If ar0(i, 1) = 3 Then r00_ = i + r0_ End If If IsEmpty(ar0(i, 1)) Then If r00_ Then r01_ = i + r0_ + 1 Cells(r00_, c1_).Resize(r01_ - r00_, n1_).Merge True Cells(r00_, c2_).Resize(r01_ - r00_, n2_).Merge True r00_ = 0 End If End If Next i End Sub
[/vba]
Такой вариант
[vba]
Код
Sub tt() c1_ = 36 n1_ = 3 c2_ = 39 n2_ = 6 c_ = 11 r0_ = Cells(1, c_).End(4).Row nr_ = Cells(Rows.Count, c_).End(3).Row - r0_ + 2 ar0 = Cells(r0_, c_).Resize(nr_).Value For i = 1 To nr_ If ar0(i, 1) = 3 Then r00_ = i + r0_ End If If IsEmpty(ar0(i, 1)) Then If r00_ Then r01_ = i + r0_ + 1 Cells(r00_, c1_).Resize(r01_ - r00_, n1_).Merge True Cells(r00_, c2_).Resize(r01_ - r00_, n2_).Merge True r00_ = 0 End If End If Next i End Sub