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

Вход

Регистрация

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

 

= Мир MS Excel/сохранить несколько страниц в указанные директории - Мир MS Excel

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

Excel 2010
Здравствуйте.
Есть макрос который сохраняет определенный лист в определенную папку.Как его правильно модернизировать чтобы он после первого действия выполнял еще действия, а именно копировал три листа уже в другую папку.

Вот пример первого макроса.
[vba]
Код
Sub Лист_экспорт()
       Dim cPath As String, cPrefix As String, cName As String
       cPath = ThisWorkbook.Path & "\экспорт\"
       cPrefix = "Экспорт "
       cName = cPath & cPrefix & Replace(ThisWorkbook.Name, ".xlsm", "") & ".xlsx"
          
       Dim wbC As Workbook, wbE As Workbook
       Application.ScreenUpdating = False
       Set wbC = ThisWorkbook
       Set wbE = Workbooks.Add
       wbE.Sheets(1).Name = "Экспорт"
       wbC.Sheets("Экспорт").Cells.Copy
       wbE.Sheets("Экспорт").[a1].PasteSpecial xlPasteValues
       Application.DisplayAlerts = False
       wbE.SaveAs cName
       wbE.Close False
       Application.DisplayAlerts = True
       Application.ScreenUpdating = True
          
      End Sub
[/vba]

к нему хочу еще это добавить. Правда теперь хотелось бы чтоб копировались значения а не формулы но сохранялся формат изначальный.

"добавить к нему" это значит что надо сделать сначала первое действие а затем второе. 1 действие копируем одну страничку в папку эеспорт 2 действие копируем три странички в другую папку с сохранением форматов но копируем только значения.

Пока что наткнулся на проблему: не знаю как прописать второй путь для второго файла. Возможно надо сначала первый сохранить и закрыть ?

[vba]
Код
   Dim cPath As String, cPrefix As String, cName As String
       cPath = ThisWorkbook.Path & "\\1c-server\ОБЩИЕ_ДОКУМЕНТЫ\Бухгалтерия\Овощи_приход\"
       cPrefix = "Экспорт "
       cName = cPath & cPrefix & Replace(ThisWorkbook.Name, ".xlsm", "") & ".xlsx"
          
       Dim wbC As Workbook, wbE As Workbook
       Application.ScreenUpdating = False
       Set wbC = ThisWorkbook
       Set wbE = Workbooks.Add
       wbE.Sheets(3).Name = "Экспорт"
       wbC.Sheets("Экспорт").Cells.Copy
       wbE.Sheets("Экспорт").[a1].PasteSpecial xlPasteValues
       Application.DisplayAlerts = False
       wbE.Sheets(1).Name = "БухПрих"
       wbC.Sheets("БухПрих").Cells.Copy
       wbE.Sheets("БухПрих").[a1].PasteSpecial xlPasteValues
       Application.DisplayAlerts = False
       wbE.Sheets(2).Name = "Выб. БУХ"
       wbC.Sheets("Выб. БУХ").Cells.Copy
       wbE.Sheets("Выб. БУХ").[a1].PasteSpecial xlPasteValues
       Application.DisplayAlerts = False
       wbE.SaveAs cName
       wbE.Close False
       Application.DisplayAlerts = True
       Application.ScreenUpdating = True
          
End Sub
[/vba]

Заранее благодарен.


Сообщение отредактировал koyaanisqatsi - Пятница, 06.03.2015, 20:48
 
Ответить
СообщениеЗдравствуйте.
Есть макрос который сохраняет определенный лист в определенную папку.Как его правильно модернизировать чтобы он после первого действия выполнял еще действия, а именно копировал три листа уже в другую папку.

Вот пример первого макроса.
[vba]
Код
Sub Лист_экспорт()
       Dim cPath As String, cPrefix As String, cName As String
       cPath = ThisWorkbook.Path & "\экспорт\"
       cPrefix = "Экспорт "
       cName = cPath & cPrefix & Replace(ThisWorkbook.Name, ".xlsm", "") & ".xlsx"
          
       Dim wbC As Workbook, wbE As Workbook
       Application.ScreenUpdating = False
       Set wbC = ThisWorkbook
       Set wbE = Workbooks.Add
       wbE.Sheets(1).Name = "Экспорт"
       wbC.Sheets("Экспорт").Cells.Copy
       wbE.Sheets("Экспорт").[a1].PasteSpecial xlPasteValues
       Application.DisplayAlerts = False
       wbE.SaveAs cName
       wbE.Close False
       Application.DisplayAlerts = True
       Application.ScreenUpdating = True
          
      End Sub
[/vba]

к нему хочу еще это добавить. Правда теперь хотелось бы чтоб копировались значения а не формулы но сохранялся формат изначальный.

"добавить к нему" это значит что надо сделать сначала первое действие а затем второе. 1 действие копируем одну страничку в папку эеспорт 2 действие копируем три странички в другую папку с сохранением форматов но копируем только значения.

Пока что наткнулся на проблему: не знаю как прописать второй путь для второго файла. Возможно надо сначала первый сохранить и закрыть ?

[vba]
Код
   Dim cPath As String, cPrefix As String, cName As String
       cPath = ThisWorkbook.Path & "\\1c-server\ОБЩИЕ_ДОКУМЕНТЫ\Бухгалтерия\Овощи_приход\"
       cPrefix = "Экспорт "
       cName = cPath & cPrefix & Replace(ThisWorkbook.Name, ".xlsm", "") & ".xlsx"
          
       Dim wbC As Workbook, wbE As Workbook
       Application.ScreenUpdating = False
       Set wbC = ThisWorkbook
       Set wbE = Workbooks.Add
       wbE.Sheets(3).Name = "Экспорт"
       wbC.Sheets("Экспорт").Cells.Copy
       wbE.Sheets("Экспорт").[a1].PasteSpecial xlPasteValues
       Application.DisplayAlerts = False
       wbE.Sheets(1).Name = "БухПрих"
       wbC.Sheets("БухПрих").Cells.Copy
       wbE.Sheets("БухПрих").[a1].PasteSpecial xlPasteValues
       Application.DisplayAlerts = False
       wbE.Sheets(2).Name = "Выб. БУХ"
       wbC.Sheets("Выб. БУХ").Cells.Copy
       wbE.Sheets("Выб. БУХ").[a1].PasteSpecial xlPasteValues
       Application.DisplayAlerts = False
       wbE.SaveAs cName
       wbE.Close False
       Application.DisplayAlerts = True
       Application.ScreenUpdating = True
          
End Sub
[/vba]

Заранее благодарен.

Автор - koyaanisqatsi
Дата добавления - 06.03.2015 в 19:57
koyaanisqatsi Дата: Пятница, 06.03.2015, 20:37 | Сообщение № 2
Группа: Проверенные
Ранг: Ветеран
Сообщений: 713
Репутация: 15 ±
Замечаний: 0% ±

Excel 2010
Догадался как исправить некоторые проблемы.
Теперь макрос такой:

[vba]
Код
Sub Лист_экспорт()
      Dim cPath As String, cPrefix As String, cName As String
      cPath = ThisWorkbook.Path & "\экспорт\"
      cPrefix = "Экспорт "
      cName = cPath & cPrefix & Replace(ThisWorkbook.Name, ".xlsm", "") & ".xlsx"
        
      Dim wbC As Workbook, wbE As Workbook
      Application.ScreenUpdating = False
      Set wbC = ThisWorkbook
      Set wbE = Workbooks.Add
      wbE.Sheets(1).Name = "Экспорт"
      wbC.Sheets("Экспорт").Cells.Copy
      wbE.Sheets("Экспорт").[a1].PasteSpecial xlPasteValues
      Application.DisplayAlerts = False
      wbE.SaveAs cName
      wbE.Close False
      Application.DisplayAlerts = True
      Application.ScreenUpdating = True
        
      
        
      Dim bPath As String, bPrefix As String, bName As String
      bPath = ThisWorkbook.Path & "\\1c-server\ОБЩИЕ_ДОКУМЕНТЫ\Бухгалтерия\Овощи_приход\"
      bPrefix = "Экспорт "
      bName = bPath & bPrefix & Replace(ThisWorkbook.Name, ".xlsm", "") & ".xlsx"
        
      Dim wbQ As Workbook, wbA As Workbook
      Application.ScreenUpdating = False
      Set wbQ = ThisWorkbook
      Set wbA = Workbooks.Add
      wbA.Sheets(3).Name = "Экспорт"
      wbQ.Sheets("Экспорт").Cells.Copy
      wbA.Sheets("Экспорт").[a1].PasteSpecial xlPasteValues
      Application.DisplayAlerts = False
      wbA.Sheets(1).Name = "БухПрих"
      wbQ.Sheets("БухПрих").Cells.Copy
      wbA.Sheets("БухПрих").[a1].PasteSpecial xlPasteValues
      Application.DisplayAlerts = False
      wbA.Sheets(2).Name = "Выб. БУХ"
      wbQ.Sheets("Выб. БУХ").Cells.Copy
      wbA.Sheets("Выб. БУХ").[a1].PasteSpecial xlPasteValues
      Application.DisplayAlerts = False
      wbA.SaveAs bName
      wbA.Close False
      Application.DisplayAlerts = True
      Application.ScreenUpdating = True
        
