Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Копирование только значений, без формул - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Копирование только значений, без формул
julia5555 Дата: Среда, 21.03.2018, 09:15 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 16
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Здравствуйте! не получается оптимизировать макрос чтобы копировал только значения
Сначала я копирую определенный лист из другой книги

[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
Дата добавления - 21.03.2018 в 09:15
Roman777 Дата: Среда, 21.03.2018, 09:53 | Сообщение № 2
Группа: Проверенные
Ранг: Ветеран
Сообщений: 980
Репутация: 127 ±
Замечаний: 0% ±

Excel 2007, Excel 2013
Используйте [vba]
Код
.PasteSpecial
[/vba] :msdn


Много чего не знаю!!!!

Сообщение отредактировал Roman777 - Среда, 21.03.2018, 09:54
 
Ответить
СообщениеИспользуйте [vba]
Код
.PasteSpecial
[/vba] :msdn

Автор - Roman777
Дата добавления - 21.03.2018 в 09:53
julia5555 Дата: Среда, 21.03.2018, 11:50 | Сообщение № 3
Группа: Пользователи
Ранг: Новичок
Сообщений: 16
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Используйте
.PasteSpecial
:msdn

да да я знаю, но не получается, не могу верно прописать строку, сразу в ошибку
 
Ответить
Сообщение
Используйте
.PasteSpecial
:msdn

да да я знаю, но не получается, не могу верно прописать строку, сразу в ошибку

Автор - julia5555
Дата добавления - 21.03.2018 в 11:50
Mikael Дата: Среда, 21.03.2018, 12:32 | Сообщение № 4
Группа: Пользователи
Ранг: Участник
Сообщений: 80
Репутация: 31 ±
Замечаний: 0% ±

Excel 2010
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
[/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
[/vba]

Автор - Mikael
Дата добавления - 21.03.2018 в 12:32
julia5555 Дата: Среда, 21.03.2018, 13:17 | Сообщение № 5
Группа: Пользователи
Ранг: Новичок
Сообщений: 16
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
julia5555, добрый день!А так пробовали?


не выходит, прикрепляю файл
[moder]Не нужно цитировать весь пост целиком - это нарушение правил.[/moder]
К сообщению приложен файл: 4688776.xlsm (75.1 Kb)
 
Ответить
Сообщение
julia5555, добрый день!А так пробовали?


не выходит, прикрепляю файл
[moder]Не нужно цитировать весь пост целиком - это нарушение правил.[/moder]

Автор - julia5555
Дата добавления - 21.03.2018 в 13:17
Mikael Дата: Среда, 21.03.2018, 13:26 | Сообщение № 6
Группа: Пользователи
Ранг: Участник
Сообщений: 80
Репутация: 31 ±
Замечаний: 0% ±

Excel 2010
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) - уберите объединение ячеек
К сообщению приложен файл: 1416920.xlsm (73.9 Kb)


Сообщение отредактировал Mikael - Среда, 21.03.2018, 13:40
 
Ответить
Сообщение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
Дата добавления - 21.03.2018 в 13:26
julia5555 Дата: Среда, 21.03.2018, 14:13 | Сообщение № 7
Группа: Пользователи
Ранг: Новичок
Сообщений: 16
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
julia5555,Попробуйте так:


дааа, спасибо большое!
Не очень поняла почему мы пользовались[vba]
Код
.Range("a" & l).Resize(UBound(aTmp), UBound(aTmp, 2)).Value = aTmp
[/vba] а не [vba]
Код
Range("a" & l).PasteSpecial xlPasteValues
[/vba] щас буду читать, так как новичек в этой теме
Спасибо еще раз
 
Ответить
Сообщение
julia5555,Попробуйте так:


дааа, спасибо большое!
Не очень поняла почему мы пользовались[vba]
Код
.Range("a" & l).Resize(UBound(aTmp), UBound(aTmp, 2)).Value = aTmp
[/vba] а не [vba]
Код
Range("a" & l).PasteSpecial xlPasteValues
[/vba] щас буду читать, так как новичек в этой теме
Спасибо еще раз

Автор - julia5555
Дата добавления - 21.03.2018 в 14:13
Mikael Дата: Среда, 21.03.2018, 14:33 | Сообщение № 8
Группа: Пользователи
Ранг: Участник
Сообщений: 80
Репутация: 31 ±
Замечаний: 0% ±

Excel 2010
Не очень поняла почему мы пользовались

это решение через массив, я загружаю все данные с листа ws сначала в массив, а потом выгружаю этот массив на лист Svod. Этот метод куда быстрее копирования-вставки.

Чтобы использовать .PasteSpecial:
В Вашем файле проблема в 13 строке (17 на листе Svod) - уберите объединение ячеек
 
Ответить
Сообщение
Не очень поняла почему мы пользовались

это решение через массив, я загружаю все данные с листа ws сначала в массив, а потом выгружаю этот массив на лист Svod. Этот метод куда быстрее копирования-вставки.

Чтобы использовать .PasteSpecial:
В Вашем файле проблема в 13 строке (17 на листе Svod) - уберите объединение ячеек

Автор - Mikael
Дата добавления - 21.03.2018 в 14:33
julia5555 Дата: Среда, 28.03.2018, 06:54 | Сообщение № 9
Группа: Пользователи
Ранг: Новичок
Сообщений: 16
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Спасибо большое, разобралась и все работает
 
Ответить
СообщениеСпасибо большое, разобралась и все работает

Автор - julia5555
Дата добавления - 28.03.2018 в 06:54
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!