Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.08.2014, 11:24   #1
Fadey001
Пользователь
 
Регистрация: 07.12.2011
Сообщений: 19
По умолчанию Работа с классами

Решил написать класс. В класс передается переменная, внутри происходит магия, и в конечном итоге этот саб получает HTML документ. Но как его теперь передать в основную программу?
Пробовал объявлять публичную переменную в основной программе
Код:
Public HTML as Object
А в самом классе делать так
Код:
Set HTML = IE.Document
Пока саб класса работает в переменной присутствует код, но как только он завершается переменная уничтожается, хоть она и паблик и объявлена в родительском сабе.
Как получить результат выполнения?
Fadey001 вне форума Ответить с цитированием
Старый 15.08.2014, 12:15   #2
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

вопрос не совсем понятен.

а почему класс (представитель класса) должен знать о существовании HTML as Object даже обьявленной где-то как Public, в Вашем проекте эта переменная определена, но класс ничего о ней не знает
если в модуле класса напишете
Option Explicit
то на строке
Set HTML = IE.Document
получите сообщение о неопределенной переменной

не так давно мне попался хороший вопрос, используемый на собеседовании программистов:
Вы привлекались когда-нибудь к уголовной ответственности за хранение данных в глобальных переменных?
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете

Последний раз редактировалось IgorGO; 15.08.2014 в 12:37.
IgorGO вне форума Ответить с цитированием
Старый 15.08.2014, 13:31   #3
Fadey001
Пользователь
 
Регистрация: 07.12.2011
Сообщений: 19
По умолчанию

Option Explicit объявлен, и макрос не ругается на него.
Все выполняется, в глобальную переменную объект записывается, но как только выполнение метода класса заканчивается, переменная затирается.
Я бы с радостью отказался от глобальных переменных, но в силу неопытности в данном вопросе не знаю как)))
Кстати, если объявить глобальную переменную типа String до данные в нее метод записывает, и после завершения она не перетирается. Как это получается не знаю.
Смысл моего класса в том что бы передать на сервер запрос с опреденными параметрами заданного юзером, и полученный документ сохранить в переменной типа Object.
В этом документе есть набор параметров которые нужно извлечь, только не все сразу, а определенные в зависимости от ситуации.
Мне это видится так.
1. Получаем входные данные.
2. Вызываем метод класса который загрузит страницу и запишет ее в переменную.
3. Затем вызываем другие методы класса и в качестве параметра передаем ему переменную с исходным кодом.
4. Метод его разбирает и находит данные.
Для каждого параметра свой метод. Думал сделать так потому что что бы получить исходные данные приходится загружать две страницы, и это сильно влияет на скорость выполнения скрипта.
Так как получив исходные данные нужно открыть страницу используя эти данные, затем на этой страницы найти уникальный дескриптор и уже используя его открыть искомую страницу.
Или способ номер 2.
Загрузить страницу одним методом и им же извлечь все данные и записать их в глобальную переменную типа Collection.
Читал что их можно использовать в качестве ассоциативных массивов, как например в PHP и иже с ними.
Как думаете, второй метод будет лучше?
Наверно он будет в любом случае работать быстрее.
Fadey001 вне форума Ответить с цитированием
Старый 15.08.2014, 14:23   #4
Fadey001
Пользователь
 
Регистрация: 07.12.2011
Сообщений: 19
По умолчанию

Кажется я понял свою проблему))
Мне нужно инициализировать класс и записать все данные в переменные.
А потом использовать их прописав Property Get для каждого параметра.
Вопрос в том как инициализировать класс в VBA что бы после инициализации переменные не уничтожались а хранились?
Стандартный способ инициализации не подходит Class_Innitialize так как он не принимает параметров, а если написать свой метод то после выполнения все переменные очищаются. Или я не правильно что то делаю
Fadey001 вне форума Ответить с цитированием
Старый 15.08.2014, 14:38   #5
Fadey001
Пользователь
 
Регистрация: 07.12.2011
Сообщений: 19
По умолчанию

Все!!!!!!!
Хитрожопый эксель хотел меня обдурить!!!!))))
Ничего не уничтожается после выполнения моего метода инициализации)) просто через Watch нельзя почему то посмотреть)) Прописал метод Property Get а в нем код обработки HTML документа и все сработало. Все нашлось) тему можно закрывать))
Fadey001 вне форума Ответить с цитированием
Старый 15.08.2014, 14:50   #6
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Цитата:
Хитрожопый эксель хотел меня обдурить!!!!))))
что-то мне подсказывает, что в этой фразе надо слова местами переставить)


на будущее, если что-то не получается - выкладывайте пример файла,
с простеньким тестовым макросом, который должен работать, но не работает
Тогда будет намного проще понять, что вы там изобретаете.
EducatedFool вне форума Ответить с цитированием
Старый 15.08.2014, 14:53   #7
Fadey001
Пользователь
 
Регистрация: 07.12.2011
Сообщений: 19
По умолчанию

Цитата:
Цитата:
Хитрожопый эксель хотел меня обдурить!!!!))))
что-то мне подсказывает, что в этой фразе надо слова местами переставить)
Ну или так)))
В будущем буду стараться выкладывать, да простит меня служба безопасности))
Fadey001 вне форума Ответить с цитированием
Старый 15.08.2014, 15:25   #8
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

и с безопасностью можно "ужится"...
если Ваши данные очень сектретны - надо просто подготовить файл-пример, где фразу "300 кг героина" заменяете на "300 кг яблок" или еще чего, в меру Вашей фантазии и вопрос итсылаете с интернет-кафе, а не с рабочего компьютера
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
с++ работа с классами proef Помощь студентам 9 25.09.2013 00:04
Работа с классами petrovich2005 Помощь студентам 2 24.06.2011 17:32
Работа с классами ImmortalAlexSan Помощь студентам 0 04.12.2010 14:07
Работа с классами Superlotles Общие вопросы C/C++ 6 16.06.2010 17:15
С++: работа с классами MR_Andrew Общие вопросы C/C++ 23 01.04.2010 23:46