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

Вход

Регистрация

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

 

= Мир MS Excel/все листы из определенного файла в активный - Мир MS Excel

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

Excel 2010
Здравствуйте. Искал код уже готовый по импорту страниц из другого файла. Кое какой нашел но у меня не получается его сделать рабочим. Ругается прямо на первую строку "Sub ttt()"

Короче есть много листов которые хотел бы научится импортировать в основной файл. Файл из которого хочу взять страницы всегда может лежать в одном и том же месте и называться одинаково. Единственное в листах которые переносим из книги в книгу должны сохранится все формулы без изменений.

Заметил такую вещь что я даже не могу сохранить страницы с неработающими ссылкам ( Как быть в такой ситуации ? В макросе менять все формулы на не формулы и обратно ?

[vba]
Код

Sub ttt()
         Set objExcel = New Excel.Application
         Set wbhidden = objExcel.Workbooks.Open("C:\Users\Ultramode\Desktop\шмойства\Новая папка\разделение этикеток\Этикетки Овощи 11.11.2014 Вторник.xlsm")
               
           Cells(1, 10).Value = wbhidden.Sheets(1).Cells(1, 1)
                 
           wbhidden.Close ' обязательно при выходе из кода
         Set objExcel = Nothing  ' обязательно при выходе из кода
End Sub
[/vba]

и Нашел рабочий макрос:

[vba]
Код

Sub CombineWorkbooks()   
      Dim FilesToOpen   
      Dim x As Integer   
      On Error GoTo ErrHandler   
      Application.ScreenUpdating = False   
      FilesToOpen = Application.GetOpenFilename _   
                    (FileFilter:="Microsoft Excel Files (*.xls), *.xls", _   
                     MultiSelect:=True, Title:="Files to Merge")   
      If TypeName(FilesToOpen) = "Boolean" Then   
          MsgBox "Не выбрано ни одного файла!"   
          GoTo ExitHandler   
      End If   
      x = 1   
      While x <= UBound(FilesToOpen)   
          Workbooks.Open Filename:=FilesToOpen(x)   
          Sheets().Move After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)   
          x = x + 1   
      Wend   
ExitHandler:   
      Application.ScreenUpdating = True   
      Exit Sub   
ErrHandler:   
      MsgBox Err.Description   
      Resume ExitHandler   
End Sub
[/vba]

Но как быть теперь с ссылками которые разрушаются ?
К сообщению приложен файл: zakaz.xlsx (7.4 Kb) · etiketki.xlsx (14.3 Kb)


Сообщение отредактировал koyaanisqatsi - Воскресенье, 09.11.2014, 17:43
 
Ответить
СообщениеЗдравствуйте. Искал код уже готовый по импорту страниц из другого файла. Кое какой нашел но у меня не получается его сделать рабочим. Ругается прямо на первую строку "Sub ttt()"

Короче есть много листов которые хотел бы научится импортировать в основной файл. Файл из которого хочу взять страницы всегда может лежать в одном и том же месте и называться одинаково. Единственное в листах которые переносим из книги в книгу должны сохранится все формулы без изменений.

Заметил такую вещь что я даже не могу сохранить страницы с неработающими ссылкам ( Как быть в такой ситуации ? В макросе менять все формулы на не формулы и обратно ?

[vba]
Код

Sub ttt()
         Set objExcel = New Excel.Application
         Set wbhidden = objExcel.Workbooks.Open("C:\Users\Ultramode\Desktop\шмойства\Новая папка\разделение этикеток\Этикетки Овощи 11.11.2014 Вторник.xlsm")
               
           Cells(1, 10).Value = wbhidden.Sheets(1).Cells(1, 1)
                 
           wbhidden.Close ' обязательно при выходе из кода
         Set objExcel = Nothing  ' обязательно при выходе из кода
End Sub
[/vba]

и Нашел рабочий макрос:

[vba]
Код

Sub CombineWorkbooks()   
      Dim FilesToOpen   
      Dim x As Integer   
      On Error GoTo ErrHandler   
      Application.ScreenUpdating = False   
      FilesToOpen = Application.GetOpenFilename _   
                    (FileFilter:="Microsoft Excel Files (*.xls), *.xls", _   
                     MultiSelect:=True, Title:="Files to Merge")   
      If TypeName(FilesToOpen) = "Boolean" Then   
          MsgBox "Не выбрано ни одного файла!"   
          GoTo ExitHandler   
      End If   
      x = 1   
      While x <= UBound(FilesToOpen)   
          Workbooks.Open Filename:=FilesToOpen(x)   
          Sheets().Move After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)   
          x = x + 1   
      Wend   
ExitHandler:   
      Application.ScreenUpdating = True   
      Exit Sub   
ErrHandler:   
      MsgBox Err.Description   
      Resume ExitHandler   
End Sub
[/vba]

Но как быть теперь с ссылками которые разрушаются ?

Автор - koyaanisqatsi
Дата добавления - 09.11.2014 в 16:47
RAN Дата: Воскресенье, 09.11.2014, 19:03 | Сообщение № 2
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Скопировать книгу, удалить лишнее. Куда как проще. И со ссылками головной боли не будет.
А первый макрос, он как бы для Word'a предназначен.


Быть или не быть, вот в чем загвоздка!

Сообщение отредактировал RAN - Воскресенье, 09.11.2014, 19:04
 
Ответить
СообщениеСкопировать книгу, удалить лишнее. Куда как проще. И со ссылками головной боли не будет.
А первый макрос, он как бы для Word'a предназначен.

Автор - RAN
Дата добавления - 09.11.2014 в 19:03
koyaanisqatsi Дата: Воскресенье, 09.11.2014, 19:07 | Сообщение № 3
Группа: Проверенные
Ранг: Ветеран
Сообщений: 713
Репутация: 15 ±
Замечаний: 0% ±

Excel 2010
RAN, Так много страниц. А если их количество будет увеличиваться ? К тому же что бы работали эти листы придется в обоих книгах хранить листы с одинаковыми именами а как копировать листы с одинаковыми именами ? а потом тогда что удалять ?
Пытался изучить как это можно решить через двуссыл но там не протягивается формула (

А через формат можно это решать ? Например в файле и которого надо брать все было бы в текстовом формате а при копировании листов задавать общий формат ?

Оригинально, что эксель позволяет себе менять формулы при удалении листа на который они ссылались, даже если ты страницу защитил паролем от изменений


Сообщение отредактировал koyaanisqatsi - Воскресенье, 09.11.2014, 19:40
 
Ответить
СообщениеRAN, Так много страниц. А если их количество будет увеличиваться ? К тому же что бы работали эти листы придется в обоих книгах хранить листы с одинаковыми именами а как копировать листы с одинаковыми именами ? а потом тогда что удалять ?
Пытался изучить как это можно решить через двуссыл но там не протягивается формула (

А через формат можно это решать ? Например в файле и которого надо брать все было бы в текстовом формате а при копировании листов задавать общий формат ?

Оригинально, что эксель позволяет себе менять формулы при удалении листа на который они ссылались, даже если ты страницу защитил паролем от изменений

Автор - koyaanisqatsi
Дата добавления - 09.11.2014 в 19:07
RAN Дата: Воскресенье, 09.11.2014, 22:47 | Сообщение № 4
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
[vba]
Код
Sub CombineWorkbooks()
       Dim FilesToOpen
       Dim x As Integer
       Dim sh As Worksheet
       On Error GoTo ErrHandler
       Application.ScreenUpdating = False
       FilesToOpen = Application.GetOpenFilename _
                     (FileFilter:="Microsoft Excel Files (*.xls), *.xls", _
                      MultiSelect:=True, Title:="Files to Merge")
       If TypeName(FilesToOpen) = "Boolean" Then
           MsgBox "Не выбрано ни одного файла!"
           GoTo ExitHandler
       End If
       x = 1
       While x <= UBound(FilesToOpen)
           With Workbooks.Open(Filename:=FilesToOpen(x))
               For Each sh In .Worksheets
                   sh.UsedRange.Replace what:="=", Replacement:="@@", LookAt:=xlPart
                   sh.Move After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)
                   With ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)
                       .UsedRange.Replace what:="@@", Replacement:="=", LookAt:=xlPart
                   End With
               Next
               .Saved = True
               .Close
           End With
           x = x + 1
       Wend
ExitHandler:
       Application.ScreenUpdating = True
       Exit Sub
ErrHandler:
       MsgBox Err.Description
       Resume ExitHandler
End Sub
[/vba]

Не проверял

[p.s.]Смущает Move. Может Copy?[/p.s.]


Быть или не быть, вот в чем загвоздка!

Сообщение отредактировал RAN - Воскресенье, 09.11.2014, 22:59
 
