Открытие записи Specifi c в форме доступа из Excel - PullRequest
0 голосов
/ 13 февраля 2020

Я пишу макрос, который откроет базу данных Access, откроет форму и отобразит указанную c запись, основанную на содержимом ActiveCell. У меня это в основном работает, но у меня проблема в том, что он открывает форму, которая содержит только одну запись, поэтому кнопки со стрелками внизу не go для других записей. Есть ли способ открыть форму со всеми записями, а затем перейти к той, которую я хочу показать? Я подозреваю, что это связано с окном поиска внизу формы, но я не могу найти какую-либо информацию об этом в inte rnet.

Форма, открытая макросом: enter image description here

Форма открыта вручную: enter image description here

Sub File_open()
Dim app as Object
Dim search As String: search = ActiveCell.Value

If (ActiveCell.Font.ColorIndex = 3) And (InStr(ActiveCell.Value, "-") <> 0) Then
    'Open NCR Record
    Set app = CreateObject("Access.Application")
    app.Visible = True
    app.OpenCurrentDatabase ("Z:\Quality\NCR Database\NCR Databse " & "20" & Left(ActiveCell.Value, 2) & "0101.accdb")
    app.DoCmd.OpenForm "Issue Details", , , "[ID]=" & Abs(Replace(Right(search, 4), "-", ""))
    Set app = Nothing
    Exit Sub
End If
Msbox ("NCR Not Found.")
End Sub

ОБНОВЛЕНИЕ: Я заметил, что пользователи этой базы данных были небрежными и [ID] записей не совпадают с числами, которые я получаю из моего выражения Abs(Replace(Right(search, 4), "-", "")). Я хочу посмотреть на текстовое поле с именем [Title], источником управления которого является поле с именем [NCR Number], и использовать переменную search как есть, чтобы найти запись. Я изменил свой код, и теперь я просто получаю поле ввода, которое полностью сбивает меня с толку:

enter image description here

    app.DoCmd.OpenForm "Issue Details", WhereCondition:="[Title]=" & search

1 Ответ

2 голосов
/ 13 февраля 2020

Вы показываете форму с DoCmd.OpenForm:

expression.OpenForm (FormName, View, FilterName, WhereCondition, DataMode, WindowMode, OpenArgs)

Для FormName вы передаете "Issue Details", пропуская параметры View и FilterName, а затем вводите аргумент WhereCondition:

app.DoCmd.OpenForm "Issue Details", , , "[ID]=" & Abs(Replace(Right(search, 4), "-", ""))

Это "[ID]=" & Abs(Replace(Right(search, 4), "-", "")) выражение является фильтром, который вы видите.

Удалите этот аргумент, вы удалите фильтр.

app.DoCmd.OpenForm "Issue Details"

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

app.DoCmd.OpenForm "Issue Details", _
    OpenArgs:="[ID]=" & Abs(Replace(Right(search, 4), "-", ""))
'below could be in the form itself, e-g- Form_Load, (then ref by Me)
With Forms("Issue Details").RecordsetClone
    .FindFirst Forms("Issue Details").OpenArgs
    If .NoMatch then
       ' reaction on id not found
    Else
        Forms("Issue Details").Bookmark = .Bookmark
    End If
End With
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...