Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » VBA for Access

Модерирует : ShIvADeSt

ShIvADeSt (14-09-2011 00:58): Все обсуждение тут http://forum.ru-board.com/topic.cgi?forum=33&topic=0357&start=1180  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25

   

KashRus_VLZ



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подскажите пожалуйста, как в MS Access 2003 из самой формы проверить открыта ли она как одиночная либо как подчиненная форма другой формы?  
Есть версия с обработкой ошибки при отсутствии объекта в свойстве Parent формы, но пока не удалось сделать корректной реализации.  
Или может быть есть более элегантное решение?..
Спасибо.

Всего записей: 30 | Зарегистр. 01-12-2006 | Отправлено: 10:58 05-04-2010
georgbird



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Доброго времени суток
  Столкнулся с проблемой открытия произвольного файла/папки из ACCESS, функция FileDialog возвращает только имя файла. Насколько я понял, необходимо использовать WinApi. Все схожие решения, найденные в интернете, либо не работали, либо имеют нагроможденную структуру, недоступную для понимания и редактирования.
 Решил использовать API функцию ShellExucute, из библиотеки Shell32.dll
 

Код:
 
Declare Function ShellExucute _
Lib "shell32.dll" Alias "ShellExecuteA" _
(ByVal hWnd As Long, ByVal Operaor As String, ByVal FileName As String, ByVal Pam As String, ByVal Directory As String, ByVal ShowCmd As Integer) As Long
 

 
 Функция может открыть фаил или папку FileName из директории Directory,  
Operaor = "open"/"print"/"explore" (отрыть/распечатать FileName/ открыть папку FileName). hWnd - указатель на родительское приложение (hWnd = Application.hWndAccessApp), ShowCmd - режим открытия файла (ShowCmd = SW_SHOWNORMAL)
 
вообщем осталось написать рабочий код запуска этой функции, ибо у меня, в силу отсутсвия опыта этого не получается
 
Либо у кого-нибудь есть альтернативные варианты решения этой задачи.
Заранее благодарен.
 
P.S. Access 2007, Os Vista Ultimate

Всего записей: 230 | Зарегистр. 05-12-2006 | Отправлено: 11:36 11-04-2010 | Исправлено: georgbird, 11:41 11-04-2010
dneprcomp



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
georgbird
 
'vrtSelectedItem is a String that contains the path of each selected item.
 
http://msdn.microsoft.com/en-us/library/aa432348.aspx
http://www.mvps.org/access/api/api0001.htm
http://p2p.wrox.com/access-vba/32297-openfiledialog-using-vba.html

Всего записей: 3920 | Зарегистр. 31-03-2002 | Отправлено: 21:38 11-04-2010 | Исправлено: dneprcomp, 21:41 11-04-2010
georgbird



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
dneprcomp
Спасибо, буду разбираться

Всего записей: 230 | Зарегистр. 05-12-2006 | Отправлено: 00:28 12-04-2010
Oyger

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Всем доброго дня и с наступающими праздниками!
Несмотря на предпраздничное, выходное настроение и укароченный рабочий день хочу Вас озадачить вот каким вопросом:
 
Что надо сделать:  
Есть форма. При нажании кнопки начинает работать макрос.
В середине макроса должна открыться вторая форма и управление должно передаться на нее. После выбора на второй форме нужных пользователю переключателей и начатии кнопки "Ок", форма должна закрыться и макрос, прерванный от первой формы, должен продолжить работать.
 
А что меня получается:
Я жму кнопкуна первой форме. Макрос работает. В середине макроса он натыкается на команду DoCmd.OpenForm "...". Начинает грузиться вторая форма. Посре отработки Form_Loan второй формы, макрос в первой продолжает свою работу. А вторая форма тупо висит на экране...
 
Вид модуля первой формы, примерно, следующий:
 
'Сдесь идет модуль
For q=1 to N
   DoCmd.OpenForm "..." 'Должна открыться вторая форма и управление должно передаться на нее. Макрос первой формы должен прерваться. И подождать, пока пользователь не закроет вторую форму кнопкой "Ок"
Next
'Сдесь продолжается модуль
 
Как-нибудь можно решить задачу? Кто идеи или команды дельные подскажет?
 
Спасибо.

Всего записей: 122 | Зарегистр. 22-03-2007 | Отправлено: 15:24 30-04-2010
dneprcomp



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Oyger
Попробуй открывать модальнo

Всего записей: 3920 | Зарегистр. 31-03-2002 | Отправлено: 17:31 30-04-2010
Oyger

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
dneprcomp
Спасибо.
Что такое модальная форма - я не знаю.
 
А задачу решил так:
 
'Сдесь идет модуль  
For q=1 to N  
   DoCmd.OpenForm "..."  
   Do Until Form_"...".Visible = False
      DoEvents
   Loop
Next  
'Сдесь продолжается модуль
 
Таким образом макрос открывает вторую форму и циклится. На второй форме спокойно работаешь (отмечаешь все параметры и пр.) и жмешь кнопку продолжения в которой прописан код при нажатии Form_"...".Visible = False
Условие зацикливания выполнено и макрос продолжает работать. При этом и форма не закрыта, т.е. можно обработать значения, параметры и пр., что позволяет не создавать дополнительные переменные.
После всего закрываем скрытую форму.
 
