Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - VBA

Страница: 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

Ответить

  Ответы Всего ответов: 7  

Номер ответа: 1
Автор ответа:
 GSerg



Вопросов: 0
Ответов: 1876


 Профиль | | #1 Добавлено: 11.11.05 19:18
Ничё не понял.

Ответить

Номер ответа: 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";). Возможно есть какая-то функция, которая не копирует данные, а передает (не оставляя связи между ячейками).

Ответить

Номер ответа: 3
Автор ответа:
 GSerg



Вопросов: 0
Ответов: 1876


 Профиль | | #3 Добавлено: 13.11.05 20:18
Не оставляя связи между ячейками - это и есть копирование.

Ничё не понял II.

Ответить

Номер ответа: 4
Автор ответа:
 Михаил



Вопросов: 1
Ответов: 3
 Профиль | | #4 Добавлено: 13.11.05 20:28
Может у меня действительно коряво получается объяснить. Пожалуйста, создай книгу, скопируй этот макрос, во втором листе забей данные в ячейки A2,B2,C2,D2,E2 и запусти макрос. После этого измени содержимое A2,B2,C2,D2,E2 и снова запути макрос. После этого сравни две строки ни "Листе 1". И надеюсь ты поймеш, в чем "прикол".
НЕ поленись, сделай это.Плиз

Ответить

Номер ответа: 5
Автор ответа:
 GSerg



Вопросов: 0
Ответов: 1876


 Профиль | | #5 Добавлено: 14.11.05 00:52
Создал.
Скопировал.
Забил.
Запустил.
Изменил.
Запустил.

Прикола не увидел и не понял.
Второй раз макрос просто не делает ничего, поскольку условие Worksheets("Лист 1";).Cells(n, 2) = "" уже не выполняется.


Ничё не понял III. Воскрешение.
Блокбастер.

Ответить

Номер ответа: 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. И никаких формул не будет.

Тема закрыта.
Всем спасибо.

Ответить

Номер ответа: 7
Автор ответа:
 vito



Разработчик Offline Client

Вопросов: 23
Ответов: 879
 Web-сайт: softvito.narod2.ru
 Профиль | | #7
Добавлено: 14.11.05 21:43
Ничё не понял IV.Ответный удар.
Суперблокбастер.

GSerg
Спасибо, ржал от души...:))))))))))))))))

Михаил, без обид. Всегда рады помочь.

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам