Работа с объектом Rows

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Sandr0
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 65
Зарегистрирован: 17.11.2004 (Ср) 16:26
Откуда: Rostov-on-Don

Работа с объектом Rows

Сообщение Sandr0 » 10.12.2004 (Пт) 16:41

Мое почтение! Срочно требуется помощь...

Ситуация:
В книге Excel есть два листа с именами "Лист1" и "Лист2".
На "Лист1" есть 10 строк заполненных данными и отформатированных в соответствии с требованиями.
Необходимо скопировать эти строки со всем оформлением на "Лист2".

Реализовано:
Код: Выделить всё
    Dim Коллекция As Collection, строка
    Set Коллекция = New Collection
   
    For Each строка In Sheets("Лист1").Rows
        Коллекция.Add строка
        If строка.Row = 10 Then Exit For
    Next
    '************************
    '*** работа с коллекцией
    '************************
    For Each строка In Sheets("Лист2").Rows
        Set строка = Коллекция(строка.Row)
        If строка.Row = 10 Then Exit For
    Next

почему работа идет через коллекцию? - одно из условий

Результат:
Копирования не происходит.
Почему? Где Косяк?

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 10.12.2004 (Пт) 17:14

Где косяк - вижу: строка "Set строка = Коллекция(строка.Row)" просто перезаписывает переменную "строка", не затрагивая ту строку, на которую эта переменная ссылалась раньше.
Как исправить - сразу не скажу, а Экселя под руками нет.
Изображение

xolod
Гуру
Гуру
 
Сообщения: 1162
Зарегистрирован: 15.01.2004 (Чт) 0:42
Откуда: Moscow

Сообщение xolod » 10.12.2004 (Пт) 17:20

Ну и конечно все это следует писать в разделе VBA :wink:

Constant ERROR_SUCCESS deprecated. I'm so happy.
Программирование и дизайн – http://www.macrointellect.ru

Sandr0
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 65
Зарегистрирован: 17.11.2004 (Ср) 16:26
Откуда: Rostov-on-Don

Сообщение Sandr0 » 10.12.2004 (Пт) 17:23

прошу прощения у модераторов
но здесь больше специалистов бывает

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

Сообщение GSerg » 10.12.2004 (Пт) 17:36

Что ж это за условие такое зверское? :)
Мож ты просто не понял задание? Мож имелась в виду сама коллекция Rows? :)

Если нет, тогда
for each строка in sheets("лист2").rows
коллекция(строка.row).copy строка.cells(1,1)
next


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

Sandr0
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 65
Зарегистрирован: 17.11.2004 (Ср) 16:26
Откуда: Rostov-on-Don

Сообщение Sandr0 » 11.12.2004 (Сб) 7:29

у коллекции нет метода copy

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

Сообщение GSerg » 11.12.2004 (Сб) 8:11

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

Sandr0
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 65
Зарегистрирован: 17.11.2004 (Ср) 16:26
Откуда: Rostov-on-Don

Сообщение Sandr0 » 11.12.2004 (Сб) 9:44

copy работает через буфер обмена
а мне надо простое копирование объекта :cry:

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

Сообщение GSerg » 11.12.2004 (Сб) 10:15

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

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

Сообщение GSerg » 11.12.2004 (Сб) 10:20

И ещё...
Ты не сможешь подменить row никак, потому что read only. Ты сможешь только изменить свойства row (которые не read only). А это проще всего сделать через copy (потому что иначе тебе придётся копировать вручную каждое свойство в отдельности).

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

Sandr0
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 65
Зарегистрирован: 17.11.2004 (Ср) 16:26
Откуда: Rostov-on-Don

Сообщение Sandr0 » 11.12.2004 (Сб) 12:43

хм...
Copies the range to the specified range or to the Clipboard

или я хелп не умею читать? :?

