|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
15.08.2014, 11:24 | #1 |
Пользователь
Регистрация: 07.12.2011
Сообщений: 19
|
Работа с классами
Решил написать класс. В класс передается переменная, внутри происходит магия, и в конечном итоге этот саб получает HTML документ. Но как его теперь передать в основную программу?
Пробовал объявлять публичную переменную в основной программе Код:
Код:
Как получить результат выполнения? |
15.08.2014, 12:15 | #2 |
Новичок
СтарожилДжуниор
Регистрация: 05.02.2008
Сообщений: 9,487
|
вопрос не совсем понятен.
а почему класс (представитель класса) должен знать о существовании HTML as Object даже обьявленной где-то как Public, в Вашем проекте эта переменная определена, но класс ничего о ней не знает если в модуле класса напишете Option Explicit то на строке Set HTML = IE.Document получите сообщение о неопределенной переменной не так давно мне попался хороший вопрос, используемый на собеседовании программистов: Вы привлекались когда-нибудь к уголовной ответственности за хранение данных в глобальных переменных?
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
Последний раз редактировалось IgorGO; 15.08.2014 в 12:37. |
15.08.2014, 13:31 | #3 |
Пользователь
Регистрация: 07.12.2011
Сообщений: 19
|
Option Explicit объявлен, и макрос не ругается на него.
Все выполняется, в глобальную переменную объект записывается, но как только выполнение метода класса заканчивается, переменная затирается. Я бы с радостью отказался от глобальных переменных, но в силу неопытности в данном вопросе не знаю как))) Кстати, если объявить глобальную переменную типа String до данные в нее метод записывает, и после завершения она не перетирается. Как это получается не знаю. Смысл моего класса в том что бы передать на сервер запрос с опреденными параметрами заданного юзером, и полученный документ сохранить в переменной типа Object. В этом документе есть набор параметров которые нужно извлечь, только не все сразу, а определенные в зависимости от ситуации. Мне это видится так. 1. Получаем входные данные. 2. Вызываем метод класса который загрузит страницу и запишет ее в переменную. 3. Затем вызываем другие методы класса и в качестве параметра передаем ему переменную с исходным кодом. 4. Метод его разбирает и находит данные. Для каждого параметра свой метод. Думал сделать так потому что что бы получить исходные данные приходится загружать две страницы, и это сильно влияет на скорость выполнения скрипта. Так как получив исходные данные нужно открыть страницу используя эти данные, затем на этой страницы найти уникальный дескриптор и уже используя его открыть искомую страницу. Или способ номер 2. Загрузить страницу одним методом и им же извлечь все данные и записать их в глобальную переменную типа Collection. Читал что их можно использовать в качестве ассоциативных массивов, как например в PHP и иже с ними. Как думаете, второй метод будет лучше? Наверно он будет в любом случае работать быстрее. |
15.08.2014, 14:23 | #4 |
Пользователь
Регистрация: 07.12.2011
Сообщений: 19
|
Кажется я понял свою проблему))
Мне нужно инициализировать класс и записать все данные в переменные. А потом использовать их прописав Property Get для каждого параметра. Вопрос в том как инициализировать класс в VBA что бы после инициализации переменные не уничтожались а хранились? Стандартный способ инициализации не подходит Class_Innitialize так как он не принимает параметров, а если написать свой метод то после выполнения все переменные очищаются. Или я не правильно что то делаю |
15.08.2014, 14:38 | #5 |
Пользователь
Регистрация: 07.12.2011
Сообщений: 19
|
Все!!!!!!!
Хитрожопый эксель хотел меня обдурить!!!!)))) Ничего не уничтожается после выполнения моего метода инициализации)) просто через Watch нельзя почему то посмотреть)) Прописал метод Property Get а в нем код обработки HTML документа и все сработало. Все нашлось) тему можно закрывать)) |
15.08.2014, 14:50 | #6 | |
Программист VBA
СуперМодератор
Регистрация: 13.07.2008
Сообщений: 6,858
|
Цитата:
на будущее, если что-то не получается - выкладывайте пример файла, с простеньким тестовым макросом, который должен работать, но не работает Тогда будет намного проще понять, что вы там изобретаете. |
|
15.08.2014, 14:53 | #7 | |
Пользователь
Регистрация: 07.12.2011
Сообщений: 19
|
Цитата:
В будущем буду стараться выкладывать, да простит меня служба безопасности)) |
|
15.08.2014, 15:25 | #8 |
Новичок
СтарожилДжуниор
Регистрация: 05.02.2008
Сообщений: 9,487
|
и с безопасностью можно "ужится"...
если Ваши данные очень сектретны - надо просто подготовить файл-пример, где фразу "300 кг героина" заменяете на "300 кг яблок" или еще чего, в меру Вашей фантазии и вопрос итсылаете с интернет-кафе, а не с рабочего компьютера
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
с++ работа с классами | 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 |