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

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


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

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

Выпуск № 363
от 04.09.2006, 16:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 195, Экспертов: 34
В номере:Вопросов: 4, Ответов: 12


Вопрос № 53686: Уважаемые эксперты! Пытался по разному найти информацию, но не получилось. Вопрос, в принципе, простой. Как узнать что содержится в ячейке? К примеру, в ячейке а1 содержится некая текстовая информация. Как создать условие по принципу if <...
Вопрос № 53688: Уменя есть задача в которой мне нужно выделить ячейки листа EXСEL с определенным условием(есть огромный список в котором нужно выделить определенные данные, как например выделяешь мышкой удерживая CTRL) именно так выделить у меня не получается. А VBA...
Вопрос № 53695: Уважаемые эксперты, у меня вопрос как в VBA можно обратиться к строке как к массиву. то есть например у меня набор символов str = "фыамм,ауапапююывпы....000аывп345" как мне организовать средсвами VBA вычлинение цыфр из это строки?<b...
Вопрос № 53769: Уважаемые эксперты! Хотелось бы узнать как правильно пользоваться зарезервированной дерективой Is в VB у меня есть функиция, но она не работает, как коректно записать такое выражение? Заранее благодарен!...

Вопрос № 53.686
Уважаемые эксперты!

Пытался по разному найти информацию, но не получилось. Вопрос, в принципе, простой. Как узнать что содержится в ячейке? К примеру, в ячейке а1 содержится некая текстовая информация. Как создать условие по принципу if <a1> = "test" then ...

Посоветуйте, пожалуйста, справочник по командам VBA. В котором, к примеру, написанно Cells.xxx.yyy - делает то-то и т.п.

Заранее благодарен.
Отправлен: 29.08.2006, 18:41
Вопрос задал: Vadimf (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Филатов Евгений Геннадьевич
Здравствуйте, Vadimf!

Для получения полной информации по языку VBA необходимо установить из OFFICE помощь по Basic . Тогда после запуска EXCEL выбираете СЕРВИС > МАКРОС > РЕДАКТОР Visual Basic . В нем выбираете HELP > СПРАВКА Microsoft Visual Basic и задаете свои вопросы . Наберите RANGE и получите свойства диапазона ячеек ( CELLS является подтипом RANGE ) .

Для ознакомления с командами можно воспользоваться макросами :
выбираете СЕРВИС > МАКРОС > Начать запись
Делаете необходимые действия, которые Вам нужно обрабатывать в программе , затем
выбираете СЕРВИС > МАКРОС > Остановить запись
выбираете СЕРВИС > МАКРОС > МАКРОСЫ > находите свой макрос > Изменить
и смотрите команды для обработки .

Конкретно по Вашему вопросу можно предложить :
if cells ( "A1" ) . Value = "test" then

Но это сработает для текстовых ячеек и ячеек общего вида с текстовым содержимым . Для того , чтобы узнать тип формата ячейки , можно воспользоваться свойством NumberFormat , который возвращает или устанавливает формат ячейки .

Range ( "A1" ) . NumberFormat = "General" 'Основной
Range ( "A2" ) . NumberFormat = "0.00" 'Числовой два знака после нуля
Range ( "A3" ) . NumberFormat = "m/d/yyyy" 'Дата
Range ( "A4" ) . NumberFormat = "@" 'Текст

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

Описать все свойства для работы с ячейкой проблематично, их около сотни. Задавайте конкретные вопросы, что Вы хотите делать и получите решение.

С уважением.
Ответ отправил: Филатов Евгений Геннадьевич (статус: 5-ый класс)
Ответ отправлен: 29.08.2006, 19:41

Отвечает: Кокорич Вадим Леонидович
Здравствуйте, Vadimf!

1) Приведу пример макроса, проверяющего при активации Листа3, содержит ли его ячейка А1
значение "Вася Пупкин":

В проводнике объектов проекта выберите Лист3 (дважды кликните на нем). Справа в окне кода
в событии Private Sub Worksheet_Activate() введите

Dim V
V = Range("A1").Value
If V = "Вася Пупкин" Then
MsgBox ("OK, Вася!")
Else
MsgBox ("Текущее значение ячейки А1 -" & " " & V)
End If

При активации Листа3 у Вас должно выскочить сообщение (одно из этих двух).
Надеюсь, пример поможет Вам.

2) Я пользуюсь книгой А. Гарнаева "Самоучитель VBA: технология создания пользовательских приложений" издательства "БХВ-Петербург" 2002 года. Книга просто замечательная, на мой взгляд. Материал излагается доступно и последовательно, с большим количеством примеров. Рекомендую !
---------
Труд сделал обезьяну человеком, а лень человека - программистом !
Ответ отправил: Кокорич Вадим Леонидович (статус: 5-ый класс)
Ответ отправлен: 29.08.2006, 19:54


Вопрос № 53.688
Уменя есть задача в которой мне нужно выделить ячейки листа EXСEL с определенным условием(есть огромный список в котором нужно выделить определенные данные, как например выделяешь мышкой удерживая CTRL) именно так выделить у меня не получается. А VBA для меня незнаком...
Если возможно бросьте фрагмент кода, или подскажите где подсмотреть.
Заранее спасибо.
Отправлен: 29.08.2006, 18:55
Вопрос задал: Andrey_ (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 2)

Отвечает: din
Здравствуйте, Andrey_!
Вот пример:
Range("A1:A100").Select - Выделит ячейки с 1 по 100 столбца А
Selection.Copy - устанавливаем выделение для копирования
Range("B1").Select - выделяем другую ячейку начиная с которой нужно сделать вставку
ActiveSheet.Paste - вставляем данные
Application.CutCopyMode = False - снимаем выделение для копирование
Удачи!

