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

Вход

Регистрация

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

 

= Мир MS Excel/Перенести данные из одной книги в другую такую же - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Перенести данные из одной книги в другую такую же (Макросы/Sub)
Перенести данные из одной книги в другую такую же
biomirror Дата: Пятница, 17.04.2015, 10:50 | Сообщение № 1
Группа: Проверенные
Ранг: Участник
Сообщений: 95
Репутация: 0 ±
Замечаний: 0% ±

Есть файл СПК (файл-пример разбил на 2 архива)
Необходимо при помощи макросов дынные из столбца С (каждого листа - в примере 3, в реалии 15) книги СПК, перенести на каждый лист в столбец С его копии (по сути, книги СПК-копия).
При этом, чтобы в ячейки вставлялись значения, а не формулы.

Я смотрел возможные способы здесь http://sirexcel.ru/makrosi....druguyu.
Там написано вроде все доступно... но доступно не для меня :(

Там, как я понял 3 варианта:
1) Макрос вставляется в книгу ОТКУДА переносятся данные (в моем случае будет СПК)
2) Макрос вставляется в книгу КУДА будут переносится данные (в моем случае СПК-копия)
3) Я не совсем понял, что там написано. Вот что понял: данные копируются из активной к в другую, с нескольких листов, вставляются только значения.
По идее, мне нужен вот этот сложный страшный третий вариант.

Но у меня просьба. Если не сложно, сделайте пожалуйста 3 варианта, может уже на готовых реальных примерах получится разобраться))
И подскажите, еще каким образом лучше копировать диапазоны данных в редактор vba
К сообщению приложен файл: .part1.rar (99.0 Kb) · .part2.rar (89.3 Kb)


Сообщение отредактировал biomirror - Пятница, 17.04.2015, 15:55
 
Ответить
СообщениеЕсть файл СПК (файл-пример разбил на 2 архива)
Необходимо при помощи макросов дынные из столбца С (каждого листа - в примере 3, в реалии 15) книги СПК, перенести на каждый лист в столбец С его копии (по сути, книги СПК-копия).
При этом, чтобы в ячейки вставлялись значения, а не формулы.

Я смотрел возможные способы здесь http://sirexcel.ru/makrosi....druguyu.
Там написано вроде все доступно... но доступно не для меня :(

Там, как я понял 3 варианта:
1) Макрос вставляется в книгу ОТКУДА переносятся данные (в моем случае будет СПК)
2) Макрос вставляется в книгу КУДА будут переносится данные (в моем случае СПК-копия)
3) Я не совсем понял, что там написано. Вот что понял: данные копируются из активной к в другую, с нескольких листов, вставляются только значения.
По идее, мне нужен вот этот сложный страшный третий вариант.

Но у меня просьба. Если не сложно, сделайте пожалуйста 3 варианта, может уже на готовых реальных примерах получится разобраться))
И подскажите, еще каким образом лучше копировать диапазоны данных в редактор vba

Автор - biomirror
Дата добавления - 17.04.2015 в 10:50
excelhelprus Дата: Пятница, 17.04.2015, 11:43 | Сообщение № 2
Группа: Пользователи
Ранг: Участник
Сообщений: 63
Репутация: 5 ±
Замечаний: 20% ±

2015
Выложите примеры файлов, а то действительно непонятно становится что вы хотите) Файл откуда переносить, файл куда переносить и укажите на какие листы и что переносить
 
Ответить
СообщениеВыложите примеры файлов, а то действительно непонятно становится что вы хотите) Файл откуда переносить, файл куда переносить и укажите на какие листы и что переносить

Автор - excelhelprus
Дата добавления - 17.04.2015 в 11:43
alex77755 Дата: Воскресенье, 19.04.2015, 08:56 | Сообщение № 3
Группа: Проверенные
Ранг: Обитатель
Сообщений: 362
Репутация: 64 ±
Замечаний: 0% ±

Правильно заданный вопрос ...... дальше, думаю, понятно
Врт пример перебора листов и переноса значений колонки С на вновьсоздаваемыее листы новой книги
[vba]
Код
Sub QWERT()
Dim WB As Workbook, SB As Worksheet
Dim WI As Workbook, SI As Worksheet, LR
Set WI = ActiveWorkbook
Set WB = Workbooks.Add 'в новую книгу
      For Each SI In WI.Worksheets 'перебираем листы в книге-источнике
          LR = SI.Cells(SI.Rows.Count, 3).End(xlUp).Row 'определяем количество занятых строк текущеголиста
          Set SB = WB.Worksheets.Add 'добавляем новый лист в новую книгу
          SB.Range(SB.Cells(1, 3), SB.Cells(LR, 3)) = SI.Range(SI.Cells(1, 3), SI.Cells(LR, 3)).Value 'копируем значения
      Next
