Здравствуйте! не получается оптимизировать макрос чтобы копировал только значения Сначала я копирую определенный лист из другой книги
[vba]
Код
Sub CombineWorkbooks() Dim filestoopen Dim x As Integer Application.ScreenUpdating = False filestoopen = Application.GetOpenFilename(filefilter:="All files(*.*),*.*", MultiSelect:=True, Title:="Files to Merge") If TypeName(filestoopen) = "Boolean" Then MsgBox "Файл не выбран" Exit Sub End If
x = 1 While x <= UBound(filestoopen) Set importWB = Workbooks.Open(Filename:=filestoopen(x)) Sheets("Свод").Copy after:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count) importWB.Close savechanges:=False x = x + 1 Wend Application.ScreenUpdating = True
End Sub
[/vba]
Затем я на новом листе собираю свод из текущих листов, все копируется но с формулами
[vba]
Код
Sub www() Dim ws As Worksheet, l& With Sheets("Svod") .UsedRange.Offset(9).ClearContents For Each ws In Worksheets If Not ws.Name = "Svod" Then l = .Cells.Find("*", [a20], xlValues, 1, 1, 2).Row + 1 ws.UsedRange.Offset(9).Copy .Range("a" & l) End If Next End With End Sub
[/vba]
Как в свод скопировать только значения? Спасибо
Здравствуйте! не получается оптимизировать макрос чтобы копировал только значения Сначала я копирую определенный лист из другой книги
[vba]
Код
Sub CombineWorkbooks() Dim filestoopen Dim x As Integer Application.ScreenUpdating = False filestoopen = Application.GetOpenFilename(filefilter:="All files(*.*),*.*", MultiSelect:=True, Title:="Files to Merge") If TypeName(filestoopen) = "Boolean" Then MsgBox "Файл не выбран" Exit Sub End If
x = 1 While x <= UBound(filestoopen) Set importWB = Workbooks.Open(Filename:=filestoopen(x)) Sheets("Свод").Copy after:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count) importWB.Close savechanges:=False x = x + 1 Wend Application.ScreenUpdating = True
End Sub
[/vba]
Затем я на новом листе собираю свод из текущих листов, все копируется но с формулами
[vba]
Код
Sub www() Dim ws As Worksheet, l& With Sheets("Svod") .UsedRange.Offset(9).ClearContents For Each ws In Worksheets If Not ws.Name = "Svod" Then l = .Cells.Find("*", [a20], xlValues, 1, 1, 2).Row + 1 ws.UsedRange.Offset(9).Copy .Range("a" & l) End If Next End With End Sub
[/vba]
Как в свод скопировать только значения? Спасибоjulia5555
Sub www() Dim ws As Worksheet, l& With Sheets("Svod") .UsedRange.Offset(9).ClearContents For Each ws In Worksheets If Not ws.Name = "Svod" Then l = .Cells.Find("*", [a20], xlValues, 1, 1, 2).Row + 1 ws.UsedRange.Offset(9).Copy .Range("a" & l).PasteSpecial xlPasteValues Application.CutCopyMode = 0 End If Next End With End Sub
[/vba]
julia5555, добрый день! А так пробовали? [vba]
Код
Sub www() Dim ws As Worksheet, l& With Sheets("Svod") .UsedRange.Offset(9).ClearContents For Each ws In Worksheets If Not ws.Name = "Svod" Then l = .Cells.Find("*", [a20], xlValues, 1, 1, 2).Row + 1 ws.UsedRange.Offset(9).Copy .Range("a" & l).PasteSpecial xlPasteValues Application.CutCopyMode = 0 End If Next End With End Sub
Sub www_Mika() Dim ws As Worksheet, l&, aTmp With Sheets("Svod") .UsedRange.Offset(9).ClearContents For Each ws In Worksheets If Not ws.Name = "Svod" Then l = .Cells.Find("*", [a20], xlValues, 1, 1, 2).Row + 1 aTmp = ws.UsedRange.Offset(9).Value .Range("a" & l).Resize(UBound(aTmp), UBound(aTmp, 2)).Value = aTmp End If Next End With End Sub
[/vba]
UPD: В Вашем файле проблема в 13 строке (17 на листе Svod) - уберите объединение ячеек
julia5555, Попробуйте так: [vba]
Код
Sub www_Mika() Dim ws As Worksheet, l&, aTmp With Sheets("Svod") .UsedRange.Offset(9).ClearContents For Each ws In Worksheets If Not ws.Name = "Svod" Then l = .Cells.Find("*", [a20], xlValues, 1, 1, 2).Row + 1 aTmp = ws.UsedRange.Offset(9).Value .Range("a" & l).Resize(UBound(aTmp), UBound(aTmp, 2)).Value = aTmp End If Next End With End Sub
[/vba]
UPD: В Вашем файле проблема в 13 строке (17 на листе Svod) - уберите объединение ячеекMikael
это решение через массив, я загружаю все данные с листа ws сначала в массив, а потом выгружаю этот массив на лист Svod. Этот метод куда быстрее копирования-вставки.
это решение через массив, я загружаю все данные с листа ws сначала в массив, а потом выгружаю этот массив на лист Svod. Этот метод куда быстрее копирования-вставки.