End Sub
[/vba]

Почти все что хотел работает. Проблемы следующие.
Естественно скидывается формат. Так как я и не знаю как сказать чтобы копировал учитывая формат. И почему-то не хочет сохранять файл. может я путь не правильно пишу хотя клинет на строчке

[vba]
Код
  wbA.SaveAs bName
[/vba]


Сообщение отредактировал koyaanisqatsi - Пятница, 06.03.2015, 20:40
 
Ответить
СообщениеДогадался как исправить некоторые проблемы.
Теперь макрос такой:

[vba]
Код
Sub Лист_экспорт()
      Dim cPath As String, cPrefix As String, cName As String
      cPath = ThisWorkbook.Path & "\экспорт\"
      cPrefix = "Экспорт "
      cName = cPath & cPrefix & Replace(ThisWorkbook.Name, ".xlsm", "") & ".xlsx"
        
      Dim wbC As Workbook, wbE As Workbook
      Application.ScreenUpdating = False
      Set wbC = ThisWorkbook
      Set wbE = Workbooks.Add
      wbE.Sheets(1).Name = "Экспорт"
      wbC.Sheets("Экспорт").Cells.Copy
      wbE.Sheets("Экспорт").[a1].PasteSpecial xlPasteValues
      Application.DisplayAlerts = False
      wbE.SaveAs cName
      wbE.Close False
      Application.DisplayAlerts = True
      Application.ScreenUpdating = True
        
      
        
      Dim bPath As String, bPrefix As String, bName As String
      bPath = ThisWorkbook.Path & "\\1c-server\ОБЩИЕ_ДОКУМЕНТЫ\Бухгалтерия\Овощи_приход\"
      bPrefix = "Экспорт "
      bName = bPath & bPrefix & Replace(ThisWorkbook.Name, ".xlsm", "") & ".xlsx"
        
      Dim wbQ As Workbook, wbA As Workbook
      Application.ScreenUpdating = False
      Set wbQ = ThisWorkbook
      Set wbA = Workbooks.Add
      wbA.Sheets(3).Name = "Экспорт"
      wbQ.Sheets("Экспорт").Cells.Copy
      wbA.Sheets("Экспорт").[a1].PasteSpecial xlPasteValues
      Application.DisplayAlerts = False
      wbA.Sheets(1).Name = "БухПрих"
      wbQ.Sheets("БухПрих").Cells.Copy
      wbA.Sheets("БухПрих").[a1].PasteSpecial xlPasteValues
      Application.DisplayAlerts = False
      wbA.Sheets(2).Name = "Выб. БУХ"
      wbQ.Sheets("Выб. БУХ").Cells.Copy
      wbA.Sheets("Выб. БУХ").[a1].PasteSpecial xlPasteValues
      Application.DisplayAlerts = False
      wbA.SaveAs bName
      wbA.Close False
      Application.DisplayAlerts = True
      Application.ScreenUpdating = True
        
End Sub
[/vba]

Почти все что хотел работает. Проблемы следующие.
Естественно скидывается формат. Так как я и не знаю как сказать чтобы копировал учитывая формат. И почему-то не хочет сохранять файл. может я путь не правильно пишу хотя клинет на строчке

[vba]
Код
  wbA.SaveAs bName
[/vba]

Автор - koyaanisqatsi
Дата добавления - 06.03.2015 в 20:37
Manyasha Дата: Пятница, 06.03.2015, 20:51 | Сообщение № 3
Группа: Модераторы
Ранг: Старожил
Сообщений: 2198
Репутация: 898 ±
Замечаний: 0% ±

Excel 2010, 2016
koyaanisqatsi, здравствуйте. Напишите [vba]
Код
debug.Print bName
[/vba] и проверьте существует ли такой путь. Настараживают 2 слеша в середине


ЯД: 410013299366744 WM: R193491431804
 
Ответить
Сообщениеkoyaanisqatsi, здравствуйте. Напишите [vba]
Код
debug.Print bName
[/vba] и проверьте существует ли такой путь. Настараживают 2 слеша в середине

Автор - Manyasha
Дата добавления - 06.03.2015 в 20:51
koyaanisqatsi Дата: Пятница, 06.03.2015, 20:55 | Сообщение № 4
Группа: Проверенные
Ранг: Ветеран
Сообщений: 713
Репутация: 15 ±
Замечаний: 0% ±

Excel 2010
Manyasha, Я взял сетевой путь. Может надо написать не сетевой ?

Все равно неправильный путь получается даже если не сетевой указывать. Выходит гибрид сетевого и не сетевого

[vba]
Код
  : bName : "\\1c-server\ОБЩИЕ_ДОКУМЕНТЫ\Диспетчера\Заказ по овощамD:\ОБЩИЕ_ДОКУМЕНТЫ\Бухгалтерия\Овощи_приход\Экспорт Овощи 12.03.2015 Четверг.xlsx" : String
[/vba]


Сообщение отредактировал koyaanisqatsi - Пятница, 06.03.2015, 21:02
 
Ответить
СообщениеManyasha, Я взял сетевой путь. Может надо написать не сетевой ?

Все равно неправильный путь получается даже если не сетевой указывать. Выходит гибрид сетевого и не сетевого

[vba]
Код
  : bName : "\\1c-server\ОБЩИЕ_ДОКУМЕНТЫ\Диспетчера\Заказ по овощамD:\ОБЩИЕ_ДОКУМЕНТЫ\Бухгалтерия\Овощи_приход\Экспорт Овощи 12.03.2015 Четверг.xlsx" : String
[/vba]

Автор - koyaanisqatsi
Дата добавления - 06.03.2015 в 20:55
Manyasha Дата: Пятница, 06.03.2015, 21:02 | Сообщение № 5
Группа: Модераторы
Ранг: Старожил
Сообщений: 2198
Репутация: 898 ±
Замечаний: 0% ±

Excel 2010, 2016
Сетевой можно тоже, только почему 2 слеша по середине, они разве не в начале должны быть?
P.s. Извините, если я туплю))


ЯД: 410013299366744 WM: R193491431804
 
Ответить
СообщениеСетевой можно тоже, только почему 2 слеша по середине, они разве не в начале должны быть?
P.s. Извините, если я туплю))

Автор - Manyasha
Дата добавления - 06.03.2015 в 21:02
koyaanisqatsi Дата: Пятница, 06.03.2015, 21:04 | Сообщение № 6
Группа: Проверенные
Ранг: Ветеран
Сообщений: 713
Репутация: 15 ±
Замечаний: 0% ±

Excel 2010
Manyasha, мы с вами как-то по разному смотрим. Я вижу в начале двойной слеш. Или вы запустили макрос ? ДА в логе он приклеивает к моему пути какойто свой. Почему он так делает не знаю. перед тем что я написал он еще дописывает путь до месторасположения текущего файла.


Сообщение отредактировал koyaanisqatsi - Пятница, 06.03.2015, 21:06
 
Ответить
СообщениеManyasha, мы с вами как-то по разному смотрим. Я вижу в начале двойной слеш. Или вы запустили макрос ? ДА в логе он приклеивает к моему пути какойто свой. Почему он так делает не знаю. перед тем что я написал он еще дописывает путь до месторасположения текущего файла.

Автор - koyaanisqatsi
Дата добавления - 06.03.2015 в 21:04
Manyasha Дата: Пятница, 06.03.2015, 21:12 | Сообщение № 7
Группа: Модераторы
Ранг: Старожил
Сообщений: 2198
Репутация: 898 ±
Замечаний: 0% ±

