есть файл excel, там куча строк и листов. нужно сделать так, чтобы выбранная мною строка копировалась в отдельный файл (например, при нажатии кнопки "скопировать в файл" или еще как-то). следующая выбранная строка - в тот же файл следующей за скопированными ранее и т.д. ситуация такова: несколько человек сидят за своими компами, смотрят свои файлы, выбирают нужные строчки и эти строчки помещают в один файл. таким образом создают один сводный файл. т.к. копировать строки в файл будут делать несколько человек (каждый из своего файла), а файл, в который копируем, скорее всего, должен быть открыт, чтоб в него копировалась инфа. думаю, чтобы избежать ситуаций, что пользователям постоянно будет нужно открывать и закрывать файл после копирования (чтобы дать возможность другим поместить туда инфу), было бы неплохо, чтобы выполнялись действия в таким порядке: - встать на нужную строку; - нажать на кнопку "копировать в файл"; - файл, в который скопируется строка, открылся; - произошло копирование; -файл сохранился; - файл закрылся (в который скопировали). я не специалист в excel, помогите, пожалуйста. а лучше, если маленькие файлы-примеры прислали мне по почте. я бы хоть разобралась на готовом примере. плз... i.irina1969@yandex.ru
есть файл excel, там куча строк и листов. нужно сделать так, чтобы выбранная мною строка копировалась в отдельный файл (например, при нажатии кнопки "скопировать в файл" или еще как-то). следующая выбранная строка - в тот же файл следующей за скопированными ранее и т.д. ситуация такова: несколько человек сидят за своими компами, смотрят свои файлы, выбирают нужные строчки и эти строчки помещают в один файл. таким образом создают один сводный файл. т.к. копировать строки в файл будут делать несколько человек (каждый из своего файла), а файл, в который копируем, скорее всего, должен быть открыт, чтоб в него копировалась инфа. думаю, чтобы избежать ситуаций, что пользователям постоянно будет нужно открывать и закрывать файл после копирования (чтобы дать возможность другим поместить туда инфу), было бы неплохо, чтобы выполнялись действия в таким порядке: - встать на нужную строку; - нажать на кнопку "копировать в файл"; - файл, в который скопируется строка, открылся; - произошло копирование; -файл сохранился; - файл закрылся (в который скопировали). я не специалист в excel, помогите, пожалуйста. а лучше, если маленькие файлы-примеры прислали мне по почте. я бы хоть разобралась на готовом примере. плз... i.irina1969@yandex.ruГость
Вот это, скопируйте в каждую книгу откуда будут копироваться строки(открывать и закрывать отчет не надо), в общий модуль. [vba]
Код
Public Sub www() Dim lr&, wb As Workbook, lb As Workbook Application.DisplayAlerts = False Set wb = GetObject("c:\svod.xls") 'сюда пропишите свой путь к файлу итога Set lb = ThisWorkbook lr = wb.Sheets(1).Cells(Rows.Count, 1).End(xlUp).Row ActiveCell.EntireRow.Copy wb.Sheets(1).Cells(lr + 1, 1) ActiveCell.EntireRow.Copy wb.Sheets(1).Cells(lr + 1, 1).PasteSpecial Paste:=xlPasteFormats Application.CutCopyMode = False:Windows(wb.Name).Visible = True wb.Close (True) Set wb = Nothing: Set lb = Nothing Application.DisplayAlerts = True End Sub
[/vba]
Вот это, скопируйте в каждую книгу откуда будут копироваться строки(открывать и закрывать отчет не надо), в общий модуль. [vba]
Код
Public Sub www() Dim lr&, wb As Workbook, lb As Workbook Application.DisplayAlerts = False Set wb = GetObject("c:\svod.xls") 'сюда пропишите свой путь к файлу итога Set lb = ThisWorkbook lr = wb.Sheets(1).Cells(Rows.Count, 1).End(xlUp).Row ActiveCell.EntireRow.Copy wb.Sheets(1).Cells(lr + 1, 1) ActiveCell.EntireRow.Copy wb.Sheets(1).Cells(lr + 1, 1).PasteSpecial Paste:=xlPasteFormats Application.CutCopyMode = False:Windows(wb.Name).Visible = True wb.Close (True) Set wb = Nothing: Set lb = Nothing Application.DisplayAlerts = True End Sub
Серёга, привет! Это ты красиво и просто сделал. Чувствуется рука мастера. Вот только как сделать чтобы копировались строки вместе с формулами и форматированием? что-то не соображу никак с ходу...
Серёга, привет! Это ты красиво и просто сделал. Чувствуется рука мастера. Вот только как сделать чтобы копировались строки вместе с формулами и форматированием? что-то не соображу никак с ходу... Alex_ST
С уважением, Алексей MS Excel 2003 - the best!!!
Сообщение отредактировал Alex_ST - Вторник, 28.12.2010, 14:59
Леш, а если формула будет ссылаться на другую строку? Что получится в отчете? Далее формат скопируется и так - не скопируется только ширина ячеек. Но, согласись, это достаточно задать один раз для всей таблицы, а не в каждой строчке елозить по ширине. И в вопросе этого не было. Был бы пример, как надо... Кстати там lb.ActiveSheet.Application. лишнее, я просто забыл удалить. На формат добавить: ActiveCell.EntireRow.Copy wb.Sheets(1).Cells(lr + 1, 1).PasteSpecial Paste:=xlPasteFormats Application.CutCopyMode = False Уже поправил:-)
Леш, а если формула будет ссылаться на другую строку? Что получится в отчете? Далее формат скопируется и так - не скопируется только ширина ячеек. Но, согласись, это достаточно задать один раз для всей таблицы, а не в каждой строчке елозить по ширине. И в вопросе этого не было. Был бы пример, как надо... Кстати там lb.ActiveSheet.Application. лишнее, я просто забыл удалить. На формат добавить: ActiveCell.EntireRow.Copy wb.Sheets(1).Cells(lr + 1, 1).PasteSpecial Paste:=xlPasteFormats Application.CutCopyMode = False Уже поправил:-)KuklP
Ну с НДС и мы чего-то стoим! kuklp60@gmail.com WM Z206653985942, R334086032478, U238399322728
Сообщение отредактировал KuklP - Вторник, 28.12.2010, 12:10
Блин... Фигня какая-то лезет: файл-накопитель строк после применения обновленного макроса становится открываемым невидимым. Как ПЕРСОНАЛ или как надстройка... Попробовал откатиться на твою предыдущую версию - то же самое. Вставил в макрос [vba]
Код
Windows(wb.Name).Visible = True
[/vba] перед [vba]
Код
wb.Close (True)
[/vba] всё заработало. И форматы с формулами оказывается переносятся... Хотя так вроде бы и должно было быть. И ни к чему было отдельно повторять копирование формата... Наверное, надо комп перегрузить (ёксель уже перегружал)... Нет времени перегружаться. Завтра попробую. А пока я твой макрос "подпилил" так: [vba]
Код
Sub Copy_ROW_to_FILE() Dim lr&, wb As Workbook, lb As Workbook With Application: .ScreenUpdating = False: .DisplayAlerts = False: .EnableEvents = False: End With Set wb = GetObject("c:\test.xls") 'сюда пропишите свой путь к файлу итога Set lb = ThisWorkbook lr = wb.Sheets(1).Cells(Rows.Count, 1).End(xlUp).Row ActiveCell.EntireRow.Copy wb.Sheets(1).Cells(lr + 1, 1) Windows(wb.Name).Visible = True wb.Close (True) With Application: .EnableEvents = True: .DisplayAlerts = True: .ScreenUpdating = True: End With Set wb = Nothing: Set lb = Nothing End Sub
[/vba]
Блин... Фигня какая-то лезет: файл-накопитель строк после применения обновленного макроса становится открываемым невидимым. Как ПЕРСОНАЛ или как надстройка... Попробовал откатиться на твою предыдущую версию - то же самое. Вставил в макрос [vba]
Код
Windows(wb.Name).Visible = True
[/vba] перед [vba]
Код
wb.Close (True)
[/vba] всё заработало. И форматы с формулами оказывается переносятся... Хотя так вроде бы и должно было быть. И ни к чему было отдельно повторять копирование формата... Наверное, надо комп перегрузить (ёксель уже перегружал)... Нет времени перегружаться. Завтра попробую. А пока я твой макрос "подпилил" так: [vba]
Код
Sub Copy_ROW_to_FILE() Dim lr&, wb As Workbook, lb As Workbook With Application: .ScreenUpdating = False: .DisplayAlerts = False: .EnableEvents = False: End With Set wb = GetObject("c:\test.xls") 'сюда пропишите свой путь к файлу итога Set lb = ThisWorkbook lr = wb.Sheets(1).Cells(Rows.Count, 1).End(xlUp).Row ActiveCell.EntireRow.Copy wb.Sheets(1).Cells(lr + 1, 1) Windows(wb.Name).Visible = True wb.Close (True) With Application: .EnableEvents = True: .DisplayAlerts = True: .ScreenUpdating = True: End With Set wb = Nothing: Set lb = Nothing End Sub
Я пока отвлекался на другую тему, ты уже и сам все понял. Я специально не делаю Windows(wb.Name).Visible = True чтоб не моргала панель задач. Да и тормозит оно.
Я пока отвлекался на другую тему, ты уже и сам все понял. Я специально не делаю Windows(wb.Name).Visible = True чтоб не моргала панель задач. Да и тормозит оно.KuklP
Ну с НДС и мы чего-то стoим! kuklp60@gmail.com WM Z206653985942, R334086032478, U238399322728
Серёга, так-то оно конечно хорошо без моргания панели задач и шустренько... Но почему файл-накопитель тогда после первого же добавления в него строки макросом получается невидимый при открытии в Ёкселе? Как тогда его открыть не прибегая к VBA? Конечно, можно просто в нём на открытие прописать
Code
Windows(ThisWorkbook.Name).Visible = True
Но как-то это мне не очень нравится... Хотя тогда на самом деле на будет моргания, возрастёт скорость и соответственно уменьшится вероятность конфликтов двух пользователей, одновременно пытающихся записать в него строку...
Серёга, так-то оно конечно хорошо без моргания панели задач и шустренько... Но почему файл-накопитель тогда после первого же добавления в него строки макросом получается невидимый при открытии в Ёкселе? Как тогда его открыть не прибегая к VBA? Конечно, можно просто в нём на открытие прописать
Code
Windows(ThisWorkbook.Name).Visible = True
Но как-то это мне не очень нравится... Хотя тогда на самом деле на будет моргания, возрастёт скорость и соответственно уменьшится вероятность конфликтов двух пользователей, одновременно пытающихся записать в него строку...Alex_ST
Леш, если такое в нем написать он все равно моргать будет:-) Без ВБА. Открываем его, меню-окно-отобразить. Или по парент смотреть. Если парент не = аппликашке тогда увеличивать. Сам не пробовал пока мотаюсь туда-сюда.
Леш, если такое в нем написать он все равно моргать будет:-) Без ВБА. Открываем его, меню-окно-отобразить. Или по парент смотреть. Если парент не = аппликашке тогда увеличивать. Сам не пробовал пока мотаюсь туда-сюда.KuklP
Ну с НДС и мы чего-то стoим! kuklp60@gmail.com WM Z206653985942, R334086032478, U238399322728
файл не виден. Его можно увидеть, только в VBE. И только там же можно выполнить Windows(ThisWorkbook.Name).Visible = True А вот этого я вообще не понял:
Quote (KuklP)
Или по парент смотреть. Если парент не = аппликашке тогда увеличивать.
Ты что хотел сказать-то?
В том то и дело, что в
Quote (KuklP)
меню-окно-отобразить
файл не виден. Его можно увидеть, только в VBE. И только там же можно выполнить Windows(ThisWorkbook.Name).Visible = True А вот этого я вообще не понял:
Quote (KuklP)
Или по парент смотреть. Если парент не = аппликашке тогда увеличивать.
Private Sub Workbook_Open() If Me.Parent.Caption = Application Then Windows(Me.Name).Visible = True End Sub
[/vba] П.С. А у меня в меню-окно-отобразить виден. Если ты конечно накопитель открываешь, а не из исходника хочешь смотреть(исходник его закрывает, с сохранением). Однако, в режиме отладки вполне можно глянуть.
Вот так будет работать(это в накопитель): [vba]
Код
Private Sub Workbook_Open() If Me.Parent.Caption = Application Then Windows(Me.Name).Visible = True End Sub
[/vba] П.С. А у меня в меню-окно-отобразить виден. Если ты конечно накопитель открываешь, а не из исходника хочешь смотреть(исходник его закрывает, с сохранением). Однако, в режиме отладки вполне можно глянуть.KuklP
Ну с НДС и мы чего-то стoим! kuklp60@gmail.com WM Z206653985942, R334086032478, U238399322728
Да, так работает. Файл не прячет и не сильно тормозит. Только не уверенно срабатывает, наверное потому что у объекта Applicanion лучше всё-таки указывать свойство Name Я подправил так: [vba]
Код
Private Sub Workbook_Open() If Me.Parent.Caption = Application.Caption Then Windows(Me.Name).Visible = True End Sub
[/vba]
Спасибо Серёга! Решение простое и элегантное. Нужно будет попробовать при одновременной работе нескольких "живых" пользователей. У нас часто приходится сразу нескольким людям срочно "ручками" выбирать данные из одной огромной таблицы.
Да, так работает. Файл не прячет и не сильно тормозит. Только не уверенно срабатывает, наверное потому что у объекта Applicanion лучше всё-таки указывать свойство Name Я подправил так: [vba]
Код
Private Sub Workbook_Open() If Me.Parent.Caption = Application.Caption Then Windows(Me.Name).Visible = True End Sub
[/vba]
Спасибо Серёга! Решение простое и элегантное. Нужно будет попробовать при одновременной работе нескольких "живых" пользователей. У нас часто приходится сразу нескольким людям срочно "ручками" выбирать данные из одной огромной таблицы.Alex_ST
Серёга, я с твоего позволения чуть причесал и доработал. Теперь копируются строки всех выделенных ячеек. При этом даже не нужно, чтобы они были в непрерывном диапазоне. Например, отфильтрованные строки. Теперь это выглядит так: [vba]
Код
Sub Copy_ROWs_to_EXT_FILE() ' скопировать строки выделенных ячеек во внешний файл-накопитель '--------------------------------------------------------------------------------------- ' Procedure : Copy_ROWs_to_EXT_FILE ' Author : KuklP & Alex_ST (незначительные доработки) ' Topic_HEADER : сделать чтобы выбранная строка копировалась в отдельный файл ' Topic_URL : http://www.excelworld.ru/forum/2-170-2003-16-1293604578 ' DateTime : 29.12.10, 09:36 ' Purpose : скопировать строки выделенных ячеек во внешний файл-накопитель ' Notes : после работы макроса файл-накопитель становит невидимым в обычных окнах Excel (как надстройка или Personal.xls) '--------------------------------------------------------------------------------------- If Not TypeName(Selection) = "Range" Then Exit Sub Dim lr&, wb As Workbook, lb As Workbook With Application: .ScreenUpdating = False: .DisplayAlerts = False: .EnableEvents = False: End With Set wb = GetObject("c:\test.xls") 'путь к файлу-накопителю Set lb = ThisWorkbook lr = wb.Sheets(1).Cells(Rows.Count, 1).End(xlUp).Row Selection.EntireRow.Copy wb.Sheets(1).Cells(lr + 1, 1) wb.Close (True) ' закрыть с сохранением With Application: .EnableEvents = True: .DisplayAlerts = True: .ScreenUpdating = True: End With Set wb = Nothing: Set lb = Nothing 'чтобы после работы макроса файл-накопитель не становился невидимым в окнах Excel, в нём нужно прописать: 'Private Sub Workbook_Open() ' If Me.Parent.Caption = Application.Caption Then Windows(Me.Name).Visible = True 'End Sub End Sub
[/vba]
Надо бы, наверное, топик в "Готовое решение" сделать. Тема интересная и, ИМХО, часто востребованная.
Серёга, я с твоего позволения чуть причесал и доработал. Теперь копируются строки всех выделенных ячеек. При этом даже не нужно, чтобы они были в непрерывном диапазоне. Например, отфильтрованные строки. Теперь это выглядит так: [vba]
Код
Sub Copy_ROWs_to_EXT_FILE() ' скопировать строки выделенных ячеек во внешний файл-накопитель '--------------------------------------------------------------------------------------- ' Procedure : Copy_ROWs_to_EXT_FILE ' Author : KuklP & Alex_ST (незначительные доработки) ' Topic_HEADER : сделать чтобы выбранная строка копировалась в отдельный файл ' Topic_URL : http://www.excelworld.ru/forum/2-170-2003-16-1293604578 ' DateTime : 29.12.10, 09:36 ' Purpose : скопировать строки выделенных ячеек во внешний файл-накопитель ' Notes : после работы макроса файл-накопитель становит невидимым в обычных окнах Excel (как надстройка или Personal.xls) '--------------------------------------------------------------------------------------- If Not TypeName(Selection) = "Range" Then Exit Sub Dim lr&, wb As Workbook, lb As Workbook With Application: .ScreenUpdating = False: .DisplayAlerts = False: .EnableEvents = False: End With Set wb = GetObject("c:\test.xls") 'путь к файлу-накопителю Set lb = ThisWorkbook lr = wb.Sheets(1).Cells(Rows.Count, 1).End(xlUp).Row Selection.EntireRow.Copy wb.Sheets(1).Cells(lr + 1, 1) wb.Close (True) ' закрыть с сохранением With Application: .EnableEvents = True: .DisplayAlerts = True: .ScreenUpdating = True: End With Set wb = Nothing: Set lb = Nothing 'чтобы после работы макроса файл-накопитель не становился невидимым в окнах Excel, в нём нужно прописать: 'Private Sub Workbook_Open() ' If Me.Parent.Caption = Application.Caption Then Windows(Me.Name).Visible = True 'End Sub End Sub
[/vba]
Надо бы, наверное, топик в "Готовое решение" сделать. Тема интересная и, ИМХО, часто востребованная.Alex_ST
С уважением, Алексей MS Excel 2003 - the best!!!
Сообщение отредактировал Alex_ST - Среда, 29.12.2010, 12:55
KuklP, Серёга, сам сделаешь топик в "готовых решениях" ? Мне, конечно, не трудно, но ведь идея-то твоя... И при этом я ведь знаю, как ты не любишь "доводку" до блеска.
KuklP, Серёга, сам сделаешь топик в "готовых решениях" ? Мне, конечно, не трудно, но ведь идея-то твоя... И при этом я ведь знаю, как ты не любишь "доводку" до блеска.Alex_ST