End Sub
[/vba]


Могу помочь в VB6, VBA
Alex77755@mail.ru


Сообщение отредактировал alex77755 - Воскресенье, 19.04.2015, 08:57
 
Ответить
СообщениеПравильно заданный вопрос ...... дальше, думаю, понятно
Врт пример перебора листов и переноса значений колонки С на вновьсоздаваемыее листы новой книги
[vba]
Код
Sub QWERT()
Dim WB As Workbook, SB As Worksheet
Dim WI As Workbook, SI As Worksheet, LR
Set WI = ActiveWorkbook
Set WB = Workbooks.Add 'в новую книгу
      For Each SI In WI.Worksheets 'перебираем листы в книге-источнике
          LR = SI.Cells(SI.Rows.Count, 3).End(xlUp).Row 'определяем количество занятых строк текущеголиста
          Set SB = WB.Worksheets.Add 'добавляем новый лист в новую книгу
          SB.Range(SB.Cells(1, 3), SB.Cells(LR, 3)) = SI.Range(SI.Cells(1, 3), SI.Cells(LR, 3)).Value 'копируем значения
      Next
End Sub
[/vba]

Автор - alex77755
Дата добавления - 19.04.2015 в 08:56
biomirror Дата: Среда, 22.04.2015, 11:51 | Сообщение № 4
Группа: Проверенные
Ранг: Участник
Сообщений: 95
Репутация: 0 ±
Замечаний: 0% ±

Эхх... видимо ответа не будет... Неужели настолько непонятно сформулирована задача? :(
Как еще понятней, я не знаю...
 
Ответить
СообщениеЭхх... видимо ответа не будет... Неужели настолько непонятно сформулирована задача? :(
Как еще понятней, я не знаю...

Автор - biomirror
Дата добавления - 22.04.2015 в 11:51
Hugo Дата: Среда, 22.04.2015, 12:42 | Сообщение № 5
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3252
Репутация: 707 ±
Замечаний: 0% ±

2019
Я вот например не понял что именно нужно - перенос или копирование? :)
Вроде всё время говорите про перенос, и вдруг один раз - копирование. Предложили копирование - промолчали...

"каким образом лучше копировать диапазоны данных в редактор vba" - вообще фраза-загадка. Особенно если учесть "(не по одному же диапазону каждый раз вставляют)".


excel@nxt.ru
webmoney: E265281470651 Z422237915069


Сообщение отредактировал Hugo - Среда, 22.04.2015, 13:05
 
Ответить
СообщениеЯ вот например не понял что именно нужно - перенос или копирование? :)
Вроде всё время говорите про перенос, и вдруг один раз - копирование. Предложили копирование - промолчали...

"каким образом лучше копировать диапазоны данных в редактор vba" - вообще фраза-загадка. Особенно если учесть "(не по одному же диапазону каждый раз вставляют)".

Автор - Hugo
Дата добавления - 22.04.2015 в 12:42
Roman777 Дата: Среда, 22.04.2015, 13:34 | Сообщение № 6
Группа: Проверенные
Ранг: Ветеран
Сообщений: 980
Репутация: 127 ±
Замечаний: 0% ±

Excel 2007, Excel 2013
biomirror, Вот, если Вы поместите файл и файл-копию в 1 папку. То можно тот же что у alex77755, только без создания новых листов:
[vba]
Код
Sub QWERT2()
Dim WB As Workbook, SB As Worksheet
Dim WI As Workbook, SI As Worksheet, LR As Long
Dim BookPath As String
Dim sovpal As Integer
Set WI = ActiveWorkbook
BookPath =  WI.Path & "\"
NameCopyBook = "Пример2.xlsx" 'необходимо ввести самому, обязательно с расширением!!!
Set WB = Workbooks.Open(BookPath & NameCopyBook) 'открываем книгу-дубликат
       For Each SI In WI.Worksheets 'перебираем листы в книге-источнике
           LR = SI.Cells(SI.Rows.Count, 3).End(xlUp).Row 'определяем количество занятых строк текущего листа
           For Each SB In WB.Worksheets
           If SB.Name = SI.Name Then
              SB.Range(SB.Cells(1, 3), SB.Cells(LR, 3)) = SI.Range(SI.Cells(1, 3), SI.Cells(LR, 3)).Value 'копируем значения
           Next SB
       Next SI
End Sub
[/vba]


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

Сообщение отредактировал Roman777 - Среда, 22.04.2015, 13:36
 
Ответить
Сообщениеbiomirror, Вот, если Вы поместите файл и файл-копию в 1 папку. То можно тот же что у alex77755, только без создания новых листов:
[vba]
Код
Sub QWERT2()
Dim WB As Workbook, SB As Worksheet
Dim WI As Workbook, SI As Worksheet, LR As Long
Dim BookPath As String
Dim sovpal As Integer
Set WI = ActiveWorkbook
BookPath =  WI.Path & "\"
NameCopyBook = "Пример2.xlsx" 'необходимо ввести самому, обязательно с расширением!!!
Set WB = Workbooks.Open(BookPath & NameCopyBook) 'открываем книгу-дубликат
       For Each SI In WI.Worksheets 'перебираем листы в книге-источнике
           LR = SI.Cells(SI.Rows.Count, 3).End(xlUp).Row 'определяем количество занятых строк текущего листа
           For Each SB In WB.Worksheets
           If SB.Name = SI.Name Then
              SB.Range(SB.Cells(1, 3), SB.Cells(LR, 3)) = SI.Range(SI.Cells(1, 3), SI.Cells(LR, 3)).Value 'копируем значения
           Next SB
       Next SI
End Sub
[/vba]

Автор - Roman777
Дата добавления - 22.04.2015 в 13:34
Wasilich Дата: Среда, 22.04.2015, 19:23 | Сообщение № 7
Группа: Друзья
Ранг: Старожил
Сообщений: 1232
Репутация: 326 ±
Замечаний: 0% ±

2003
(по сути, книги СПК-копия).
При этом, чтобы в ячейки вставлялись значения, а не формулы.

Если я правильно понимаю, то можно так.
[vba]
Код
Sub Копия()
      Dim Sh As Worksheet, iPath$, fa$, fk$
      iPath = ThisWorkbook.Path & "\"
      Application.ScreenUpdating = False: Application.DisplayAlerts = False
      fa = ThisWorkbook.Name 'файл активный (рабочий)
      fk = Mid(fa, 1, Len(fa) - 4) & "-копия" & ".xls" 'файл копия
      'если расширение файла больше 3-х букоф, 4 заменить на 5
          
      ThisWorkbook.Save 'сохраняем активный (рабочий) файл
      ActiveWorkbook.SaveCopyAs iPath & fk  'сохраняем файл как копию
      Workbooks.Open iPath & fk 'открываем файл копию и далее обрабатываем
      For Each Sh In Workbooks(fk).Sheets
        'Workbooks(fk).Sheets(Sh.Name).Buttons.Delete 'Удаляем кнопки
        'Workbooks(fk).Sheets(Sh.Name).DrawingObjects.Delete 'Удаляем все элементы
        Workbooks(fk).Sheets(Sh.Name).UsedRange.Value = Workbooks(fk).Sheets(Sh.Name).UsedRange.Value
      Next Sh
      Windows(fa).Activate 'активируем (рабочий) файл
      Workbooks(fk).Save 'сохраняем файл копию
      Workbooks(fk).Close 'закрываем файл копию
      Application.ScreenUpdating = True: Application.DisplayAlerts = True
End Sub
[/vba]


Сообщение отредактировал Wasilic - Среда, 22.04.2015, 19:50
 
Ответить
Сообщение
(по сути, книги СПК-копия).
При этом, чтобы в ячейки вставлялись значения, а не формулы.

Если я правильно понимаю, то можно так.
[vba]
Код
Sub Копия()
      Dim Sh As Worksheet, iPath$, fa$, fk$
      iPath = ThisWorkbook.Path & "\"
      Application.ScreenUpdating = False: Application.DisplayAlerts = False
      fa = ThisWorkbook.Name 'файл активный (рабочий)
      fk = Mid(fa, 1, Len(fa) - 4) & "-копия" & ".xls" 'файл копия
      'если расширение файла больше 3-х букоф, 4 заменить на 5
          
      ThisWorkbook.Save 'сохраняем активный (рабочий) файл
      ActiveWorkbook.SaveCopyAs iPath & fk  'сохраняем файл как копию
      Workbooks.Open iPath & fk 'открываем файл копию и далее обрабатываем
      For Each Sh In Workbooks(fk).Sheets
        'Workbooks(fk).Sheets(Sh.Name).Buttons.Delete 'Удаляем кнопки
        'Workbooks(fk).Sheets(Sh.Name).DrawingObjects.Delete 'Удаляем все элементы
        Workbooks(fk).Sheets(Sh.Name).UsedRange.Value = Workbooks(fk).Sheets(Sh.Name).UsedRange.Value
      Next Sh
      Windows(fa).Activate 'активируем (рабочий) файл
      Workbooks(fk).Save 'сохраняем файл копию
      Workbooks(fk).Close 'закрываем файл копию
      Application.ScreenUpdating = True: Application.DisplayAlerts = True
End Sub
[/vba]

Автор - Wasilich
Дата добавления - 22.04.2015 в 19:23
biomirror Дата: Четверг, 23.04.2015, 10:54 | Сообщение № 8
Группа: Проверенные
Ранг: Участник
Сообщений: 95
Репутация: 0 ±
Замечаний: 0% ±