Ответить
Сообщение[vba]
Код
Sub CombineWorkbooks()
       Dim FilesToOpen
       Dim x As Integer
       Dim sh As Worksheet
       On Error GoTo ErrHandler
       Application.ScreenUpdating = False
       FilesToOpen = Application.GetOpenFilename _
                     (FileFilter:="Microsoft Excel Files (*.xls), *.xls", _
                      MultiSelect:=True, Title:="Files to Merge")
       If TypeName(FilesToOpen) = "Boolean" Then
           MsgBox "Не выбрано ни одного файла!"
           GoTo ExitHandler
       End If
       x = 1
       While x <= UBound(FilesToOpen)
           With Workbooks.Open(Filename:=FilesToOpen(x))
               For Each sh In .Worksheets
                   sh.UsedRange.Replace what:="=", Replacement:="@@", LookAt:=xlPart
                   sh.Move After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)
                   With ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)
                       .UsedRange.Replace what:="@@", Replacement:="=", LookAt:=xlPart
                   End With
               Next
               .Saved = True
               .Close
           End With
           x = x + 1
       Wend
ExitHandler:
       Application.ScreenUpdating = True
       Exit Sub
ErrHandler:
       MsgBox Err.Description
       Resume ExitHandler
End Sub
[/vba]

Не проверял

[p.s.]Смущает Move. Может Copy?[/p.s.]

Автор - RAN
Дата добавления - 09.11.2014 в 22:47
koyaanisqatsi Дата: Воскресенье, 09.11.2014, 23:07 | Сообщение № 5
Группа: Проверенные
Ранг: Ветеран
Сообщений: 713
Репутация: 15 ±
Замечаний: 0% ±

Excel 2010
RAN, надо менять только один раз. файл откуда будем копировать там всегда будет вместо = какая нибудь абра кадабра.
Что-то не выходит (


Сообщение отредактировал koyaanisqatsi - Воскресенье, 09.11.2014, 23:16
 
Ответить
СообщениеRAN, надо менять только один раз. файл откуда будем копировать там всегда будет вместо = какая нибудь абра кадабра.
Что-то не выходит (

Автор - koyaanisqatsi
Дата добавления - 09.11.2014 в 23:07
RAN Дата: Воскресенье, 09.11.2014, 23:17 | Сообщение № 6
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Я мешаю? :o
Или показать, какую строчку закомментировать?


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеЯ мешаю? :o
Или показать, какую строчку закомментировать?

Автор - RAN
Дата добавления - 09.11.2014 в 23:17
koyaanisqatsi Дата: Воскресенье, 09.11.2014, 23:28 | Сообщение № 7
Группа: Проверенные
Ранг: Ветеран
Сообщений: 713
Репутация: 15 ±
Замечаний: 0% ±

Excel 2010
RAN, Покажите пожалуйста. А то когда я начинаю сам что то правит вылезают только ошибки. А при записи макроса средствами экселя почему-то файл начинает лагать жестко. Могу пример показать как лагает.
К сообщению приложен файл: zakazik3.xlsm (28.7 Kb)
 
Ответить
СообщениеRAN, Покажите пожалуйста. А то когда я начинаю сам что то правит вылезают только ошибки. А при записи макроса средствами экселя почему-то файл начинает лагать жестко. Могу пример показать как лагает.

Автор - koyaanisqatsi
Дата добавления - 09.11.2014 в 23:28
RAN Дата: Воскресенье, 09.11.2014, 23:31 | Сообщение № 8
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
файл куда есть.
еще бы откуда


Быть или не быть, вот в чем загвоздка!
 
Ответить
Сообщениефайл куда есть.
еще бы откуда

Автор - RAN
Дата добавления - 09.11.2014 в 23:31
koyaanisqatsi Дата: Воскресенье, 09.11.2014, 23:33 | Сообщение № 9
Группа: Проверенные
Ранг: Ветеран
Сообщений: 713
Репутация: 15 ±
Замечаний: 0% ±

Excel 2010
RAN, в заказик из этикеток. эти пока что еще не лагают
К сообщению приложен файл: zakazik.xlsm (14.8 Kb) · etiketki2.xlsx (13.9 Kb)
 
Ответить
СообщениеRAN, в заказик из этикеток. эти пока что еще не лагают

Автор - koyaanisqatsi
Дата добавления - 09.11.2014 в 23:33
RAN Дата: Воскресенье, 09.11.2014, 23:37 | Сообщение № 10
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
И что должно получиться?
Код
ёмаёзаказ!D3


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеИ что должно получиться?
Код
ёмаёзаказ!D3

Автор - RAN
Дата добавления - 09.11.2014 в 23:37
koyaanisqatsi Дата: Воскресенье, 09.11.2014, 23:38 | Сообщение № 11
Группа: Проверенные
Ранг: Ветеран
Сообщений: 713
Репутация: 15 ±
Замечаний: 0% ±

Excel 2010
хм. это не файл оказывается лагал. А сам эксель начинает тупить. интересно из-за чего бы это ?
 
Ответить
Сообщениехм. это не файл оказывается лагал. А сам эксель начинает тупить. интересно из-за чего бы это ?

Автор - koyaanisqatsi
Дата добавления - 09.11.2014 в 23:38
koyaanisqatsi Дата: Воскресенье, 09.11.2014, 23:39 | Сообщение № 12
Группа: Проверенные
Ранг: Ветеран
Сообщений: 713
Репутация: 15 ±
Замечаний: 0% ±

Excel 2010
RAN,

было
Код
ёмаёзаказ!D3


стало
Код
=заказ!D3


Сообщение отредактировал koyaanisqatsi - Воскресенье, 09.11.2014, 23:39
 
Ответить
СообщениеRAN,

было
Код
ёмаёзаказ!D3


стало
Код
=заказ!D3

Автор - koyaanisqatsi
Дата добавления - 09.11.2014 в 23:39
RAN Дата: Воскресенье, 09.11.2014, 23:45 | Сообщение № 13
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
:'(
К сообщению приложен файл: 4824030.xlsm (41.8 Kb)


Быть или не быть, вот в чем загвоздка!
 
Ответить
Сообщение:'(

Автор - RAN
Дата добавления - 09.11.2014 в 23:45
koyaanisqatsi Дата: Воскресенье, 09.11.2014, 23:54 | Сообщение № 14
Группа: Проверенные
Ранг: Ветеран
Сообщений: 713
Репутация: 15 ±
Замечаний: 0% ±

Excel 2010
RAN, этот вариант насколько я понимаю работает. Надо будет поиграться потестить ) И да вы правы насчет муве выдает какой-то ерор хотя все равно работает. непонятно почему у меня не пахало. Вроде пробовал такой вариант.
 
Ответить
СообщениеRAN, этот вариант насколько я понимаю работает. Надо будет поиграться потестить ) И да вы правы насчет муве выдает какой-то ерор хотя все равно работает. непонятно почему у меня не пахало. Вроде пробовал такой вариант.

