Вопрос № 119199: Доброго времени суток! Вопрос по VBA. У меня есть 4 переменных.
Первая переменная содержит в себе год (например per1=2007)
Вторая переменная номер месяца (например per2=3, т.е. март)
Третья переменная обозначает номер недели в месяце (на...Вопрос № 119211: Здравствуйте уважаемые эксперты.
Появился у меня такой вопровик по поводу обновления полей в Office 2007. Я использую автоматическую нумерацию при вставке таблиц, рисунков и формул. Из Вордовской справки узнал, что для обновления всех полей в док...
Вопрос № 119.199
Доброго времени суток! Вопрос по VBA. У меня есть 4 переменных.
Первая переменная содержит в себе год (например per1=2007)
Вторая переменная номер месяца (например per2=3, т.е. март)
Третья переменная обозначает номер недели в месяце (например per3=2)
Четвертая переменная обозначает день недели 1-понедельник ... 7-воскресение (per4=6)
Необходимо найти значение даты по этим данным (переменная per0).
В данном примере нужно найти вторую субботу марта 2007 года.
В процедуре per0 вычисляется много раз, с разными значениями.
Не могу сообразить как это сделать. Прошу помочь.
Отвечает: Aleksandr Tim
Здравствуйте, Фоменко Сергей Владимирович! По логике обработки числовых значений предполагается, что в году 12 месяцев, вы указываете -
Вторая переменная номер месяца (например per2=3, т.е. март) -
однако по шаблону месяцев должно идти 01, 02, 03 - март, то есть значения должны быть в диапазоне 01 ... 12
- и поэтому вывод итоговой искомой переменной даёт сбой, путая месяцы и недели, хотя машина явно ищет перебором нужный вариант...
Подробнее есть в офисной Справке по VBA в разделе Переменные дат
Я так думаю. Попробуйте.
--------- Aquila non captat muscas - Орел не ловит мух
Ответ отправил: Aleksandr Tim (статус: 2-ой класс)
Ответ отправлен: 18.01.2008, 17:03 Оценка за ответ: 1 Комментарий оценки: Вы не поняли вопрос.
Отвечает: Megaloman
Здравствуйте, Фоменко Сергей Владимирович!
Ответ отправил: Megaloman (статус: Студент)
Ответ отправлен: 18.01.2008, 21:51 Оценка за ответ: 5
Отвечает: DrakoN
Здравствуйте, Фоменко Сергей Владимирович!
Я ваши per0 заменил на textbox1 и т.д.
Єта процедура писана под вижуал студией для адаптации вам необходимо верно указать откуда брать значение для переменных. А именно чтобі вместо textbox1.text передовалась строка с числом года месяца итд. смотрите приложение
Приложение:
--------- От Винта!
Ответ отправил: DrakoN (статус: Студент)
Ответ отправлен: 18.01.2008, 22:57 Оценка за ответ: 5 Комментарий оценки: Спасибо! Меня в полночь осенило. Проверил - работает.
Function per0(per1 As Integer, per2 As Integer, per3 As Integer, per4 As Integer) As Date
\' nomned - номер недели в месяце
nomned = 0
d1 = DateSerial(per1, per2, 1)
d2 = DateSerial(per1, Month(DateSerial(per1, per2, 1) + 32), 1) - 1
For i = Day(d1) To Day(d2)
per0 = DateSerial(per1, per2, i)
c1 = Weekday(per0)
If c1 = per3 Then
nomned = nomned + 1
If nomned = per4 Then GoTo 20
End If
Next i
20 End Function
Теперь вызываем функцию per0 из любого места процедуры и она возвращает ответ. per1, per2, per3, per4 определяем как глобальные переменные.
Вопрос № 119.211
Здравствуйте уважаемые эксперты.
Появился у меня такой вопровик по поводу обновления полей в Office 2007. Я использую автоматическую нумерацию при вставке таблиц, рисунков и формул. Из Вордовской справки узнал, что для обновления всех полей в документе нужно выделить весь документ и нажать F9. Это все работает. Но если поле находится в надписи, например название рисунка, то для его обновления нужно выделять каждую надпись отдельно и обновлять ее.
Суть вопроса такова. Можно ли с помощью макроса автоматизировать процесс обновления полей в надписях? К сожалению именно в VBA я не силен, но алгоритм понимаю так:
- выбрать все рисунки;
- последовательно в каждом рисунке выбирать существующие в нем надписи и обновлять их.
В работе над этим вопросом я узнал, что надписи в VBA это TextBox, но дальше не продвинулся.
Отвечает: Aleksandr Tim
Здравствуйте, Витер Александр Анатольевич! Возможно, можно написать для этого дела макрос - но зачем? У меня OfficeXP (то есть 2002), но не думаю, что в Word 2007 с обновлением полей придумали что-то особенное. Откройте в меню Сервис вкладку Настройка... и в меню Команды выберите строку Все команды, найдите в списке справа (ближе к концу) команду UpdateFields - возьмите её правой кнопкой мышки и перенесите в любую Панель кнопок - стиль Обычный, то есть без текста - и вы получите новую команду Обновить поля.
Эта команда работает после выделения всего текста (Ctrl+A или Ctrl+5, уж не знаю, как там по умолчанию в новой версии) - и вы получаете возможность обновлять прежде всего именно поля, куда были произведены вставки Как текст, ну там нумерация, названия картинок и всё такое прочее - буквально двумя кликами мышкой.
В дополнение я себе таким же образом вынес на верхнюю панель кнопку Обновить из меню Веб, - штука в том, что как оказалось для Word абсолютно без разницы, загружен html-документ со скриптами и тегами, или документ Word с кодами полей, - при условии, что в Параметрах отмечена опция Обновлять связи при открытии.
Кстати, в разделе Все команды вы сможете найти для себя еще ряд очень полезных кандидатов на кнопки или строки в выпадающие меню (сюда они вставляются таким же манером - захватом мышкой и переносом в нужное меню, не отпуская кнопку жмите на нужное меню - оно раскроется - и ставьте новую строку команды в нужное вам место).
--------- Aquila non captat muscas - Орел не ловит мух
Ответ отправил: Aleksandr Tim (статус: 2-ой класс)
Ответ отправлен: 19.01.2008, 10:45 Оценка за ответ: 3