1 / 1 / 0
Регистрация: 09.09.2009
Сообщений: 39
|
||||||
1 | ||||||
Копирование данных при внесении чего-либо в ячейку24.01.2011, 09:58. Показов 3339. Ответов 15
Метки нет (Все метки)
Есть лист ексель с данными, один столбец пустой, как только в какую-нибудь ячейку этого столбца внесут данные, строка с этой ячейкой должна скопироваться в первую пустую строку другого листа, при помощи макроса все получается,но макрос надо каждый раз запускать, как сделать это в Private Sub Worksheet_Change(ByVal Target As Range), т.е. автоматом при внесении изменений.
Макрос имеет след вид:
0
|
24.01.2011, 09:58 | |
Ответы с готовыми решениями:
15
Как запустить макрос при внесении даных в ячейку Копировать строку с листа на лист при внесении изменений в ячейку в этой строке Копирование данных из столбца одной ячейки в ячейку При внесении данных в столбец "количество" выводить общую цену |
Silver
|
|
24.01.2011, 13:55 | 2 |
Немного не понятно....
зачем все это в макросе? разве нельзя сделать просто ссылки с одного листа на другой? |
4134 / 2238 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
|
||||||
24.01.2011, 15:58 | 3 | |||||
1) Поиск последней ячейки, путём перебора 9995 ячеек не лучший вариант, так что при желании его можно заменить 2) Если Вам действительно необходим цикл, то цикл Do немного проще Несколько примечаний : 1) В прошлом варианте, Вы проверяете ячейки в первом столбце на предмет наличия '', но в своём коде не переносите данных из первого столбца Т.е. получается, что при запуске макроса в листе 'Выполненные' не будет создаваться список, т.к. ячейка Cells(i, 1) всегда пустая 2) Запуск макроса осуществляется при вводе данных в столбец 'G' в листе 'Выполняемые' To Silver Может быть номера строк не должны в обоих листах совпадать, т.е. перенос осуществляется асинхронно, без определённого алгоритма ?
0
|
Silver
|
|
24.01.2011, 16:37 | 4 |
В примере автора не видно, что строки несинхронны.
Но даже если и так, то почему нельзя скопировать кусок с одного листа и вставить в другой? Цикл - это же страшно громоздко! |
4134 / 2238 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
|
|
24.01.2011, 17:02 | 5 |
To Silver
Я в первую очередь ориентируюсь на слова участника форума, отсюда и вывод о асинхронности строк. Впрочем мы легко это можем узнать у самой хозяйки вопроса. 1) Что касается цикла, то как Вы надеюсь заметили, этот момент я указал в комментариях и предложил более простой вариант решения. 2) Что касается копирования отдельных ячеек, из одной строки в другую, в разных листах, то уверяю Вас, что подобный код будет более 'громоздким', чем представленный мною. Проверьте и сами сможете убедиться в этом. C наилучшими пожеланиями для обоих участников форума.
0
|
Silver
|
|||||||||||
24.01.2011, 17:22 | 6 | ||||||||||
Для сравнения
1.
вместо них будут переменные не привожу пример чтобы не было громоздко |
4134 / 2238 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
|
|
24.01.2011, 18:08 | 7 |
Э, друг мой серебрянный, не надо подменять понятия. Если Вы говорите о копировании ячеек, то примените Copy, Paste и т.д., плюс возможно для этого Вам придётся 'переключаться' между листами и т.д.
0
|
Silver
|
|
24.01.2011, 18:52 | 8 |
Не будем спорить, так как мы мыслим разными категориями.
Ну например, я не стал бы делать цикл до 10000, а определил бы ячейку в которой есть значение 'непустых строк' в проверяемом столбце и при переносе (ячеек, диапазона, чего угодно) сразу писал-бы в строку с номером = ЧИСЛО_НЕПУСТЫХ + 1, т.е. следующую строку. Во-первых мы не ограничены 10000-ым барьером, во-вторых время выполнения данного макроса значительно меньше. Но каждый пишет по-своему, убеждать я вас не буду. Как писать это ваше дело. Споры в данном случае беспредметны. В любом случае спасибо за полемику. Удачи! |
4134 / 2238 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
|
|
24.01.2011, 20:03 | 9 |
Увы Silver, Вы опять оказались неправы, во первых надо читать внимательно сообщение, которое собираетесь комментировать или критиковать, вот цитата из моего предыдущего ответа :
>Несколько замечаний : >1) Поиск последней ячейки, путём перебора 9995 ячеек не лучший >вариант, так что при желании его можно заменить Так, что в этом аспекте мы мыслим одинаково, но хозяйка вопроса не просила улучшить или модернизировать свой код, поэтому я просто предложил свой вариант. Примечание : возможно, что её конечный код будет таким : iListOne.Cells(i, 1).Value = 'номер :' & iListTwo.Cells(iRow, 1).Value iListOne.Cells(i, 2).Value = 'сумма :' & iListTwo.Cells(iRow, 2).Value поэтому и нельзя применить перенос целиком диапазона 2) Если Вы предлагаете копирование, то пусть Ваш код отвечает употребляемым терминам.
0
|
1 / 1 / 0
Регистрация: 09.09.2009
Сообщений: 39
|
|
25.01.2011, 02:17 [ТС] | 10 |
Спасибо за помощь, действительно согласна с вами, цикл это не самое лучшее, как сделать иначе я пока не придумала, если можете подскажите. Можно и просто скопировать полностью строку и вставить ее в другой лист. А еще у меня в одном из столбцов на первом листе гиперссылка, как сделать чтобы при копировании она была активна
0
|
1 / 1 / 0
Регистрация: 09.09.2009
Сообщений: 39
|
|
25.01.2011, 02:20 [ТС] | 11 |
Лучше конечно было бы чтобы строка вырезалась с первого листа и вставлялась во второй
0
|
4134 / 2238 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
|
|
25.01.2011, 02:45 | 12 |
Ну как вырезать строку в одном листе и вставить в другой легко узнать с помощью макрорекордера.
0
|
4134 / 2238 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
|
|
25.01.2011, 03:02 | 13 |
iLastRow = ActiveSheet.Cells(65536, 1).End(xlUp).Row
MsgBox iLastRow Извините, забыл про первую часть Вашего вопроса. Вот один из примеров определения последней заполненной строки в столбце 'A' в активном листе. Естественно, что ActiveSheet можно заменить на имя, кодовое имя или индекс нужного листа.
0
|
1 / 1 / 0
Регистрация: 09.09.2009
Сообщений: 39
|
|
25.01.2011, 03:14 [ТС] | 14 |
Спасибо, сейчас попробую
0
|
1 / 1 / 0
Регистрация: 09.09.2009
Сообщений: 39
|
|
25.01.2011, 10:07 [ТС] | 15 |
можно еще вопрос, на этом листе нужно еще одно условие, если сегодняшняя дата равна одной из дат в столбце 5, то вырезаем эту строку и вставлем на листна лист ('Просроченные'), подскажите как это сделать и куда вставить в программе,
0
|
1 / 1 / 0
Регистрация: 09.09.2009
Сообщений: 39
|
|
26.01.2011, 04:50 [ТС] | 16 |
с гиперссылкой разобралась
0
|
26.01.2011, 04:50 | |
26.01.2011, 04:50 | |
Помогаю со студенческими работами здесь
16
Копирование значения при после ввода на другой лист в первую пустую ячейку в определенном диапазоне При изменении каких либо данных программа либо вылетает, либо просто не изменяет данные Ошибка при внесении данных в таблицу БД Не экранирует символы при внесении данных в БД Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |