Страница: 1 |
|
Вопрос: При изменении материнсой - дочерняя не меняется
|
Добавлено: 11.11.05 19:07
|
|
Автор вопроса: Михаил
|
При нажатии кнопки макроса в Exel, данные из одной ячейки передаются в другую. Как можно определить в Microsoft Visual Basic, чтобы при изменении "родительской" ячейки "дочерняя" не изменялась? Или как можно не копировать содержимое ячейки, а передавать его?
В книге Exel на разных листах идет расчет стоимости разных заказов. При расчете используются входные данные: размеры, колличество и т.д. После ввода всех осходных данных стоимость заказа считается и передается в ячейку (2,5). В предыдущие четыре ячейки передаются исходные данные (название, размер, кол-во) и после нажатия кнопки макроса зачения этих ячеек передаются в таблищу на Лист 1 (с 14 по 50-ую строку). Если измененить исходные данные и снова запустить макрос то эта строка из 5-ти ячеек передается в таблицу в следующую строку (т.к. первая уже занята).
Нижеприведенный макрос работает, но проблема вот в чем: содержимое строк в таблице получаются одинаковыми. Как сделать, чтобы при вводе новых исходных данных и передече их в таблицу первая строка не изменялась?
Sub mak_copy_post()
For n = 14 To 50
If Worksheets("Лист 1").Cells(n, 2) = "" Then
ActiveSheet.Cells(2, 1).Copy _
Destination:=Worksheets("Лист 1").Cells(n, 2)
ActiveSheet.Cells(2, 2).Copy _
Destination:=Worksheets("Лист 1").Cells(n, 3)
ActiveSheet.Cells(2, 3).Copy _
Destination:=Worksheets("Лист 1").Cells(n, 4)
ActiveSheet.Cells(2, 4).Copy _
Destination:=Worksheets("Лист 1").Cells(n, 5)
ActiveSheet.Cells(2, 5).Copy _
Destination:=Worksheets("Лист 1").Cells(n, 6)
End
End If
Next n
End Sub
Ответить
|
Номер ответа: 2 Автор ответа: Михаил
Вопросов: 1 Ответов: 3
|
Профиль | | #2
|
Добавлено: 13.11.05 19:49
|
После расчета некоторого листа (пусть "Лист 3" данные передаются в ячейки A2,B2,C2,D2,E2 этого листа. Далее при запуске макроса эти данные передаются в "Лист 1" в таблицу, в первую строку (B14,C14,D14,E14,F14). Далее если на Листе 3 изменить входные данные, то расчет естественно изменится и в ячейки A2,B2,C2,D2,E2 передаются новые данные. Так вот: если запустить тот-же макрос новые данные передаются в следующую пустую строку (B15,C15,D15,E15,F15) таблицы на Листе 1. Но данные в строке 14 тут-же становятся такими как в строке 15. Тоесть, макрос передает ссылку на ячейки, и если они изменяются, то и переданные раннее данные тоже меняются. Нужно, чтобы при передаче данных "дочерняя" строка ("Лист 1"не изменялась при изменении "материнской" строки ("Лист 3". Возможно есть какая-то функция, которая не копирует данные, а передает (не оставляя связи между ячейками).
Ответить
|
Номер ответа: 4 Автор ответа: Михаил
Вопросов: 1 Ответов: 3
|
Профиль | | #4
|
Добавлено: 13.11.05 20:28
|
Может у меня действительно коряво получается объяснить. Пожалуйста, создай книгу, скопируй этот макрос, во втором листе забей данные в ячейки A2,B2,C2,D2,E2 и запусти макрос. После этого измени содержимое A2,B2,C2,D2,E2 и снова запути макрос. После этого сравни две строки ни "Листе 1". И надеюсь ты поймеш, в чем "прикол".
НЕ поленись, сделай это.Плиз
Ответить
|
Номер ответа: 6 Автор ответа: Михаил
Вопросов: 1 Ответов: 3
|
Профиль | | #6
|
Добавлено: 14.11.05 19:22
|
Для тех кто поймет - решение проблемы:
Метод Range.Copy, который здесь использован, выполняет копирование диапазона ячеек. Если в них была формула, то скопируется именно формула - все как при использовании Ctrl+C, Ctrl+V. Как сделать, чтобы не скопировать ячейку, а задать ей значение - замените ActiveSheet.Cells(2, 5).Copy Destination:=Worksheets("Лист 1".Cells(n, 6) на Worksheets("Лист 1".Cells(n, 6).Value=ActiveSheet.Cells(2, 5).Value. И никаких формул не будет.
Тема закрыта.
Всем спасибо.
Ответить
|
Страница: 1 |
Поиск по форуму