Спасибо.

Всего записей: 122 | Зарегистр. 22-03-2007 | Отправлено: 12:22 05-05-2010 | Исправлено: Oyger, 14:09 05-05-2010
maxGoustarev

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Всем привет!
Помогите новичку =)
 
Имею в базе данных таблицу t1 и t2
Создал пустую форму, на ней поле со списком (данные в нем берутся из t2)
Добавил кнопку, пишу обработчик события:
 
 
Private Sub button_Click()
End Sub
 
что вписать в обработчик что бы при нажатии на кнопку в таблицу t1 записывался текст который находится в поле со списком (уже выбранно из t2)

Всего записей: 1 | Зарегистр. 25-05-2010 | Отправлено: 20:04 25-05-2010
doker_kg

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
день добрый. если подволите вопрос.
создал в MSA2007 на форме диаграмму, прописал заголовки столбцов, теперь нужно из VBA добавить сточку в соурсную таблицу диаграммы, подскажите пжл как это сделать

Всего записей: 7 | Зарегистр. 23-04-2007 | Отправлено: 17:47 09-06-2010
Changeless

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Я не совсем понял, если тебе нужно указать источник данных для диаграммы через VBA то примерно так:
Me.TvoyaDiagramma.RowSource = "Имя таблицы или запроса, можно и сразу запрос"
Повесить, например, на событие Load формы. Таким же образом, возможно, нужно будет указать подчиненные поля (LinkChildFields) и основные поля (LinkMasterFields) или указать источником, например, лист Excel. Все зависит от того что тебе нужно.

Всего записей: 217 | Зарегистр. 28-09-2007 | Отправлено: 11:01 14-06-2010
taravasya



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Как в VBA 6.5(офис 2007) перемещать окно формы без заголовка?
Нарыл вот такой код:

Код:
Private Sub Detail_MouseMove(Button As Integer, _
    Shift As Integer, X As Single, Y As Single)
    fMoving = True
End Sub
 
Private Sub Detail_MouseMove(Button As Integer, _
    Shift As Integer, X As Single, Y As Single)
    Dim sngNewX As Single
    Dim sngNewY As Single
    If (fMoving) Then
        ' calculate using window dimensions so the mouse doesn't jump
        sngNewX = (Me.WindowLeft - Me.WindowWidth / 2) + X
        sngNewY = (Me.WindowTop - Me.WindowHeight / 2) + Y
 
        ' move the form
        Me.Move sngNewX, sngNewY
    End If
End Sub
 
Private Sub Detail_MouseMove(Button As Integer, _
    Shift As Integer, X As Single, Y As Single)
    fMoving = False
End Sub
 

Он почти работает. Но в нём есть один большой недостаток. Его надо либо применять к маленькой картинке, либо надо смириться с прыжком формы в начале передвижения мышкой. Здесь её навострили для того что бы в начале перемещения мышки, курсор оказывался по середине объекта:

Код:
        sngNewX = (Me.WindowLeft - Me.WindowWidth / 2) + X
        sngNewY = (Me.WindowTop - Me.WindowHeight / 2) + Y

Причём в комментарии говориться, что мол для того, что бы мышка не прыгала... А толку? Мышка прыгает или окно?... Не велика разница. И что самое смешное, что такое безобразие лежит на мсдн-е. Неужели нет ничего элегантнее?
 
Добавлено:
ВАУ!!! Нашёл другой код. Немножко покалдовал, убрал, добавил, перемешал и вышло вот такое:

Код:
Private fMoving As Boolean
Dim preX As Long
Dim preY As Long
Private Sub ЗаголовокФормы_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
fMoving = True
preX = X
preY = Y
 
End Sub
 
Private Sub ЗаголовокФормы_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
    If (fMoving) Then
    Me.Move Me.WindowLeft + (X - preX), Me.WindowTop + (Y - preY)
    End If
End Sub
 
Private Sub ЗаголовокФормы_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
fMoving = False
End Sub

Работает на ура!

Всего записей: 251 | Зарегистр. 16-11-2007 | Отправлено: 01:32 02-11-2010
Djaarfik

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ребята помогите открыть файл ... немогу понять как его закрыли а человек который закрыл не открывает ... Поможете? Ссылка на файл http://depositfiles.com/files/uwszh8uqh
Очень прошу вас решить эту загадку

Всего записей: 3 | Зарегистр. 06-03-2008 | Отправлено: 08:57 06-12-2010
Laybochka

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Может кто подскажет почему не работает? Надо фильтровать форму Продажа (от таблиы Продажа) по районам "бс" и "сг"  .
 
Dim StrA1 As String, Strb1 As String, Strb2 As String, Strb3 As String
 
StrA1 = "продажа"
Strb1 = "([продажа]![район]=""бс"")"
Strb2 = "([продажа]![район]=""сг"")"
Strb3 = Strb1 Or Strb2
     
     DoCmd.OpenForm StrA1, acNormal, "", Strb3, , acNormal