Автор - koyaanisqatsi
Дата добавления - 09.11.2014 в 23:54
RAN Дата: Воскресенье, 09.11.2014, 23:58 | Сообщение № 15
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
какой то Error выдает потому, что из книги нельзя переместить все листы.
для обхода нужно использовать
[vba]
Код
On Error Resume Next
[/vba]


Быть или не быть, вот в чем загвоздка!
 
Ответить
Сообщениекакой то Error выдает потому, что из книги нельзя переместить все листы.
для обхода нужно использовать
[vba]
Код
On Error Resume Next
[/vba]

Автор - RAN
Дата добавления - 09.11.2014 в 23:58
koyaanisqatsi Дата: Понедельник, 10.11.2014, 00:01 | Сообщение № 16
Группа: Проверенные
Ранг: Ветеран
Сообщений: 713
Репутация: 15 ±
Замечаний: 0% ±

Excel 2010
RAN, А как указать путь для файла как в примере с кодом для ворда ?
 
Ответить
СообщениеRAN, А как указать путь для файла как в примере с кодом для ворда ?

Автор - koyaanisqatsi
Дата добавления - 10.11.2014 в 00:01
RAN Дата: Понедельник, 10.11.2014, 00:06 | Сообщение № 17
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
[vba]
Код
Sub CombineWorkbooks()
'    Dim FilesToOpen
      Dim x As Integer
      Dim sh As Worksheet
      On Error GoTo ErrHandler
      Application.ScreenUpdating = False
      '    FilesToOpen = Application.GetOpenFilename _
           '                  (FileFilter:="Microsoft Excel Files (*.xls*), *.xls*", _
           '                   MultiSelect:=True, Title:="Files to Merge")
      '    If TypeName(FilesToOpen) = "Boolean" Then
      '        MsgBox "Не выбрано ни одного файла!"
      '        GoTo ExitHandler
      '    End If
      '    x = 1
      '    While x <= UBound(FilesToOpen)
      '        With Workbooks.Open(Filename:=FilesToOpen(x))
      Dim FilesToOpen As String

      FilesToOpen = "полный путь и имя файла"

      With Workbooks.Open(Filename:=FilesToOpen)
          For Each sh In .Worksheets
              '                sh.UsedRange.Replace what:="=", Replacement:="@@", LookAt:=xlPart
              sh.Copy After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)
              With ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)
                  .UsedRange.Replace what:="ёмаё", Replacement:="=", LookAt:=xlPart
              End With
          Next
          .Saved = True
          .Close
      End With
      '        x = x + 1
      'Wend
