Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на Basic / VBA


Новое направление Портала RusFAQ.ru:
MosHoster.ru - Профессиональный хостинг

РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Basic/VBA

Выпуск № 692
от 17.01.2008, 13:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 262, Экспертов: 43
В номере:Вопросов: 5, Ответов: 14

Нам важно Ваше мнение об этой рассылке.
Оценить этот выпуск рассылки >>


Вопрос № 118044: Добрый вечер, уважаемые эксперты. Вопрос по VBA Exel. Есть ли возможность проверки в реальном времени даты и/или времени? То есть грубо говоря когда время или дата, достигает определенного значение, начинает выполняться какое ...
Вопрос № 118049: Для управления гипертерминалом (hyperterminal) из экселевской базы при помощи VBA (оттуда берутся данные для посылки команд) я использую функцию sendkeys. Для запуска терминала использую команду ht = Shell("C:\Program Files\Windows NT\hypertr...
Вопрос № 118050: Здравствуйте, помогите определить ошибку. Программа должна именовать выбранный нами диапазон и по этому диапазону искать количесвто значений > 100....
Вопрос № 118065: Доброй ночи, уважаемые эксперты. vba Excel. Вопрос такой. При компилирование, выдается ошибка, что Next i не может быть без For i. В чем ошибка кода? ...
Вопрос № 118100: Плиз помогите чайнику. Столкнулся с проблемой, при попітке копирования директории с помощью FileCopy, VB выдает что не находит путь к исходной директории, как быть. Пример ниже....

Вопрос № 118.044
Добрый вечер, уважаемые эксперты.

Вопрос по VBA Exel.

Есть ли возможность проверки в реальном времени даты и/или времени?
То есть грубо говоря когда время или дата, достигает определенного значение, начинает выполняться какое либо условие.

Имея ввиду "реальное" время, я говорю об автономных изменениях. Не имею виду макрос. Не нажатие кнопки и выполнения операции сравнивания времение и условного оператора.
Отправлен: 11.01.2008, 21:48
Вопрос задал: yazzer (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Genyaa
Здравствуйте, yazzer!

В Excel есть метод OnTime. Он позволяет запустить заданную процедуру (макрос) в назначенное системное время компьютера. Если Excel до этого момента продолжал работать после использования метода OnTime, то макрос будет запущен. Думаю именно это Вам нужно. Читайте справку VBA по использованию этого метода. В приложении простейший пример.

Приложение:

---------
Всякое решение плодит новые проблемы.

Ответ отправил: Genyaa (статус: Студент)
Ответ отправлен: 11.01.2008, 23:00
Оценка за ответ: 5
Комментарий оценки:
Да именно что то подобное я и искал.. буду пробовать. Спасибо огромное!

Отвечает: Черников Игорь Владимирович
Здравствуйте, yazzer!
я так понял, что вы хотите реализовать задачу не с помощью макроса, а с помощью простых формул на листе экселя, тогда это будет выглядеть примерно так:
впишите в ячейку A1 дату, а в A2 вот это:
=ЕСЛИ(A1<СЕГОДНЯ();"Меньше";"Больше")
---------
От каждого по способностям, каждому по труду
Ответ отправил: Черников Игорь Владимирович (статус: 10-ый класс)
Ответ отправлен: 12.01.2008, 16:56

Отвечает: HookEst
Здравствуйте, yazzer!
Так и используйте "планировщик". Нет необходимости, чтобы был запущен Excel.
Создайте скрипт, например в VBScript который и создает нужный файл, и добавьте его в задание на нужное время.
Успехов.

Приложение:

Ответ отправил: HookEst (статус: Студент)
Ответ отправлен: 14.01.2008, 08:37


Вопрос № 118.049
Для управления гипертерминалом (hyperterminal) из экселевской базы при помощи VBA (оттуда берутся данные для посылки команд) я использую функцию sendkeys. Для запуска терминала использую команду ht = Shell("C:\Program Files\Windows NT\hypertrm.exe c:\sw.ht", vbNormalNoFocus) и далее при необходимости активации окна терминала AppActivate ht (где переменная ht имеет собственно PID процесса гипертерминала). Проблема заключается в том, чтобы обратно активировать Excel. При помощи той же команды AppActivate это легко делается, но для этого нужен PID экселя... Вручную это достать легко при помощи диспетчера задач, а вот как достать PID экселя программно с помощью средств VBA чтобы потом его можно было подставлять в команду AppActivate?
Отправлен: 11.01.2008, 22:25
Вопрос задал: Vadya_me (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 2)

Отвечает: Genyaa
Здравствуйте, Vadya_me!

Почему бы не сделать активным объект самого Excel?

AppActivate Application

См. код в приложении. Он у меня сработал.

Приложение:

---------
Всякое решение плодит новые проблемы.

Ответ отправил: Genyaa (статус: Студент)
Ответ отправлен: 11.01.2008, 22:51
Оценка за ответ: 5
Комментарий оценки:
Супер! Правда там ещё у меня в программе пара глючков есть, но этим я уже сам завтра займусь :) Обидно, что нет хорошего хелпа по VBA и найти нужные аргументы очень сложно. В 97 версии всё было гораздо лучше!

Отвечает: Ualife
Здравствуйте, Vadya_me!
GetCurrentProcessId, GetProcessId GetWindowThreadProcessId- нужные вам API-функции.
http://www.vbstreets.ru/VB/Articles/66404.aspx - работа с описателями. Возможно понадобится.
Удачи
---------
Нет границ - есть лишь препятствия!
Ответ отправил: Ualife (статус: 5-ый класс)
Ответ отправлен: 11.01.2008, 23:33
Оценка за ответ: 3
Комментарий оценки:
Спасибо за ответ, но сделать AppActivate Application (так мне предложил другой гуру) по-моему более просто и грамотнее. Обидно, что у меня кроме PID там ничего компилятор не ел...

Отвечает: HookEst
Здравствуйте, Vadya_me!
Аргументы AppActivate:
AppActivate title[, wait]

первым аргументом, вообще-то, может быть и заголовок окна и PID
когда мы пишем
AppActivate Application
то по сути, используется не "объект самого Excel" а заголовок окна Excel.
будет работать также и:
AppActivate "Microsoft Excel"

неправильное поведение возможно, только если открыто несколько приложений Excel(т.е. с одинаковым заголовком), и то если фокус переключался на другой Excel, решайте сами, пугает это вас или нет.
а из API достаточно только:
Public Declare Function GetCurrentProcessId Lib "kernel32" () As Long
тогда:
...
AppActivate GetCurrentProcessId
....
активирует то, что нужно.

ИМХО, "Грамотнее" решение будет, то какое Вы сами выберете, с API или без, и то и то, вполне приемлемо.
Успехов.
Ответ отправил: HookEst (статус: Студент)
Ответ отправлен: 14.01.2008, 09:21


Вопрос № 118.050
Здравствуйте, помогите определить ошибку. Программа должна именовать выбранный нами диапазон и по этому диапазону искать количесвто значений > 100.

Приложение:

Отправлен: 11.01.2008, 22:28
Вопрос задал: Irkutskiy Konstantin (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 5)

Отвечает: Genyaa
Здравствуйте, Irkutskiy Konstantin!

См. приложение.

Приложение:

---------
Всякое решение плодит новые проблемы.

Ответ отправил: Genyaa (статус: Студент)
Ответ отправлен: 11.01.2008, 22:42
Оценка за ответ: 3
Комментарий оценки:
Пример интересен, суть работы понятная, но почему то выскакивает ошибка, не определен тип "WorkSheetFunctions", может нужно какую то билиотеку подключить мне. Но задание было в другом, подсчитать количество ячеек у которых значение > 100.


Вопрос № 118.065
Доброй ночи, уважаемые эксперты.
vba Excel.

Вопрос такой. При компилирование, выдается ошибка, что Next i не может быть без For i.

В чем ошибка кода?

Приложение:

Отправлен: 12.01.2008, 00:56
Вопрос задал: yazzer (статус: Посетитель)
Всего ответов: 5
Мини-форум вопроса >>> (сообщений: 2)

Отвечает: Krasme
Здравствуйте, yazzer!
у Вас три условия If, следовательно, должно три окончания End if.

фрагмент Вашего текста с дополнением
...
Worksheets("1").Cells(3, 8 + i) = Worksheets("2").Cells(4, 9 + i)
Worksheets("1").Cells(5, 8 + i) = Worksheets("2").Cells(7, 9 + i)
End If
End If 'добавить это окончание условия if
Next i
Ответ отправила: Krasme (статус: 3-ий класс)
Ответ отправлен: 12.01.2008, 01:11

Отвечает: heap11
Здравствуйте, yazzer!

Не хватает одного "End If"
Ответ отправил: heap11 (статус: 5-ый класс)
Ответ отправлен: 12.01.2008, 01:52

Отвечает: Ualife
!!!
Здравствуйте, yazzer!
В коде у вас 3 сравнения типа IF. Все они должны кончаться на END IF. "END IF" - только два. Исправьте эту ошибку

Ответ повторный.
-----
∙ Отредактировал: Климова Марина Александровна (*Мастер-Эксперт)
∙ Дата редактирования: 12.01.2008, 17:48

---------
Нет границ - есть лишь препятствия!
Ответ отправил: Ualife (статус: 5-ый класс)
Ответ отправлен: 12.01.2008, 11:08

Отвечает: Romnet
!!!
Здравствуйте, yazzer!
В Вашем коде 3 оператора условия If, но только 2 завершающих End if, добавьте 3ий.

Ответ повторный.
-----
∙ Отредактировал: Климова Марина Александровна (*Мастер-Эксперт)
∙ Дата редактирования: 12.01.2008, 17:48

---------
Всегда фпиред! =)
Ответ отправил: Romnet (статус: 7-ой класс)
Ответ отправлен: 12.01.2008, 16:16

Отвечает: Черников Игорь Владимирович
!!!
Здравствуйте, yazzer!
Перед Next i поставьте ещё один End If

Ответ повторный.
-----
∙ Отредактировал: Климова Марина Александровна (*Мастер-Эксперт)
∙ Дата редактирования: 12.01.2008, 17:49

---------
От каждого по способностям, каждому по труду
Ответ отправил: Черников Игорь Владимирович (статус: 10-ый класс)
Ответ отправлен: 12.01.2008, 17:35


Вопрос № 118.100
Плиз помогите чайнику. Столкнулся с проблемой, при попітке копирования директории с помощью FileCopy, VB выдает что не находит путь к исходной директории, как быть.
Пример ниже.

Приложение:

Отправлен: 12.01.2008, 12:00
Вопрос задал: Sjerj (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 9)

Отвечает: PsySex
Здравствуйте, Sjerj!
FileCopy - это команда копирования файла.
Чтоб копировать папки в VB нет прямых команд.
Используйте для этого FSO, как использовать читайте ссылку в приложении.
Перед использованием FSO не забудьте подключить scrrun.dll в меню VB Project->References.

Приложение:

---------
Bom Shankar!

Ответ отправил: PsySex (статус: Практикант)
Ответ отправлен: 12.01.2008, 12:17
Оценка за ответ: 5
Комментарий оценки:
Спасибо полный и исчерпывающий ответ, очень помог.

Отвечает: Черников Игорь Владимирович
Здравствуйте, Sjerj!
Я создал на диске С: файл с именем 1 и папку с именем kav, скопировал Ваш пример и вставил в VBA . всё сработало без единой ошибки. В папке появился файл 2.txt . Ошибка может произойти, если файл 1 открыт какой-нибудь программой в монопольном режиме, либо программно меняется метка тома С: или имя папки kav. А может у Вас нет прав доступа или изменений этой папки или тома.
---------
От каждого по способностям, каждому по труду
Ответ отправил: Черников Игорь Владимирович (статус: 10-ый класс)
Ответ отправлен: 12.01.2008, 17:44
Оценка за ответ: 3
Комментарий оценки:
смотри ответ PsySex-a


Вы имеете возможность оценить этот выпуск рассылки.
Нам очень важно Ваше мнение!
Оценить этот выпуск рассылки >>

Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2007, Портал RusFAQ.ru, Россия, Москва.
Авторское право: ООО "Мастер-Эксперт Про"
Техподдержка портала, тел.: +7 (926) 535-23-31
Хостинг: "Московский хостер"
Поддержка: "Московский дизайнер"
Авторские права | Реклама на портале
Версия системы: 4.70 от 16.01.2008
Яндекс Rambler's Top100
RusFAQ.ru | MosHoster.ru | MosDesigner.ru | RusIRC.ru
Kalashnikoff.ru | RadioLeader.ru | RusFUCK.ru

В избранное