Я вот например не понял что именно нужно - перенос или копирование?
Вроде всё время говорите про перенос, и вдруг один раз - копирование. Предложили копирование - промолчали...

Каюсь, каюсь... честно, виноват) Для под "переносом" я имел в виду копирование...(в уме было, чтобы "значения оказались в нужной книги"). %)
Копирование, копирование, конечно копирование :)

Предложили копирование - промолчали...

Как смог, так сформулировал ответ, на сообщение Алекса77755
alex77755, да-да, мне почти это надо. Только, чтобы не листы создавались, а значения копировались в уже готовые.

Wasilic, меня почти правильно понял. Только в его скрипте книга сама дублируется. А мне надо, чтобы значения переносились в уже созданную книгу. Хотя в некоторых случаях его вариант удобней)

"каким образом лучше копировать диапазоны данных в редактор vba" - вообще фраза-загадка. Особенно если учесть "(не по одному же диапазону каждый раз вставляют)".

На http://sirexcel.ru/makrosi....druguyu В первом примере, есть фраза:
[vba]
Код
'Выделить диапазон который необходимо скопировать
Range("A1:F52").Select
[/vba]
Я когда пытался применить этот пример к своему случаю, я копировал диапазоны из столбца С следующим образом:
в любой ячейке вводил формулу суммы и выбирал диапазоны, которые мне надо скопировать в другую книгу, получалось так:=СУММ(C6:C9;C30:C37;C41:C63) и отсюда уже эти диапазоны я копировал в свой "макрос")) Вот и подумал, что, наверно, можно как-то по проще диапазоны копировать))


Сообщение отредактировал biomirror - Четверг, 23.04.2015, 10:55
 
Ответить
Сообщение
Я вот например не понял что именно нужно - перенос или копирование?
Вроде всё время говорите про перенос, и вдруг один раз - копирование. Предложили копирование - промолчали...

Каюсь, каюсь... честно, виноват) Для под "переносом" я имел в виду копирование...(в уме было, чтобы "значения оказались в нужной книги"). %)
Копирование, копирование, конечно копирование :)

Предложили копирование - промолчали...

Как смог, так сформулировал ответ, на сообщение Алекса77755
alex77755, да-да, мне почти это надо. Только, чтобы не листы создавались, а значения копировались в уже готовые.

Wasilic, меня почти правильно понял. Только в его скрипте книга сама дублируется. А мне надо, чтобы значения переносились в уже созданную книгу. Хотя в некоторых случаях его вариант удобней)

"каким образом лучше копировать диапазоны данных в редактор vba" - вообще фраза-загадка. Особенно если учесть "(не по одному же диапазону каждый раз вставляют)".

На http://sirexcel.ru/makrosi....druguyu В первом примере, есть фраза:
[vba]
Код
'Выделить диапазон который необходимо скопировать
Range("A1:F52").Select
[/vba]
Я когда пытался применить этот пример к своему случаю, я копировал диапазоны из столбца С следующим образом:
в любой ячейке вводил формулу суммы и выбирал диапазоны, которые мне надо скопировать в другую книгу, получалось так:=СУММ(C6:C9;C30:C37;C41:C63) и отсюда уже эти диапазоны я копировал в свой "макрос")) Вот и подумал, что, наверно, можно как-то по проще диапазоны копировать))

Автор - biomirror
Дата добавления - 23.04.2015 в 10:54
biomirror Дата: Четверг, 23.04.2015, 11:17 | Сообщение № 9
Группа: Проверенные
Ранг: Участник
Сообщений: 95
Репутация: 0 ±
Замечаний: 0% ±

Roman777, Вставил в макрос название своего файла. запустил - вылетает ошибка.


Wasilic, вот, вот, именно так мне и надо.
Только почему-то при запуске макроса вылетает ошибка, но при нажатии на ок, макрос выполняется и все становится как надо.


А при открытии файла копии, появляется сообщение, что данный файл имеет другое расширение.

Можно как-то сделать, чтобы это сообщение не появлялось, не меняя формата файла-копии.

Ну вот, в принципе процесс пошел. Теперь даже формулировать становиться легче.
Мне нужно тоже самое, что сделал Wasilic, только чтобы
1. значения копировались в уже готовый файл-копию.
2. И та же задача только с другой стороны, - чтобы файл-копия сам забирал данные значения из уже готового файла.


Сообщение отредактировал biomirror - Четверг, 23.04.2015, 11:25
 
Ответить
СообщениеRoman777, Вставил в макрос название своего файла. запустил - вылетает ошибка.


Wasilic, вот, вот, именно так мне и надо.
Только почему-то при запуске макроса вылетает ошибка, но при нажатии на ок, макрос выполняется и все становится как надо.