ExitHandler:
      Application.ScreenUpdating = True
      Exit Sub
ErrHandler:
      MsgBox Err.Description
      Resume ExitHandler
End Sub
[/vba]


Быть или не быть, вот в чем загвоздка!

Сообщение отредактировал RAN - Понедельник, 10.11.2014, 00:07
 
Ответить
Сообщение[vba]
Код
Sub CombineWorkbooks()
'    Dim FilesToOpen
      Dim x As Integer
      Dim sh As Worksheet
      On Error GoTo ErrHandler
      Application.ScreenUpdating = False
      '    FilesToOpen = Application.GetOpenFilename _
           '                  (FileFilter:="Microsoft Excel Files (*.xls*), *.xls*", _
           '                   MultiSelect:=True, Title:="Files to Merge")
      '    If TypeName(FilesToOpen) = "Boolean" Then
      '        MsgBox "Не выбрано ни одного файла!"
      '        GoTo ExitHandler
      '    End If
      '    x = 1
      '    While x <= UBound(FilesToOpen)
      '        With Workbooks.Open(Filename:=FilesToOpen(x))
      Dim FilesToOpen As String

      FilesToOpen = "полный путь и имя файла"

      With Workbooks.Open(Filename:=FilesToOpen)
          For Each sh In .Worksheets
              '                sh.UsedRange.Replace what:="=", Replacement:="@@", LookAt:=xlPart
              sh.Copy After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)
              With ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)
                  .UsedRange.Replace what:="ёмаё", Replacement:="=", LookAt:=xlPart
              End With
          Next
          .Saved = True
          .Close
      End With
      '        x = x + 1
      'Wend
ExitHandler:
      Application.ScreenUpdating = True
      Exit Sub
ErrHandler:
      MsgBox Err.Description
      Resume ExitHandler
End Sub
[/vba]

Автор - RAN
Дата добавления - 10.11.2014 в 00:06
koyaanisqatsi Дата: Понедельник, 10.11.2014, 01:02 | Сообщение № 18
Группа: Проверенные
Ранг: Ветеран
Сообщений: 713
Репутация: 15 ±
Замечаний: 0% ±

Excel 2010
RAN, А если ругается так "application-defined or objectdefined error" перекидывает одну страницу и глохнет с этой ошибкой
Еще и так ругается "Automation error The object invoked has disconnected from its client"
Это не из-за последних изменений а еще пока с предпоследней версией работал.
Ща буду пробовать последний вариант, но скорее всего будет тоже самое.

Получилось с помощью первого макроса скопировать все листы. Хотя он и спрашивал про имена в книге (те что используются в диспетчере имен, а этого не хотелось бы). И получилось Ctrl+H заменить все "ёмаё" на ""
Увидел что все работает. Осталось только научить макрос выполнять это не сложное действие и понять насколько это долго или быстро. 13.5к формул он меняет при этом.


Сообщение отредактировал koyaanisqatsi - Понедельник, 10.11.2014, 01:46
 
Ответить
СообщениеRAN, А если ругается так "application-defined or objectdefined error" перекидывает одну страницу и глохнет с этой ошибкой
Еще и так ругается "Automation error The object invoked has disconnected from its client"
Это не из-за последних изменений а еще пока с предпоследней версией работал.
Ща буду пробовать последний вариант, но скорее всего будет тоже самое.

Получилось с помощью первого макроса скопировать все листы. Хотя он и спрашивал про имена в книге (те что используются в диспетчере имен, а этого не хотелось бы). И получилось Ctrl+H заменить все "ёмаё" на ""
Увидел что все работает. Осталось только научить макрос выполнять это не сложное действие и понять насколько это долго или быстро. 13.5к формул он меняет при этом.

Автор - koyaanisqatsi
Дата добавления - 10.11.2014 в 01:02
Мир MS Excel » Вопросы и решения » Вопросы по VBA » все листы из определенного файла в активный (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

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