Excel 2010, 2016
Уберите ThisWorkbook.Path из переменной bPath


ЯД: 410013299366744 WM: R193491431804
 
Ответить
СообщениеУберите ThisWorkbook.Path из переменной bPath

Автор - Manyasha
Дата добавления - 06.03.2015 в 21:12
koyaanisqatsi Дата: Пятница, 06.03.2015, 21:22 | Сообщение № 8
Группа: Проверенные
Ранг: Ветеран
Сообщений: 713
Репутация: 15 ±
Замечаний: 0% ±

Excel 2010
Manyasha, УИИ)) Получилось ! Теперь бы придумать как сохранить форматирование. Но я наверно попробую почитать справочники.

Почитал о параметрах вставки и не нашел нужную команду параметров вставки ( Неужто это никак не сделать ?
мне надо как-то склеить два этих условия

xlPasteFormats
xlPasteValuesAndNumberFormats


Сообщение отредактировал koyaanisqatsi - Пятница, 06.03.2015, 21:58
 
Ответить
СообщениеManyasha, УИИ)) Получилось ! Теперь бы придумать как сохранить форматирование. Но я наверно попробую почитать справочники.

Почитал о параметрах вставки и не нашел нужную команду параметров вставки ( Неужто это никак не сделать ?
мне надо как-то склеить два этих условия

xlPasteFormats
xlPasteValuesAndNumberFormats

Автор - koyaanisqatsi
Дата добавления - 06.03.2015 в 21:22
ShAM Дата: Пятница, 06.03.2015, 21:57 | Сообщение № 9
Группа: Друзья
Ранг: Старожил
Сообщений: 1347
Репутация: 249 ±
Замечаний: 0% ±

Excel 2010
Теперь бы придумать как сохранить форматирование.
Может добавить спецвставку - форматы: [vba]
Код
wbE.Sheets("Экспорт").[a1].PasteSpecial Paste:=xlPasteFormats
[/vba]
 
Ответить
Сообщение
Теперь бы придумать как сохранить форматирование.
Может добавить спецвставку - форматы: [vba]
Код
wbE.Sheets("Экспорт").[a1].PasteSpecial Paste:=xlPasteFormats
[/vba]

Автор - ShAM
Дата добавления - 06.03.2015 в 21:57
koyaanisqatsi Дата: Пятница, 06.03.2015, 22:01 | Сообщение № 10
Группа: Проверенные
Ранг: Ветеран
Сообщений: 713
Репутация: 15 ±
Замечаний: 0% ±

Excel 2010
ShAM, Ага уже почти сам до этого дошел только не знал как склеить ) Спасибо помогло.
 
Ответить
СообщениеShAM, Ага уже почти сам до этого дошел только не знал как склеить ) Спасибо помогло.

Автор - koyaanisqatsi
Дата добавления - 06.03.2015 в 22:01
Manyasha Дата: Пятница, 06.03.2015, 22:13 | Сообщение № 11
Группа: Модераторы
Ранг: Старожил
Сообщений: 2198
Репутация: 898 ±
Замечаний: 0% ±

Excel 2010, 2016
А можно и так
[vba]
Код
Sheets(Array("Лист1", "Лист2", "Лист3")).Copy' копируем 3 листа
Set newB = ActiveWorkbook
For Each sh In newB.Sheets
      sh.UsedRange.Value = sh.UsedRange.Value'удаляем формулы
Next sh
newB.SaveAs bName'сохраняем, bName - полный путь
[/vba]
Только листы переименовать останется.


ЯД: 410013299366744 WM: R193491431804

Сообщение отредактировал Manyasha - Пятница, 06.03.2015, 22:14
 
Ответить
СообщениеА можно и так
[vba]
Код
Sheets(Array("Лист1", "Лист2", "Лист3")).Copy' копируем 3 листа
Set newB = ActiveWorkbook
For Each sh In newB.Sheets
      sh.UsedRange.Value = sh.UsedRange.Value'удаляем формулы
Next sh
newB.SaveAs bName'сохраняем, bName - полный путь
[/vba]
Только листы переименовать останется.

Автор - Manyasha
Дата добавления - 06.03.2015 в 22:13
Мир MS Excel » Вопросы и решения » Вопросы по VBA » сохранить несколько страниц в указанные директории (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

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