А при открытии файла копии, появляется сообщение, что данный файл имеет другое расширение.

Можно как-то сделать, чтобы это сообщение не появлялось, не меняя формата файла-копии.

Ну вот, в принципе процесс пошел. Теперь даже формулировать становиться легче.
Мне нужно тоже самое, что сделал Wasilic, только чтобы
1. значения копировались в уже готовый файл-копию.
2. И та же задача только с другой стороны, - чтобы файл-копия сам забирал данные значения из уже готового файла.

Автор - biomirror
Дата добавления - 23.04.2015 в 11:17
Roman777 Дата: Четверг, 23.04.2015, 11:58 | Сообщение № 10
Группа: Проверенные
Ранг: Ветеран
Сообщений: 980
Репутация: 127 ±
Замечаний: 0% ±

Excel 2007, Excel 2013
biomirror, Извиняюсь, забыл закончить условие "End if" пропустил
Попробуйте так:
[vba]
Код
Sub QWERT2()
Dim WB As Workbook, SB As Worksheet
Dim WI As Workbook, SI As Worksheet, LR As Long
Dim BookPath As String
Dim sovpal As Integer
Set WI = ActiveWorkbook
BookPath =  WI.Path & "\"
NameCopyBook = "Пример2.xlsx" 'необходимо ввести самому, обязательно с расширением!!!
Set WB = Workbooks.Open(BookPath & NameCopyBook) 'открываем книгу-дубликат
     For Each SI In WI.Worksheets 'перебираем листы в книге-источнике
         LR = SI.Cells(SI.Rows.Count, 3).End(xlUp).Row 'определяем количество занятых строк текущего листа
         For Each SB In WB.Worksheets
         If SB.Name = SI.Name Then
             SB.Range(SB.Cells(1, 3), SB.Cells(LR, 3)) = SI.Range(SI.Cells(1, 3), SI.Cells(LR, 3)).Value 'копируем значения
         end If
         Next SB
     Next SI
End Sub
[/vba]


Много чего не знаю!!!!
 
Ответить
Сообщениеbiomirror, Извиняюсь, забыл закончить условие "End if" пропустил
Попробуйте так:
[vba]
Код
Sub QWERT2()
Dim WB As Workbook, SB As Worksheet
Dim WI As Workbook, SI As Worksheet, LR As Long
Dim BookPath As String
Dim sovpal As Integer
Set WI = ActiveWorkbook
BookPath =  WI.Path & "\"
NameCopyBook = "Пример2.xlsx" 'необходимо ввести самому, обязательно с расширением!!!
Set WB = Workbooks.Open(BookPath & NameCopyBook) 'открываем книгу-дубликат
     For Each SI In WI.Worksheets 'перебираем листы в книге-источнике
         LR = SI.Cells(SI.Rows.Count, 3).End(xlUp).Row 'определяем количество занятых строк текущего листа
         For Each SB In WB.Worksheets
         If SB.Name = SI.Name Then
             SB.Range(SB.Cells(1, 3), SB.Cells(LR, 3)) = SI.Range(SI.Cells(1, 3), SI.Cells(LR, 3)).Value 'копируем значения
         end If
         Next SB
     Next SI
End Sub
[/vba]

Автор - Roman777
Дата добавления - 23.04.2015 в 11:58
Roman777 Дата: Четверг, 23.04.2015, 12:03 | Сообщение № 11
Группа: Проверенные
Ранг: Ветеран
Сообщений: 980
Репутация: 127 ±
Замечаний: 0% ±

Excel 2007, Excel 2013
А задача наоборот - тоже самое, только открывать надо будет файл - исходник и копировать из него.
[vba]
Код
Sub QWERT2()
Dim WB As Workbook, SB As Worksheet
Dim WI As Workbook, SI As Worksheet, LR As Long
Dim BookPath As String
Dim sovpal As Integer
Set WB = ActiveWorkbook
BookPath =  WI.Path & "\"
NameCopyBook = "Файл-исходник.xls" 'необходимо ввести самому, обязательно с расширением!!!
Set WI = Workbooks.Open(BookPath & NameCopyBook) 'открываем книгу-дубликат
     For Each SI In WI.Worksheets 'перебираем листы в книге-источнике
         LR = SI.Cells(SI.Rows.Count, 3).End(xlUp).Row 'определяем количество занятых строк текущего листа
         For Each SB In WB.Worksheets
         If SB.Name = SI.Name Then
             SB.Range(SB.Cells(1, 3), SB.Cells(LR, 3)) = SI.Range(SI.Cells(1, 3), SI.Cells(LR, 3)).Value 'копируем значения
         end If
         Next SB
     Next SI
End Sub
[/vba]
Поидее так должно сработать)


