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

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


Хостинг портала RFpro.ru:
Московский хостер
Профессиональный ХОСТИНГ на базе Linux x64 и Windows x64

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

Лучшие эксперты по данной тематике

Асмик Гаряка
Статус: Советник
Рейтинг: 11019
∙ повысить рейтинг »
Роман Селиверстов
Статус: Советник
Рейтинг: 5356
∙ повысить рейтинг »
Гуревич Александр Львович
Статус: Профессионал
Рейтинг: 4412
∙ повысить рейтинг »

/ КОМПЬЮТЕРЫ И СОФТ / Программирование / Basic/VBA

Номер выпуска:1085
Дата выхода:05.03.2013, 09:30
Администратор рассылки:Андреенков Владимир (Профессор)
Подписчиков / экспертов:80 / 41
Вопросов / ответов:3 / 10

Консультация # 172272: Уважаемые эксперты подскажите, пожалуйста, в следующем: изначально перед запуском макроса был выделен текст, затем макрос с ним производил разные операции, каким образом в Ворде при помощи ВБА организовать выделение текста по окончании макроса. Пробовал изначально текст сделать закладкой, текст сделать объектом, потом выделить, бывает не коррек...


Консультация # 40158: Здрасьте, Вопрос по MS ACCESS Помогите плиз Есть таблица: FIO, Data, Time, Action поле Action содержит либо "Вход" либо "Выход", соответственно дата и время - это либо время и дата входа/выхода скажите как определить список людей которые сейчас находяться в здании...
Консультация # 54339: Здравствуйте! Очередная проблемма! Как сделать окно модальным в Microsoft Visual Basic 6.0 Private Sub Command2_Click() Program.Show End Sub...

Консультация # 172272:

Уважаемые эксперты подскажите, пожалуйста, в следующем: изначально перед запуском макроса был выделен текст, затем макрос с ним производил разные операции, каким образом в Ворде при помощи ВБА организовать выделение текста по окончании макроса.
Пробовал изначально текст сделать закладкой, текст сделать объектом, потом выделить, бывает не корректное выделение.
Спасибо Эндрю


Дата отправки: 17.09.2009, 15:46
Вопрос задал: Ципихович Эндрю (Посетитель)
Всего ответов: 1
Страница онлайн-консультации »


Консультирует Витер Александр Анатольевич:

Здравствуйте, Ципихович Эндрю.
Запоминание положение начала и конца текста выделенного текста не имеет смысла, потому что макрос изменяет содержимое документа, а значит, и положение текста в документе тоже может измениться. Поэтому нужно создавать закладку для выделенного текста, а потом, по окончании работы макроса, эту закладку удалять.

Код :
Sub RestoreSelectionAfterMacros()
  Dim oBm As Bookmark 'Переменная для закладки
  'Добавляем закладку в документ на место выделенного текста. Имя у закладки может быть любое
  Set oBm = ActiveDocument.Bookmarks.Add("SelectedText", Selection.Range)
  'Дальше делайте с текстом все, что угодно


  'Восстанавливаем выделенный текст
  oBm.Range.Select
  'Удаляем закладку
  oBm.Delete
End Sub

Консультировал: Витер Александр Анатольевич
Дата отправки: 19.09.2009, 04:06
Рейтинг ответа:

НЕ одобряю 0 одобряю!

Консультация # 40158:

Здрасьте,

Вопрос по MS ACCESS

Помогите плиз
Есть таблица:
FIO, Data, Time, Action

поле Action содержит либо "Вход" либо "Выход", соответственно дата и время - это либо время и дата входа/выхода

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

Дата отправки: 13.04.2006, 07:12
Вопрос задал: Гришин Денис Васильевич
Всего ответов: 4
Страница онлайн-консультации »


Консультирует EPDSota:

Здравствуйте, Гришин Денис Васильевич!

Я так думаю - если человек не вышел - то число его проходов (вход-выход) должно быть четным. Поэтому придеться в таблице быть аккуратным с регистрацией входов выходов.
SQL запрос при этом будет выглядеть:

SELECT FIO
FROM (SELECT FIO, COUNT(*) as prohod FROM твоя_таблица GROUP BY FIO)
WHERE int(prohod/2)*2<>prohod;

Если после данной даты:

SELECT FIO
FROM (SELECT FIO, COUNT(*) as prohod FROM TBL where data>1.1.1 GROUP BY fio)
WHERE int(prohod/2)*2<>prohod;

И дальше добавляй что нужно - копай в ту сторону...

Консультировал: EPDSota
Дата отправки: 13.04.2006, 10:11
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Консультирует Genyaa:

Здравствуйте, Гришин Денис Васильевич!

Можно сделать простой запрос с групповой операцией по FIO и посчетом суммы по Входы/Выходы, преобразуя Вход в 1, а Выход в -1. Все результаты >0 дадут список людей в здании, если регистрация в базе начиналась с момента, когда в здании точно никого не было.

Приложение:

Консультировал: Genyaa
Дата отправки: 13.04.2006, 10:20
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Консультирует Филатов Евгений Геннадьевич (Профессионал):

Здравствуйте, Гришин Денис Васильевич!

Пример пишу для DAO, для ADO будет выглядеть немного по другому.

Таблицу лучше разбить на две:
таблица Sotrudnik
Kod тип поля Long
Fam тип поля String(30) not null значение по умолчанию "" (пустая строка)
Im тип поля String(12) not null значение по умолчанию "" (пустая строка)
Ot тип поля String(15) not null значение по умолчанию "" (пустая строка)
Программно присваивать новому сотруднику значение поля Kod большее на 1 максимального существующего значения в таблице, например

set rec1 = DBF.OpenRecordset "Select max(Kod) as ma from Sotrudnik", dbopendynaset
If rec1.Recordcount>0 Then
if not isnull(rec1!ma) then
if not isempty(rec1!ma) then
maxcount =rec1!ma
else
maxcount =0
endif
else
maxcount =0
endif
else
maxcount =0
endif

где DBF переменная типа Database, настроенная на эту же базу, a rec1 переменная типа Recordset

Т.к. мы определили максимальный существующий номер в таблице, у новой записи он больше на 1 (для пустой таблицы максимальный номер равен 0)

maxcount = maxcount + 1
DBF.Execute "Insert Sotrudnik (Kod,Fam,Im,Ot) values (\'" & F1 & "\',\'" & I1 & "\',\'" & O1 & "\')"

где F1, I1, O1 - соответственно фамилия, имя и отчество нового сотрудника, в запросе значения текстовых полей берутся в одинарные кавычки.

Таблица Action
Kod тип поля Long \'код сотрудника из предыдущей таблицы
Action тип поля Byte \'1 - вошел, 2 - вышел в принципе можно и boolean
Data тип поля Datatime \'(полный формат даты в виде 19.06.94 17:34:23)

В программе необходимо предусмотреть, чтобы новая запись вносилась с определенными условиями:
1. Дата и время не могут быть меньше максимального значения этого поля для конкретного человека в базе.
2. Вид нового действия должен быть противоположным тому, которое имеется у записи с максимальным значением поля Data.

Если известен Kod сотрудника (можно заполнить значениями таблицы Sotrudnik какой-либо ListBox для выбора из списка), то определить текущее состояние сотрудника можно с помощью запроса:
Set rec1 = DBF.OpenRecordset "Select * from Action Where Kod=" & Код_сотрудника & " Order by Data DESC", dbopendynaset
Вернется список записей для заданного сотрудника, причем первой записью будет идти его последнее действие

Для вывода списка сотрудников с текущим состоянием выполнить запрос:
Set rec1 = DBF.OpenRecordset "SELECT s.*,(select top 1 a.data from Action a where a.kod=s.kod order by a.data desc) as ddd,(select top 1 a.action from Action a where a.kod=s.kod order by a.data desc) as aaa FROM Sotrudnik s", dbopendynaset
Вернется список, состоящий из ФИО, даты последнего действия (поле ddd) и его вида (поле aaa), т.е. если вернулось ddd= 12.04.06 17:00:00, aaa=2, то сотрудник покинул предприятие в пять часов вечера 12 апреля 2006 года. Следующей записью для этого сотрудника может быть только с признаком 1 (пришел) и датой более указанной ранее, например:

DBF.Execute "Insert Action (Kod,Data,Action) values (" & K1 & ",cdate(\'" & Now & "\'),1)"

