Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Обращение к объектам Picture на листе по индексу в цикле  (Прочитано 14947 раз)
0 Пользователей и 1 Гость смотрят эту тему.
liding
Гость
« : 26-01-2008 01:50 » 

Вечер или день, не знаю, добрый.

Подскажите кто знает. Имеется лист, на нем просто
лежат элементы Picture. Никаких форм.
Выглядит это так Image1, Image2, Image3 .... Image30
Для иницилизации приходится выполнять операцию

.Image1.Picture = LoadPicture(FileNames(1))
.Image2.Picture = LoadPicture(FileNames(2))
...
...
итд...
.Image30.Picture = LoadPicture(FileNames(30))

для каждого элемента собственно своя строчка.
Хотелось бы сделать это в цикле, обращаясь к объектам
Picture по индексу или как-нибудь по другому не важно, чтоб
это выглядело примерно так:

        For x = 1 To 30
           .Image(x).Picture = LoadPicture(FileNames(x))
        Next

Может есть возможность получить ссылку на переменную Image"X",
сформировав ее имя из строки, может функции есть специальные какие...

Помогите пожалуста,
Спасибо

Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #1 : 26-01-2008 13:01 » 

напрашивается массив указателей на Image (или ссылок, что там в бейсике)
Записан

RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #2 : 26-01-2008 17:26 » 

Collection там есть.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
HandKot
Молодой специалист

ru
Offline Offline

« Ответ #3 : 28-01-2008 05:57 » 

а если всем Image присвоить одно и тоже имя и вытавить сво-во index по порядку, то можно обращатся как к массиву

.MyImage(i).Picture = LoadPicture(FileNames(i))
Записан

I Have Nine Lives You Have One Only
THINK!
liding
Гость
« Ответ #4 : 28-01-2008 16:07 » 

Попробую немного конкретезиторавть происходящее:

Когда на лист ложиться элемент. В данном случае типа Picture, то он имеет какоето имя.
Imege1, Image2 итп....  И проблема в том, что я незнаю другого способа обратиться к ним как только по имени на прямую. Поэтому перебрать их в цикле не могу. Присвоить одинаковые имена элементам нельзя. Excel это не позволяет.

Нужно найти какой-то альтернативный способ получить ссылки на эти элементы,
которые позволили бы обращяться к картинкам в цикле используя обычный перебор.

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

Путь к решению это вероятьней всего, как упомянул Алексей1153++, ссылки относительно
обекта листа Worksheets.....

Я не знаю, может у Worksheets есть Collection, автоматически ссылающиеся на элементы
листа, как сказал RXL, я не знаю как с этим работыть. Подсажите...



Записан
HandKot
Молодой специалист

ru
Offline Offline

« Ответ #5 : 29-01-2008 05:46 » 

выложите файл примера
Записан

I Have Nine Lives You Have One Only
THINK!
HandKot
Молодой специалист

ru
Offline Offline

« Ответ #6 : 29-01-2008 06:14 » 

попробуйте так
Код:
ActiveSheet.OLEObjects("Image" + Str(i)).Object = LoadPicture(...
Записан

I Have Nine Lives You Have One Only
THINK!
liding
Гость
« Ответ #7 : 29-01-2008 14:20 » 

попробуйте так
Код:
ActiveSheet.OLEObjects("Image" + Str(i)).Object = LoadPicture(...

Что сказать, ....
           Моей благодарности нет предела....
           Большое спасибо. Это то что нано.
           Думаю это будет интересно не только мне!
Записан
HandKot
Молодой специалист

ru
Offline Offline

« Ответ #8 : 29-01-2008 14:33 » 

вот еще интересная весчь
получить св-во left объекта по имени
Код:
CallByName(ThisWorkbook.Worksheets(1).OLEObjects("Image" + Str(i)), "Left", VbGet)
главное в именах не запутаться и не ошибаться Улыбаюсь
Записан

I Have Nine Lives You Have One Only
THINK!
liding
Гость
« Ответ #9 : 29-01-2008 21:58 » 

вот еще интересная весчь
получить св-во left объекта по имени
Код:
CallByName(ThisWorkbook.Worksheets(1).OLEObjects("Image" + Str(i)), "Left", VbGet)
главное в именах не запутаться и не ошибаться Улыбаюсь

Да, век живи век учись. Я так глубоко раньше не зарывался. Спасибо за поддерку.
У меня еще тут наклевывается вопрос. Позже свормулирую...
Записан
Naghual
Модератор

ua
Offline Offline
Пол: Мужской
ОПТИМИСТ


WWW
« Ответ #10 : 31-01-2008 13:44 » 

Правильнее будет обращаться к ним через коллекцию Shapes. Только проверить равен ли его Type = msoPicture.
Записан
HandKot
Молодой специалист

ru
Offline Offline

« Ответ #11 : 01-02-2008 05:58 » new

согласен, но смотря как добавлена картинка
если не ошибаюсь, то она не всегда в shape дает доступ
Записан

I Have Nine Lives You Have One Only
THINK!
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines