Доброе утро! Есть макрос, который собирает листы с закрытых книг в другую (целевую) книгу. Подскажите, пожалуйста, где нужно поправить, чтобы копировались только значения, а не формулы, а также чтобы сохранялись высота, ширина столбцов, а также высота строк. (вообщем, форматирование). [vba]
Код
Sub CopyData() Dim i As Long, j As Long, myPath As String, myName As String, x As Range Dim wb As Workbook, ws As Worksheet, aws As Worksheet Application.ScreenUpdating = False With Application.FileDialog(msoFileDialogOpen) .Title = "Выбор файлов для обработки" .AllowMultiSelect = True .ButtonName = "OK" .Show If .SelectedItems.Count = 0 Then Exit Sub Set aws = ActiveSheet For i = 1 To .SelectedItems.Count Set wb = Workbooks.Open(Filename:=.SelectedItems(i), AddToMRU:=False) For j = 1 To wb.Sheets.Count Set x = wb.Sheets(j).[A:A].Find("Всего") If Not x Is Nothing Then wb.Sheets(j).Rows("8:" & x.Row).Copy aws.Cells(Rows.Count, 1).End(xlUp).Offset(1)' здесь пытался вставлять и ".PasteSpecial(xlPasteValues)" , и "xlPasteValues" (то есть без скобок), и еще что-то....но ничего не получается.... End If Next wb.Close False Next End With End Sub
[/vba] Попытался хотя бы поправить вставку значений, но и это не получилось.... Прошу простить, если я вообще не там "редактировал")))) Заранее спасибо за помощь!!!
Доброе утро! Есть макрос, который собирает листы с закрытых книг в другую (целевую) книгу. Подскажите, пожалуйста, где нужно поправить, чтобы копировались только значения, а не формулы, а также чтобы сохранялись высота, ширина столбцов, а также высота строк. (вообщем, форматирование). [vba]
Код
Sub CopyData() Dim i As Long, j As Long, myPath As String, myName As String, x As Range Dim wb As Workbook, ws As Worksheet, aws As Worksheet Application.ScreenUpdating = False With Application.FileDialog(msoFileDialogOpen) .Title = "Выбор файлов для обработки" .AllowMultiSelect = True .ButtonName = "OK" .Show If .SelectedItems.Count = 0 Then Exit Sub Set aws = ActiveSheet For i = 1 To .SelectedItems.Count Set wb = Workbooks.Open(Filename:=.SelectedItems(i), AddToMRU:=False) For j = 1 To wb.Sheets.Count Set x = wb.Sheets(j).[A:A].Find("Всего") If Not x Is Nothing Then wb.Sheets(j).Rows("8:" & x.Row).Copy aws.Cells(Rows.Count, 1).End(xlUp).Offset(1)' здесь пытался вставлять и ".PasteSpecial(xlPasteValues)" , и "xlPasteValues" (то есть без скобок), и еще что-то....но ничего не получается.... End If Next wb.Close False Next End With End Sub
[/vba] Попытался хотя бы поправить вставку значений, но и это не получилось.... Прошу простить, если я вообще не там "редактировал")))) Заранее спасибо за помощь!!!Leojse
Добрый вечер. Так получилось, что смог протестировать макрос только сегодня и обнаружил, что копирование данных всё равно происходит формулой. Может, есть еще какой-то вариант правки макроса, чтобы копировались только значения? В листах есть сгруппированные строки. Заметил еще такую особенность - если искомая ячейка (та, которую ищем в столбце А:А) находится в сгруппированных ячейках и эти ячейки не скрыты, то копирование происходит нормально, а если строки скрыты, то данные не копируются. В некоторых книгах эти строки скрыты, в некоторых нет. Поэтому несовсем удобно сначала всё открывать, затем выбирать отображение сгруппированных строк, запускать макрос, потом сгруппированые строки опять скрывать. Может, и здесь есть какой-то выход, чтобы макрос игнорировал группировку и искал даже в скрытых сгруппированных строках? Очень надеюсь на Вашу помощь!
Добрый вечер. Так получилось, что смог протестировать макрос только сегодня и обнаружил, что копирование данных всё равно происходит формулой. Может, есть еще какой-то вариант правки макроса, чтобы копировались только значения? В листах есть сгруппированные строки. Заметил еще такую особенность - если искомая ячейка (та, которую ищем в столбце А:А) находится в сгруппированных ячейках и эти ячейки не скрыты, то копирование происходит нормально, а если строки скрыты, то данные не копируются. В некоторых книгах эти строки скрыты, в некоторых нет. Поэтому несовсем удобно сначала всё открывать, затем выбирать отображение сгруппированных строк, запускать макрос, потом сгруппированые строки опять скрывать. Может, и здесь есть какой-то выход, чтобы макрос игнорировал группировку и искал даже в скрытых сгруппированных строках? Очень надеюсь на Вашу помощь!Leojse
Посмотри здесь Там макрос не только удаляет лишние символы, но наверно и заменит формулы на значения. Сначала копируешь, а потом на скопированное напускаешь макрос.
Посмотри здесь Там макрос не только удаляет лишние символы, но наверно и заменит формулы на значения. Сначала копируешь, а потом на скопированное напускаешь макрос.
... For i = 1 To .SelectedItems.Count Set wb = Workbooks.Open(Filename:=.SelectedItems(i), AddToMRU:=False) For j = 1 To wb.Sheets.Count Set x = wb.Sheets(j).[A:A].Find("Всего") If Not x Is Nothing Then wb.Sheets(j).Rows("8:" & x.Row).Copy With aws.Cells(Rows.Count, 1).End(xlUp).Offset(1) .PasteSpecial xlPasteValues .PasteSpecial xlPasteFormats End With Application.CutCopyMode = False End If Next wb.Close False Next ...
[/vba]
может, как-то так: [vba]
Код
... For i = 1 To .SelectedItems.Count Set wb = Workbooks.Open(Filename:=.SelectedItems(i), AddToMRU:=False) For j = 1 To wb.Sheets.Count Set x = wb.Sheets(j).[A:A].Find("Всего") If Not x Is Nothing Then wb.Sheets(j).Rows("8:" & x.Row).Copy With aws.Cells(Rows.Count, 1).End(xlUp).Offset(1) .PasteSpecial xlPasteValues .PasteSpecial xlPasteFormats End With Application.CutCopyMode = False End If Next wb.Close False Next ...