Много чего не знаю!!!!
 
Ответить
СообщениеА задача наоборот - тоже самое, только открывать надо будет файл - исходник и копировать из него.
[vba]
Код
Sub QWERT2()
Dim WB As Workbook, SB As Worksheet
Dim WI As Workbook, SI As Worksheet, LR As Long
Dim BookPath As String
Dim sovpal As Integer
Set WB = ActiveWorkbook
BookPath =  WI.Path & "\"
NameCopyBook = "Файл-исходник.xls" 'необходимо ввести самому, обязательно с расширением!!!
Set WI = Workbooks.Open(BookPath & NameCopyBook) 'открываем книгу-дубликат
     For Each SI In WI.Worksheets 'перебираем листы в книге-источнике
         LR = SI.Cells(SI.Rows.Count, 3).End(xlUp).Row 'определяем количество занятых строк текущего листа
         For Each SB In WB.Worksheets
         If SB.Name = SI.Name Then
             SB.Range(SB.Cells(1, 3), SB.Cells(LR, 3)) = SI.Range(SI.Cells(1, 3), SI.Cells(LR, 3)).Value 'копируем значения
         end If
         Next SB
     Next SI
End Sub
[/vba]
Поидее так должно сработать)

Автор - Roman777
Дата добавления - 23.04.2015 в 12:03
biomirror Дата: Пятница, 24.04.2015, 06:31 | Сообщение № 12
Группа: Проверенные
Ранг: Участник
Сообщений: 95
Репутация: 0 ±
Замечаний: 0% ±

Roman777, спасибо, "прямая" задача, работает как надо на примере. В моей реальной задаче листов 15. Как сделать, чтобы данные переносились во все 15 листов?

А обратная, выдает ошибку.

Но мне в принципе, пока решения "прямой" задачи, думаю, хватит))


Сообщение отредактировал biomirror - Пятница, 24.04.2015, 06:49
 
Ответить
СообщениеRoman777, спасибо, "прямая" задача, работает как надо на примере. В моей реальной задаче листов 15. Как сделать, чтобы данные переносились во все 15 листов?

А обратная, выдает ошибку.

Но мне в принципе, пока решения "прямой" задачи, думаю, хватит))

Автор - biomirror
Дата добавления - 24.04.2015 в 06:31
KuklP Дата: Пятница, 24.04.2015, 06:50 | Сообщение № 13
Группа: Проверенные
Ранг: Старожил
Сообщений: 2369
Репутация: 486 ±
Замечаний: 0% ±

2003-2010
Тут ошибка:
Set WB = ActiveWorkbook
BookPath = WI.Path & "\"
Что такое WI? Мы ведь присваивали книгу объектной переменной WB.
Дальше не смотрел.


Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728
 
Ответить
СообщениеТут ошибка:
Set WB = ActiveWorkbook
BookPath = WI.Path & "\"
Что такое WI? Мы ведь присваивали книгу объектной переменной WB.
Дальше не смотрел.

Автор - KuklP
Дата добавления - 24.04.2015 в 06:50
Roman777 Дата: Пятница, 24.04.2015, 09:47 | Сообщение № 14
Группа: Проверенные
Ранг: Ветеран
Сообщений: 980
Репутация: 127 ±
Замечаний: 0% ±

Excel 2007, Excel 2013
biomirror, KuklP, Действительно, не углядел. Ошибка, вместо WI.path должно быть WB.path
[vba]
Код
Sub QWERT2()
Dim WB As Workbook, SB As Worksheet
Dim WI As Workbook, SI As Worksheet, LR As Long
Dim BookPath As String
Dim sovpal As Integer
Set WB = ActiveWorkbook
BookPath =  WB.Path & "\"
NameCopyBook = "Файл-исходник.xls" 'необходимо ввести самому, обязательно с расширением!!!
Set WI = Workbooks.Open(BookPath & NameCopyBook) 'открываем книгу-дубликат
     For Each SI In WI.Worksheets 'перебираем листы в книге-источнике
         LR = SI.Cells(SI.Rows.Count, 3).End(xlUp).Row 'определяем количество занятых строк текущего листа
         For Each SB In WB.Worksheets
         If SB.Name = SI.Name Then
             SB.Range(SB.Cells(1, 3), SB.Cells(LR, 3)) = SI.Range(SI.Cells(1, 3), SI.Cells(LR, 3)).Value 'копируем значения
         end If
         Next SB
     Next SI
End Sub
[/vba]
biomirror, Разве не во все листы данные переносятся? Просто по-сути, для норм работы кода, книга-исходник и книга-копия, лучше всего были бы идентичными...


Много чего не знаю!!!!
 