где K1 - код сотрудника, Now - стандартная функция, которая возвращает текущую дату и время.

Чтобы определить, кто находится в здании (текущее состояние действия равно 1), выполнить запрос:
Set rec1 = DBF.OpenRecordset "SELECT * FROM Sotrudnik AS s INNER JOIN Action AS a ON a.kod=s.kod WHERE a.data=(select max(a1.data) from action a1 where a1.kod=s.kod) and a.action=1", dbopendynaset

Те сотрудники, у которых нет ни одной записи в таблице Action, выводиться в списки не будут.

Консультировал: Филатов Евгений Геннадьевич (Профессионал)
Дата отправки: 13.04.2006, 19:09
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Консультирует Залетин Виталий Викторович:

Здравствуйте, Гришин Денис Васильевич!
Попробуйте выполнить запрос:

SELECT FIO, DATA, TIME FROM table_name WHERE ACTION LIKE \'%Вход%\'

Консультировал: Залетин Виталий Викторович
Дата отправки: 15.04.2006, 13:14
Рейтинг ответа:

НЕ одобряю 0 одобряю!

Консультация # 54339:

Здравствуйте! Очередная проблемма! Как сделать окно модальным в Microsoft Visual Basic 6.0

Private Sub Command2_Click()
Program.Show
End Sub

Дата отправки: 04.09.2006, 23:06
Вопрос задал: ataman
Всего ответов: 5
Страница онлайн-консультации »


Консультирует Евгений Неверов:

Здравствуйте, ataman!
Очень просто: в команду Show добавьте слово vbModal, вот как в приложении:

Приложение:

Консультировал: Евгений Неверов
Дата отправки: 05.09.2006, 00:08
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Консультирует Александр Шевченко (Студент):

Здравствуйте, ataman!
В дополнение к ответу Евгения Неверова:
[имя_формы].Show vbModal, Me
Ключевое слово Me сдесь указывает, что родителем модальной формы будет являться текущая форма. Также вместо Ме можно указать любую из форм вашего проекта.

Консультировал: Александр Шевченко (Студент)
Дата отправки: 05.09.2006, 09:11
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Консультирует Кокорич Вадим Леонидович:

Здравствуйте, ataman!

Не оспаривая верности и полноты предыдущих ответов, предлагаю этот как пример еще одного решения:

Program.Show, 1

По умолчанию VB создает форму немодальной (0). Объявление "Program.Show" предполагает установку по умолчанию нуля, который опускается. Единицу же ставить обязательно, если форма должна быть модальной.

Консультировал: Кокорич Вадим Леонидович
Дата отправки: 05.09.2006, 09:23
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Консультирует Митрофанов Артем Борисович:

Здравствуйте, ataman!
После кода Program.Show добавьте 0(Program.Show 0). Есть еще другой уровень модальности(1), но лично его не использую. Удачи!

Консультировал: Митрофанов Артем Борисович
Дата отправки: 05.09.2006, 17:07
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Консультирует Залетин Виталий Викторович (мь:

Здравствуйте, ataman!
Form1.Show vbmodal
Form1.Show vbmodal, Form0
Form1.Show vbmodeless - этот вариант держит Вашу форму всегда наверху, но и позволяет работать с той, что под ней.

Консультировал: Залетин Виталий Викторович (мь
Дата отправки: 09.09.2006, 14:50
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Оценить выпуск | Задать вопрос экспертам

главная страница  |  стать участником  |  получить консультацию
техническая поддержка  |  восстановить логин/пароль

Дорогой читатель!
Команда портала RFPRO.RU благодарит Вас за то, что Вы пользуетесь нашими услугами. Вы только что прочли очередной выпуск рассылки. Мы старались. Пожалуйста, оцените его. Если совет помог Вам, если Вам понравился ответ, Вы можете поблагодарить автора - для этого в каждом ответе есть специальные ссылки. Вы можете оставить отзыв о работе портале. Нам очень важно знать Ваше мнение. Вы можете поближе познакомиться с жизнью портала, посетив наш форум, почитав журнал, который издают наши эксперты. Если у Вас есть желание помочь людям, поделиться своими знаниями, Вы можете зарегистрироваться экспертом. Заходите - у нас интересно!
МЫ РАБОТАЕМ ДЛЯ ВАС!



В избранное