вполне возможно что надо пересмотреть способ реализации...
только как? :(
вручную выводить значения в каждую ячейку, а потом задавать цвета и рамки ручками? слишком долго и "мерцание монитора" раздражает юзверей... (я не сторонник экранного формирования данных)
я хотел использовать "бланк" и путем копирования строк из бланка формировать то шо треба с подстановкой значений.

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

Сообщение GSerg » 11.12.2004 (Сб) 12:55

Да, ты не умеешь читать хэлп :)
Привожу в более понятную форму:
Copies:
- range to range
OR
- range to clipboard


А мерцание монитора - дык нефиг извращаться с коллекцией...


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

Sandr0
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 65
Зарегистрирован: 17.11.2004 (Ср) 16:26
Откуда: Rostov-on-Don

Сообщение Sandr0 » 11.12.2004 (Сб) 13:21

смотри вложение

есть коллекция с данными
есть лист "бланк" в ячейки с константами подставляются значения из коллекции (т.е. подразумевается что юзверь может рисовать в бланке что угодно, но только хай незабывает необходимые имена кконстант ставить)
табличная часть бланка может иметь несколько строк
результат на одноименном листе
Вложения
Книга1.rar
(5.93 Кб) Скачиваний: 26

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

Сообщение GSerg » 11.12.2004 (Сб) 13:27

Ужасно :?
Имхо :)


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

Sandr0
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 65
Зарегистрирован: 17.11.2004 (Ср) 16:26
Откуда: Rostov-on-Don

Сообщение Sandr0 » 11.12.2004 (Сб) 13:34

GSerg писал(а):Откуда берутся данные? С какого перепугу они помещаюстя в коллекцию?

какая разница откуда беруться и как формируются?
конечный результат = есть коллекция с данными
GSerg писал(а):Как различаются разные строки, ведь их содержимое одинаково?

не понял вопроса

упростим - одна строка коллекции равна одному бланку (с подстановкой)
без всяких условий и различий...

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

Сообщение GSerg » 11.12.2004 (Сб) 13:38

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

Sandr0
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 65
Зарегистрирован: 17.11.2004 (Ср) 16:26
Откуда: Rostov-on-Don

Сообщение Sandr0 » 11.12.2004 (Сб) 13:39

в колекции только значения, никаких объектов

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

Сообщение GSerg » 11.12.2004 (Сб) 13:44

:?

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

Sandr0
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 65
Зарегистрирован: 17.11.2004 (Ср) 16:26
Откуда: Rostov-on-Don

Сообщение Sandr0 » 11.12.2004 (Сб) 13:53

вахЪ! може моя не прав (я не исключаю этого) но накой код? :oops: это же элементарные истины...

Код: Выделить всё
dim MyCol as Collection
dim MyStrCol as Collection
set MyCol = new collection

for i=1 to 100
    set MyStrCol = new collection
    MyStrCol.Add Sheets("Лист1").Cells(i,1).Value
    MyStrCol.Add Sheets("Лист1").Cells(i,2).Value
    MyStrCol.Add Sheets("Лист1").Cells(i,3).Value
    MyCol.Add MyStrCol
next

с нетерпением жду продолжения диалога :)

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

Сообщение GSerg » 11.12.2004 (Сб) 14:01

Ай нью вят...
Ай нью вят!!!

Теперь скажи, как ты собираешься различать эти объекты в этой коллекции, если ты элементарно не присваиваешь им ключи при добавлении??? И нафига тебе коллекция, если у тебя уже есть некий лист с данными????? Это уже очень продвинутая коллекция!
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Sandr0
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 65
Зарегистрирован: 17.11.2004 (Ср) 16:26
Откуда: Rostov-on-Don

Сообщение Sandr0 » 11.12.2004 (Сб) 14:09

GSerg писал(а):Теперь скажи, как ты собираешься различать эти объекты в этой коллекции, если ты элементарно не присваиваешь им ключи при добавлении??? И нафига тебе коллекция, если у тебя уже есть некий лист с данными?????


Мне не нужно их различать. При формировании результирующей таблицы идет простой перебор всей коллекции.

Ключи? в смысле? цэ как? моя твоя не поняв... :oops:

Нафига коллекция если есть лист с данными?
твоя шибко не прав... коллекция это только результат обработки массы данных в разных форматах(TXT,XLS,MDB)... это уже сделано и оно работает... остался только вывод...

Sandr0
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 65
Зарегистрирован: 17.11.2004 (Ср) 16:26
Откуда: Rostov-on-Don

Сообщение Sandr0 » 11.12.2004 (Сб) 14:15

понял, ключи:
object.Add item, key, before, after
пока их использовать нет необходимости

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

Сообщение GSerg » 11.12.2004 (Сб) 14:24

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

Sandr0
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 65
Зарегистрирован: 17.11.2004 (Ср) 16:26
Откуда: Rostov-on-Don

Сообщение Sandr0 » 11.12.2004 (Сб) 14:30

почему?
лист - это только случай обработки XLS, а как быть с MDB, TXT?
твои предложения?

и чего ты уперся в коллекицю? она то тут причем? представь что у тебя есть массив данных....
треба же заполнение по шаблону (бланку) и все-го-то....
я тебя не пойму :?:
Последний раз редактировалось Sandr0 11.12.2004 (Сб) 14:32, всего редактировалось 1 раз.

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

Сообщение GSerg » 11.12.2004 (Сб) 14:31

mdb на лист - через querytable, к примеру. Оч. удобно.

txt на лист - через workbooks.opentext. Не менее удобно.


Потому что если у тебя есть шаблон, и это лист. Поэтому и удобно будет иметь данные на листе.

Вообще, я первый раз вижу, чтобы кто-то так использовал коллекцию в экселе...
Последний раз редактировалось GSerg 11.12.2004 (Сб) 14:33, всего редактировалось 1 раз.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Sandr0
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 65
Зарегистрирован: 17.11.2004 (Ср) 16:26
Откуда: Rostov-on-Don

Сообщение Sandr0 » 11.12.2004 (Сб) 14:32

коллекия - это всего-лишь способ хранения данных
а задача в копировании шаблона

Sandr0
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 65
Зарегистрирован: 17.11.2004 (Ср) 16:26
Откуда: Rostov-on-Don

Сообщение Sandr0 » 11.12.2004 (Сб) 14:40

GSerg писал(а):Потому что если у тебя есть шаблон, и это лист. Поэтому и удобно будет иметь данные на листе.

в принципе ты прав, но все-таки... интересно же решить проблему? а не предлагать альтернативы
GSerg писал(а):Вообще, я первый раз вижу, чтобы кто-то так использовал коллекцию в экселе...

:lol: ну вот ты на меня и напоролся :wink: я знаете-ли излюбливаю этим заниматьси... занятная штука и удобная.. особенно если писать свои классы... что я собственно и делаю...

я могу решить проблему но! интересно решить именно поставленную задачу. не так-ли :?:

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

Сообщение GSerg » 11.12.2004 (Сб) 14:43

Извини, но это не ко мне :)
Я всегда решаю задачу тем способом, который мне кажется интересным :)

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

Sandr0
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 65
Зарегистрирован: 17.11.2004 (Ср) 16:26
Откуда: Rostov-on-Don

Сообщение Sandr0 » 11.12.2004 (Сб) 14:52

GSerg писал(а):Я всегда решаю задачу тем способом, который мне кажется интересным :)

ну этим и я увлекаюсь, люблю давать советы... но иногда нужно решить именно поставленную задачу

GSerg писал(а):Кстати, ты в курсе, что ты вообще не сохраняешь форматирование в своей коллекции? :D

в смысле?

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

Сообщение GSerg » 11.12.2004 (Сб) 14:56

Ну ты ж value добавляешь :)
Гы-гы-гы... :(


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


Вернуться в Visual Basic 1–6

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

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

    TopList  
cron