Всего записей: 3 | Зарегистр. 16-12-2010 | Отправлено: 13:56 16-12-2010 | Исправлено: Laybochka, 20:39 16-12-2010
AndVGri

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Laybochka

Цитата:
Strb3 = Strb1 Or Strb2  

на

Код:
 
Strb3 = Strb1 & " Or " & Strb2
 


Всего записей: 750 | Зарегистр. 14-12-2005 | Отправлено: 06:23 20-12-2010
Laybochka

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Спасибо работает. Может литературку подскажете, а то сколько искал попадается все в общем формате, а на мелочах спотыкаюсь. Сейчес мучаюсь какой командой можно обнулить все флажки в одном поле или все значения поля.

Всего записей: 3 | Зарегистр. 16-12-2010 | Отправлено: 19:39 26-12-2010
AndVGri

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Laybochka
 

Код:
 
'где me форма, пример для кода внутри формы (например, событие Load)
Dim p As Cotrol
    Dim p As Control
    For Each p In Me.Controls
        If TypeOf p Is TextBox Then
            Debug.Print p.Value
        ElseIf TypeOf p Is CheckBox Then
            Debug.Print p.Value
        End If
    Next p
 

Всего записей: 750 | Зарегистр. 14-12-2005 | Отправлено: 06:08 27-12-2010
Jully



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Всем добрый день!
Помогите упростить процедуру определения открытых окон в проекте.
Т.е. объекты Forms и Reports - это хорошо, но на экране так же бывают открытые таблицы и запросы в виде таблиц. Как определить, есть ли они вообще.
Сейчас делаю перебор по всем таблицам и запросам и в цикле проверяю - загружен или нет.
Неужели нет никакого системного кэша открытых объектов, чтобы можно было с ними работать.
 
И может быть кто-то знает как работает системная функция в данном контексте:
 
If SysCmd(acSysCmdGetObjectState, acQuery, strQName) = acObjStateOpen Then
   IsLoadedQry = True
End If  
 
и возможна ли подобная проверка не тупо перебором, а запросом в куда-то?!
 
СПАСИБО!

Всего записей: 80 | Зарегистр. 22-01-2006 | Отправлено: 11:52 11-01-2011
Oyger

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Jully
На сколько я знаю - возможен только перебор. Я делаю так (как в Справке):
Dim Tabl As AccessObject, dbs As Object
For Each Tabl In Application.CurrentData.AllTables
   If Tabl.IsLoaded = True Then
      ...
   End If
Next Tabl
 
Это на примере объектов Таблиц. Можно аналогично и с другими объектами сделать.
 
Добавлено:
Коллеги.
Вопрос по ComboBox. А то я что-то в творческом кризисе =)
Итак. На форме ComboBox. Он заполняется запросом и имеет несколько столбцов. После выбора значения запускается макрос (AfterUpdate).
Цель: в переменую надо загнать выбранное значение combobox из второго столбца. Как сделать?
Value - берет значение из первого столбца.
Recordset - обрабатывает первое значение в списке, а не выбранное.
Жду подсказок...
Спасибо.

Всего записей: 122 | Зарегистр. 22-03-2007 | Отправлено: 11:00 01-02-2011
dneprcomp



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Oyger
http://www.ozgrid.com/forum/showthread.php?t=66621&page=1
http://bytes.com/topic/access/answers/193375-how-reference-combobox-column-1-query

Всего записей: 3920 | Зарегистр. 31-03-2002 | Отправлено: 17:30 01-02-2011
Oyger

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
dneprcomp

Цитата:
http://www.ozgrid.com/forum/showthread.php?t=66621&page=1

У 2007 офис. И в нем нет свойства List у ComboBox, как в примере.

Цитата:
http://bytes.com/topic/access/answers/193375-how-reference-combobox-column-1-query

От сюда тоже не помогло.
 
Задачу решил сам, немного подумав. Через RecordSet. Для меня это удобнее. И таму есть объяснение - используя RecordSet можно ссылаться не на номера столбцов, а на их названия. Это большой "+" когда приходиться добавлять новый столбец данных. Да еще в середину данных/таблицы. Если используешь номера - они сместились из-за вставки и надо править весь текст макроса. А если используешь названия столбцов, ничего править не надо.
А решил задачу вот как:
ПолеСоСписком.Recordset.MoveFirst 'Задаем Recordset на первое значение
ПолеСоСписком.Recordset.Move (ПолеСоСписком.ListIndex) 'Задаем Recordset на выбранный элемент списка
Actual = ПолеСоСписком.Recordset(ХХХ) 'Используем выбранное значение из столбца ХХХ (вместо ХХХ можно вставить как номер столбца, так и его название)

Всего записей: 122 | Зарегистр. 22-03-2007 | Отправлено: 17:36 03-02-2011
   

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » VBA for Access
ShIvADeSt (14-09-2011 00:58): Все обсуждение тут http://forum.ru-board.com/topic.cgi?forum=33&topic=0357&start=1180


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru