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

Вход

Регистрация

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

 

= Мир MS Excel/Правка готового макроса на копирование листов - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Правка готового макроса на копирование листов (Макросы/Sub)
Правка готового макроса на копирование листов
Leojse Дата: Понедельник, 09.06.2014, 08:51 | Сообщение № 1
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 148
Репутация: 1 ±
Замечаний: 0% ±

2010/2013
Доброе утро!
Есть макрос, который собирает листы с закрытых книг в другую (целевую) книгу. Подскажите, пожалуйста, где нужно поправить, чтобы копировались только значения, а не формулы, а также чтобы сохранялись высота, ширина столбцов, а также высота строк. (вообщем, форматирование).
[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
Дата добавления - 09.06.2014 в 08:51
Саня Дата: Понедельник, 09.06.2014, 09:22 | Сообщение № 2
Группа: Друзья
Ранг: Ветеран
Сообщений: 1068
Репутация: 560 ±
Замечаний: 0% ±

XL 2016
вместо строки, которую ты редактировал

[vba]
Код
dim r as range
set r=aws.Cells(Rows.Count, 1).End(xlUp).Offset(1)

wb.Sheets(j).Rows("8:" & x.Row).Copy r
r.value=r.value
[/vba]
 
Ответить
Сообщениевместо строки, которую ты редактировал

[vba]
Код
dim r as range
set r=aws.Cells(Rows.Count, 1).End(xlUp).Offset(1)

wb.Sheets(j).Rows("8:" & x.Row).Copy r
r.value=r.value
[/vba]

Автор - Саня
Дата добавления - 09.06.2014 в 09:22
Leojse Дата: Понедельник, 09.06.2014, 09:32 | Сообщение № 3
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 148
Репутация: 1 ±
Замечаний: 0% ±

2010/2013
Саня, спасибо большое!
 
Ответить
СообщениеСаня, спасибо большое!

Автор - Leojse
Дата добавления - 09.06.2014 в 09:32
Leojse Дата: Четверг, 19.06.2014, 22:33 | Сообщение № 4
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 148
Репутация: 1 ±
Замечаний: 0% ±

2010/2013
Добрый вечер.
Так получилось, что смог протестировать макрос только сегодня и обнаружил, что копирование данных всё равно происходит формулой. Может, есть еще какой-то вариант правки макроса, чтобы копировались только значения?
В листах есть сгруппированные строки. Заметил еще такую особенность - если искомая ячейка (та, которую ищем в столбце А:А) находится в сгруппированных ячейках и эти ячейки не скрыты, то копирование происходит нормально, а если строки скрыты, то данные не копируются. В некоторых книгах эти строки скрыты, в некоторых нет. Поэтому несовсем удобно сначала всё открывать, затем выбирать отображение сгруппированных строк, запускать макрос, потом сгруппированые строки опять скрывать. Может, и здесь есть какой-то выход, чтобы макрос игнорировал группировку и искал даже в скрытых сгруппированных строках?
Очень надеюсь на Вашу помощь!
 
Ответить
СообщениеДобрый вечер.
Так получилось, что смог протестировать макрос только сегодня и обнаружил, что копирование данных всё равно происходит формулой. Может, есть еще какой-то вариант правки макроса, чтобы копировались только значения?
В листах есть сгруппированные строки. Заметил еще такую особенность - если искомая ячейка (та, которую ищем в столбце А:А) находится в сгруппированных ячейках и эти ячейки не скрыты, то копирование происходит нормально, а если строки скрыты, то данные не копируются. В некоторых книгах эти строки скрыты, в некоторых нет. Поэтому несовсем удобно сначала всё открывать, затем выбирать отображение сгруппированных строк, запускать макрос, потом сгруппированые строки опять скрывать. Может, и здесь есть какой-то выход, чтобы макрос игнорировал группировку и искал даже в скрытых сгруппированных строках?
Очень надеюсь на Вашу помощь!

Автор - Leojse
Дата добавления - 19.06.2014 в 22:33
Leojse Дата: Суббота, 21.06.2014, 21:05 | Сообщение № 5
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 148
Репутация: 1 ±
Замечаний: 0% ±

2010/2013
Ну пожалуйста, помогите поправить код.
 
Ответить
СообщениеНу пожалуйста, помогите поправить код.

Автор - Leojse
Дата добавления - 21.06.2014 в 21:05
SergeyKorotun Дата: Суббота, 21.06.2014, 23:20 | Сообщение № 6
Группа: Проверенные
Ранг: Обитатель
Сообщений: 301
Репутация: 15 ±
Замечаний: 0% ±

Excel 2007
Посмотри здесь
Там макрос не только удаляет лишние символы, но наверно и заменит формулы на значения.
Сначала копируешь, а потом на скопированное напускаешь макрос.

PS и здесь посмотри


Сообщение отредактировал SergeyKorotun - Суббота, 21.06.2014, 23:24
 
Ответить
СообщениеПосмотри здесь
Там макрос не только удаляет лишние символы, но наверно и заменит формулы на значения.
Сначала копируешь, а потом на скопированное напускаешь макрос.

PS и здесь посмотри

Автор - SergeyKorotun
Дата добавления - 21.06.2014 в 23:20
nilem Дата: Воскресенье, 22.06.2014, 19:30 | Сообщение № 7
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация: 563 ±
Замечаний: 0% ±

Excel 2013, 2016
может, как-то так:
[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
...
[/vba]


Яндекс.Деньги 4100159601573
 
Ответить
Сообщениеможет, как-то так:
[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
...
[/vba]

Автор - nilem
Дата добавления - 22.06.2014 в 19:30
Leojse Дата: Воскресенье, 22.06.2014, 22:33 | Сообщение № 8
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 148
Репутация: 1 ±
Замечаний: 0% ±

2010/2013
nilem, спасибо Вам большое!
 
Ответить
Сообщениеnilem, спасибо Вам большое!

Автор - Leojse
Дата добавления - 22.06.2014 в 22:33
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Правка готового макроса на копирование листов (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

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