Приложение:

---------
Есть только одно зло - невежество, и только одно благо - знания

Ответ отправил: din (статус: Студент)
Ответ отправлен: 29.08.2006, 19:09

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

Посмотрите и попробуйте код в приложении.

Процедура выделяет все ячейки на листе, отвечающие вводимому в диалоге критерию.

Опробовано только для числовых значений на листе.

Приложение:

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

Ответ отправил: Genyaa (статус: 7-ой класс)
Ответ отправлен: 30.08.2006, 15:05


Вопрос № 53.695
Уважаемые эксперты, у меня вопрос как в VBA можно обратиться к строке как к массиву. то есть например
у меня набор символов str = "фыамм,ауапапююывпы....000аывп345"
как мне организовать средсвами VBA вычлинение цыфр из это строки?

заранее благодарен
Отправлен: 29.08.2006, 19:35
Вопрос задал: Blajimir (статус: Посетитель)
Всего ответов: 6
Мини-форум вопроса >>> (сообщений: 3)

Отвечает: C4tnt
Здравствуйте, Blajimir!

Такого счастья как в C++ конечно нет, но есть функция instr, которая выбирает подстроку

Используйте так X = mid(CTPOKA,n,1) - в Х будет символ с номером n (отсчёт с 1)

Количество символов - len(CTPOKA)

Для ускорения можно использовать instr(from,where,what)
from - номер символа, с которого начинаем поиск
where - строка в которой ищем
what - искомая подстрока

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

---------
Теперь к нашим ответам осталось лишь найти вопросы
Ответ отправил: C4tnt (статус: 2-ой класс)
Ответ отправлен: 29.08.2006, 19:45

Отвечает: Филатов Евгений Геннадьевич
Здравствуйте, Blajimir!

Например так , как в приложении. В строку цифр не попадут разделители целой и дробной части, т.е. только цифры от 0 до 9 .
Результат будет строковым выражением.

С уважением.

Приложение:

Ответ отправил: Филатов Евгений Геннадьевич (статус: 5-ый класс)
Ответ отправлен: 29.08.2006, 20:06

Отвечает: din
Здравствуйте, Blajimir!
В приложении код, не самый изящный но работает.
Удачи!

Приложение:

---------
Есть только одно зло - невежество, и только одно благо - знания

Ответ отправил: din (статус: Студент)
Ответ отправлен: 29.08.2006, 20:14

Отвечает: Tossha
Здравствуйте, Blajimir!
После приведённого ниже цикла:
str=""
str1="<цифры из бывшего str>"
Суть проста: берём 1 символ слева строки, сравниваем его ascii код с 0 и 9-кой и если он между ними(то есть мы имеем дело с цифрой), то записываем его в str1, и потом удаляем его.

Приложение:

Ответ отправил: Tossha (статус: 1-ый класс)
Ответ отправлен: 29.08.2006, 20:46

Отвечает: Bonapart
Здравствуйте, Blajimir!
это очень просто
с помощью функций

mid
left
rigth
Ответ отправил: Bonapart (статус: 1-ый класс)
Ответ отправлен: 30.08.2006, 09:31

Отвечает: Fsl
Здравствуйте, Blajimir!
Для этого выдергиваем по одному символу из строки, сравниваем с кодом таблицы ASCII.

dim a as string
txt = "фыамм,ауапапююывпы....000аывп345"
for i=0 to len(txt)
if asc(mid(txt,i,1))<48 or asc(mid(txt,i,1)>57 then txt1=txt1 & mid(txt,i,1)
next
---------
В Интернете всегда есть место подвигу ... даже в чатах
Ответ отправил: Fsl (статус: 2-ой класс)
Ответ отправлен: 30.08.2006, 09:31


Вопрос № 53.769
Уважаемые эксперты! Хотелось бы узнать как правильно пользоваться зарезервированной дерективой Is в VB

у меня есть функиция, но она не работает, как коректно записать такое выражение?

Заранее благодарен!

Приложение:

Отправлен: 30.08.2006, 14:05
Вопрос задал: Blajimir (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 2)

Отвечает: Fsl
Здравствуйте, Blajimir!
Директиву Is можно использовать, в частности, в качестве переменной в операторе выбора Select.
Например:

Select Case Button.Key
Case Is = "open" ' Open file.
'следует код
Case Is = "save" ' Save file.
'следует код
Case Else
'следует код
End Select
---------
В Интернете всегда есть место подвигу ... даже в чатах
Ответ отправил: Fsl (статус: 2-ой класс)
Ответ отправлен: 30.08.2006, 14:28

Отвечает: Филатов Евгений Геннадьевич
Здравствуйте, Blajimir!

Оператор IS используется для сравнения двух переменных , содержащих ссылки на объекты . Применяется как объект1 IS объект2 . Результатом операции будет TRUE / FALSE . Если переменные объект1 и объект2 содержат ссылки на один объект, результат имеет значение True , в противном случае результат имеет значение False . Ссылка на объекты осуществляется оператором SET :
Set A = D

В вашем примере для определения цифр можно воспользоваться кодом :
Option Base 1 ' установить используемую по умолчанию нижнюю границу индексов , равную 1
For i = 1 To Len ( str )
if mid ( str , i , 1 ) > = "0" and mid ( str , i , 1 ) < = "9" then
n = n & Mid ( str , i , 1 )
End If
NEXT

Посмотри ответы на вопрос 53695, в том числе и мой.

С уважением.
Ответ отправил: Филатов Евгений Геннадьевич (статус: 5-ый класс)
Ответ отправлен: 30.08.2006, 14:36


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

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

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

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

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


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


© 2001-2006, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Версия системы: 4.35 от 27.07.2006
Яндекс Rambler's Top100

В избранное