Ответить
Сообщениеbiomirror, KuklP, Действительно, не углядел. Ошибка, вместо WI.path должно быть WB.path
[vba]
Код
Sub QWERT2()
Dim WB As Workbook, SB As Worksheet
Dim WI As Workbook, SI As Worksheet, LR As Long
Dim BookPath As String
Dim sovpal As Integer
Set WB = ActiveWorkbook
BookPath =  WB.Path & "\"
NameCopyBook = "Файл-исходник.xls" 'необходимо ввести самому, обязательно с расширением!!!
Set WI = Workbooks.Open(BookPath & NameCopyBook) 'открываем книгу-дубликат
     For Each SI In WI.Worksheets 'перебираем листы в книге-источнике
         LR = SI.Cells(SI.Rows.Count, 3).End(xlUp).Row 'определяем количество занятых строк текущего листа
         For Each SB In WB.Worksheets
         If SB.Name = SI.Name Then
             SB.Range(SB.Cells(1, 3), SB.Cells(LR, 3)) = SI.Range(SI.Cells(1, 3), SI.Cells(LR, 3)).Value 'копируем значения
         end If
         Next SB
     Next SI
End Sub
[/vba]
biomirror, Разве не во все листы данные переносятся? Просто по-сути, для норм работы кода, книга-исходник и книга-копия, лучше всего были бы идентичными...

Автор - Roman777
Дата добавления - 24.04.2015 в 09:47
biomirror Дата: Пятница, 24.04.2015, 11:42 | Сообщение № 15
Группа: Проверенные
Ранг: Участник
Сообщений: 95
Репутация: 0 ±
Замечаний: 0% ±

Модераторы, войдите, пожалуйста в положение, разрешите ссылку дать ссылку на реальный файл(файлы-примеры никуда не денутся). Я по другому не могу объяснить, что мне надо...
Roman777, Вот файл http://1drv.ms/1ONs1RZ, с которым я работаю. Вот его копия http://1drv.ms/1ONsiV1
Мне нужно, чтобы данные с видимых 15 пронумерованных листов файла, скопировались бы в 15 листов файла-копии. При этом лист ИК3, остался бы незатронутым макросом.

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


Сообщение отредактировал biomirror - Пятница, 24.04.2015, 11:47
 
Ответить
СообщениеМодераторы, войдите, пожалуйста в положение, разрешите ссылку дать ссылку на реальный файл(файлы-примеры никуда не денутся). Я по другому не могу объяснить, что мне надо...
Roman777, Вот файл http://1drv.ms/1ONs1RZ, с которым я работаю. Вот его копия http://1drv.ms/1ONsiV1
Мне нужно, чтобы данные с видимых 15 пронумерованных листов файла, скопировались бы в 15 листов файла-копии. При этом лист ИК3, остался бы незатронутым макросом.

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

Автор - biomirror
Дата добавления - 24.04.2015 в 11:42
Roman777 Дата: Пятница, 24.04.2015, 12:23 | Сообщение № 16
Группа: Проверенные
Ранг: Ветеран
Сообщений: 980
Репутация: 127 ±
Замечаний: 0% ±

Excel 2007, Excel 2013
biomirror, Я пока не имею возможности работать в ВБА. Поэтому пока отвечу на что могу. Чтобы не трогал лист "ИК3" надо поставить просто условие, что имя листа не должно = "ИК3"

И макрос ориентируется именно на названия листов. сравнивает их и если они совпадает - записывает данные.
А про задачу наоборот. То вродебы данные так и копируются, но вот неоткрывая исходника как сделать, я не знаю, честно говоря, если это вообще возможно. Могу просто закрыть после копирования файл-исходник:


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

Сообщение отредактировал Roman777 - Пятница, 24.04.2015, 12:24
 
Ответить
Сообщениеbiomirror, Я пока не имею возможности работать в ВБА. Поэтому пока отвечу на что могу. Чтобы не трогал лист "ИК3" надо поставить просто условие, что имя листа не должно = "ИК3"

И макрос ориентируется именно на названия листов. сравнивает их и если они совпадает - записывает данные.
А про задачу наоборот. То вродебы данные так и копируются, но вот неоткрывая исходника как сделать, я не знаю, честно говоря, если это вообще возможно. Могу просто закрыть после копирования файл-исходник:

Автор - Roman777
Дата добавления - 24.04.2015 в 12:23
biomirror Дата: Пятница, 24.04.2015, 14:07 | Сообщение № 17
Группа: Проверенные
Ранг: Участник
Сообщений: 95
Репутация: 0 ±
Замечаний: 0% ±

Roman777, в прямой задаче данные копируются только на первые два листа, 1 и 2) Дальше не копируются.

В обратной задаче делал так:
Открывал файл копию, вставлял в него код

Изменял в коде "файл-исходник" на имя файла исходника, открывал файл-исходник.
В файле-копии вносил изменения, закрывал файл. Затем снова открывал, запускал выполнение кода... но ничего не копировалось....(


Сообщение отредактировал biomirror - Пятница, 24.04.2015, 14:29
 
Ответить
СообщениеRoman777, в прямой задаче данные копируются только на первые два листа, 1 и 2) Дальше не копируются.

В обратной задаче делал так:
Открывал файл копию, вставлял в него код

Изменял в коде "файл-исходник" на имя файла исходника, открывал файл-исходник.
В файле-копии вносил изменения, закрывал файл. Затем снова открывал, запускал выполнение кода... но ничего не копировалось....(

Автор - biomirror
Дата добавления - 24.04.2015 в 14:07
biomirror Дата: Пятница, 24.04.2015, 14:39 | Сообщение № 18
Группа: Проверенные
Ранг: Участник
Сообщений: 95
Репутация: 0 ±
Замечаний: 0% ±

Wasilic, сейчас попробовал ваш код на своем реальном файле, с которым работаю. Работает четко)
По поводу ошибки при копировании файла - ее решение, которое на сайте майкрософт https://support.microsoft.com/en-us/kb/948615/ru меня не устроило, - компьютер рабочий, менять в реестре что-либо нежелательно.
Я нашел следующий выход: у вас файл копия сохраняется как .xls, я сохранил как .xlsx и проблема пропала))
Еще раз спасибо)


Сообщение отредактировал biomirror - Пятница, 24.04.2015, 14:42
 
Ответить
СообщениеWasilic, сейчас попробовал ваш код на своем реальном файле, с которым работаю. Работает четко)
По поводу ошибки при копировании файла - ее решение, которое на сайте майкрософт https://support.microsoft.com/en-us/kb/948615/ru меня не устроило, - компьютер рабочий, менять в реестре что-либо нежелательно.
Я нашел следующий выход: у вас файл копия сохраняется как .xls, я сохранил как .xlsx и проблема пропала))
Еще раз спасибо)

Автор - biomirror
Дата добавления - 24.04.2015 в 14:39
Wasilich Дата: Суббота, 25.04.2015, 08:21 | Сообщение № 19
Группа: Друзья
Ранг: Старожил
Сообщений: 1232
Репутация: 326 ±
Замечаний: 0% ±

2003
у вас файл копия сохраняется как .xls, я сохранил как .xlsx и проблема пропала
:) Ну дык, я же в комментариях кода и написал:
[vba]
Код
fk = Mid(fa, 1, Len(fa) - 4) & "-копия" & ".xls" 'файл копия
      'если расширение файла больше 3-х букоф, 4 заменить на 5
[/vba]


Сообщение отредактировал Wasilic - Суббота, 25.04.2015, 08:22
 
Ответить
Сообщение
у вас файл копия сохраняется как .xls, я сохранил как .xlsx и проблема пропала
:) Ну дык, я же в комментариях кода и написал:
[vba]
Код
fk = Mid(fa, 1, Len(fa) - 4) & "-копия" & ".xls" 'файл копия
      'если расширение файла больше 3-х букоф, 4 заменить на 5
[/vba]

Автор - Wasilich
Дата добавления - 25.04.2015 в 08:21
biomirror Дата: Понедельник, 27.04.2015, 06:14 | Сообщение № 20
Группа: Проверенные
Ранг: Участник
Сообщений: 95
Репутация: 0 ±
Замечаний: 0% ±

Ну дык, я же в комментариях кода и написал:
fk = Mid(fa, 1, Len(fa) - 4) & "-копия" & ".xls" 'файл копия
    'если расширение файла больше 3-х букоф, 4 заменить на 5

Я и менять на пять пробовал... почему-то все равно вылетает сообщение, что что-то не то, с расширением файла...
Но это все мелочи)) Главное, что задача решена.

alex77755, спасибо, что первым откликнулись) Roman777, спасибо, за то что вникли в то, что мне надо и несколько раз исправляли код, Wasilic, спасибо, что наиболее простым способом решили задачу :D
 
Ответить
Сообщение
Ну дык, я же в комментариях кода и написал:
fk = Mid(fa, 1, Len(fa) - 4) & "-копия" & ".xls" 'файл копия
    'если расширение файла больше 3-х букоф, 4 заменить на 5

Я и менять на пять пробовал... почему-то все равно вылетает сообщение, что что-то не то, с расширением файла...
Но это все мелочи)) Главное, что задача решена.

alex77755, спасибо, что первым откликнулись) Roman777, спасибо, за то что вникли в то, что мне надо и несколько раз исправляли код, Wasilic, спасибо, что наиболее простым способом решили задачу :D

Автор - biomirror
Дата добавления - 27.04.2015 в 06:14
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Перенести данные из одной книги в другую такую же (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

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