Как правильнее?

Программирование на Visual Basic for Applications
ruvster
Новичок
Новичок
 
Сообщения: 39
Зарегистрирован: 18.08.2005 (Чт) 19:32

Как правильнее?

Сообщение ruvster » 20.10.2005 (Чт) 23:10

Как правильнее (лучше, удобней) писать:
Range("a1").Copy Range("b1")
или
Range("b1") = Range("a1")
Спасибо.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 20.10.2005 (Чт) 23:25

Смотря какая у тебя цель.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

ruvster
Новичок
Новичок
 
Сообщения: 39
Зарегистрирован: 18.08.2005 (Чт) 19:32

Сообщение ruvster » 20.10.2005 (Чт) 23:50

Просто хотел узнать в чем разница.
И еще вопрос.
Пишу:
Set a = Range("a1")
Set b = Range("b1")
a.Copy b

Все нормально. А вот если:

Set a = Range("a1")
Set b = Range("b1")
b = a
Тогда не катит. Почему?
Это я к вопросу Васи-Глаши (задолбали они меня уже).
Я написал:
Set Вася = Worksheets(1).Columns(1).Find("Вася", , xlValues, xlWhole).Offset(0, 1)
Set Глаша = Worksheets(2).Columns(3).Find("Глаша", , xlValues, xlWhole).Offset(0, 1)
Теперь пишу:
Вася.Copy Глаша
И все путем, а вот если хочу сложить Васю и Петю и отдать все Глаше, то пишу:
Set Вася = Worksheets(1).Columns(1).Find("Вася", , xlValues, xlWhole).Offset(0, 1)
Set Петя = Worksheets(1).Columns(1).Find("Петя", , xlValues, xlWhole).Offset(0, 1)
Set Глаша = Worksheets(2).Columns(3).Find("Глаша", , xlValues, xlWhole).Offset(0, 1)
Глаша=Вася+Петя
Ни фига.
Где ошибка? Я ж только начинаю VBA рассматривать и многого не понимаю.
Спасибо.
PS
А массив тут может помочь как нибудь? Потому как Вась, Машь, Петь у меня до хрена?

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 21.10.2005 (Пт) 0:04

Ответ на все данные вопросы разом (правда, в форме вопроса): ты переменные объявляешь?
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

ruvster
Новичок
Новичок
 
Сообщения: 39
Зарегистрирован: 18.08.2005 (Чт) 19:32

Сообщение ruvster » 21.10.2005 (Пт) 0:22

Пробовал.
Тогда он мне вообще ошибки выдает и не знаю почему.
(объявляю переменные, как Double)
Главное, задача то простая. Вася - Глаша, Глаша - Маша :-)

ruvster
Новичок
Новичок
 
Сообщения: 39
Зарегистрирован: 18.08.2005 (Чт) 19:32

Сообщение ruvster » 21.10.2005 (Пт) 0:41

Может глянешь одним глазком. Если я файл выложу?

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 21.10.2005 (Пт) 0:42

Вот ты переменные-то сначала объяви. Все. И не double, а тех типов, которые нужны.
Потом наверху option explicit напиши, самой первой строчкой модуля.

Потом продолжим :)
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

ruvster
Новичок
Новичок
 
Сообщения: 39
Зарегистрирован: 18.08.2005 (Чт) 19:32

Сообщение ruvster » 21.10.2005 (Пт) 1:30

Дело совсем не в объявлении переменных.
Суть не в этом.
Я могу тупо расписать:
Worksheets(1).Columns(1).Find("м-н лада", , xlValues, xlWhole).Offset(0, 1).Copy _
Worksheets(2).Columns(3).Find("лада", , xlValues, xlWhole).Offset(0, 1)

Worksheets(1).Columns(1).Find("м-н перекресток", , xlValues, xlWhole).Offset(0, 1).Copy _
Worksheets(2).Columns(3).Find("перекресток", , xlValues, xlWhole).Offset(0, 1)

Worksheets(2).Columns(3).Find("Копейка 1 в т.ч.", , xlValues, xlWhole).Offset(0, 1) = _
Worksheets(1).Columns(1).Find("М-Н КОПЕЙКА 1 ГАСТРОНОМ", , xlValues, xlWhole).Offset(0, 1) + _
Worksheets(1).Columns(1).Find("М-Н КОПЕЙКА 1 ВИНО-ВОДОЧНЫЙ", , xlValues, xlWhole).Offset(0, 1)

И так 30 позиций.
И все будет тип-топ.
Но думаю, что это совсем неправильно.
Должен быть другой выход. Более простой.
А объявление переменных в данном случае...
Ну, не объявлю я их. Чем тебе переменная типа "Variant" не нравится?

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 21.10.2005 (Пт) 1:38

ruvster писал(а):Чем тебе переменная типа "Variant" не нравится?

Тем, что возникает неразрешамая неоднозначность.

Есть переменная v As Variant. В ней хранится ссылка на объект. У объекта есть свойство по умолчанию.
Выполняем команду v = "asd".
Что мы делаем этой командой? Забываем про объект и записываем вместо него строку? Или присваиваем строку свойству по умолчанию, которое есть у объекта, то есть, к примеру, v.value = "asd"?



Давай ты задачу изначально опишешь, без Глаш? :)
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

ruvster
Новичок
Новичок
 
Сообщения: 39
Зарегистрирован: 18.08.2005 (Чт) 19:32

Сообщение ruvster » 21.10.2005 (Пт) 2:29

Вот собственно на данный момент такая задача в файле.
Вложения
Vhod.zip
(26.82 Кб) Скачиваний: 38
Vhod.zip
(26.82 Кб) Скачиваний: 35

ruvster
Новичок
Новичок
 
Сообщения: 39
Зарегистрирован: 18.08.2005 (Чт) 19:32

Сообщение ruvster » 21.10.2005 (Пт) 2:30

Случайно два раза отправил

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Сообщение Twister » 21.10.2005 (Пт) 2:31

Зачем два раза?
А я все практикую лечение травами...

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Сообщение Twister » 21.10.2005 (Пт) 2:44

1. Workbooks.Open ("C:\vhod\Шаблон.xls") - старайся не указывать полный путь, потом могут возникнуть траблы.
2. Option Explicit все таки рулит - поставь его и объяви переменные, это уменьшит вероятность ошибки.
А я все практикую лечение травами...

ruvster
Новичок
Новичок
 
Сообщения: 39
Зарегистрирован: 18.08.2005 (Чт) 19:32

Сообщение ruvster » 21.10.2005 (Пт) 3:03

Самое главное, что код какой-то "левый". Другие варианты возможны?

ruvster
Новичок
Новичок
 
Сообщения: 39
Зарегистрирован: 18.08.2005 (Чт) 19:32

Сообщение ruvster » 21.10.2005 (Пт) 3:14

Да, еще в шаблоне написана формула для подсчета суммы. Хотелось бы ее высчитать программно. Чтой-то не получается

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 21.10.2005 (Пт) 11:07

А сводная таблица не спасёт отца русской демократии? :roll:
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

ruvster
Новичок
Новичок
 
Сообщения: 39
Зарегистрирован: 18.08.2005 (Чт) 19:32

Сообщение ruvster » 21.10.2005 (Пт) 12:39

По поводу сводной таблицы... Я плохо представляю, как это будет выглядеть.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 21.10.2005 (Пт) 12:41

Я тоже, но я ещё и плохо представляю твою задачу...
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 77

    TopList