Откройте форму доступа к определенной записи, выбранной из ячейки таблицы Excel - PullRequest
0 голосов
/ 05 июля 2019

Я работаю над рабочим вопросом, который мне был поручен. В листе Excel есть список идентификаторов и база данных MS Access с записями, которые соответствуют этим записям. Мне нужно написать код, чтобы открыть форму доступа к записи, определенной в поле Excel.

Sub OpenAccess()

   Dim LPath As String
   Dim StudentID As Integer

   'Path to Access database
   LPath = "C:\Users\Admin\Desktop\CNRC_Test.accdb"

   'Open Access and make visible
   Set oApp = CreateObject("Access.Application")
   oApp.Visible = True

   'Open Access database as defined by LPath variable
   oApp.OpenCurrentDatabase LPath

   'Open form called Categories filtering by CategoryID

   oApp.DoCmd.OpenForm "Student Details", , , "Student ID=" & StudentID


End Sub

Я пробовал этот код:

Sub OpenAccess()

   Dim LPath As String
   Dim StudentID As Integer

   'Path to Access database
   LPath = "C:\Users\Admin\Desktop\CNRC_Test.accdb"

   'Open Access and make visible
   Set oApp = CreateObject("Access.Application")
   oApp.Visible = True

   'Open Access database as defined by LPath variable
   oApp.OpenCurrentDatabase LPath

   'Open form called Categories filtering by CategoryID

   oApp.DoCmd.OpenForm "Student Details", , , "Student ID=" & StudentID


End Sub

Ответы [ 2 ]

1 голос
/ 05 июля 2019

oApp.DoCmd.OpenForm «Сведения об ученике»,,, «Идентификатор студента =» & StudentID

Тестирование в Office 16: если «Сведения об ученике» - это название вашей формыи Источник записи вашей формы - это таблица, из которой вы хотите получить источник, а «Student ID» - столбец номера индекса, и в вашей форме есть текстовое поле с источником управления, который является именем столбца этого номера индекса.или какой-то другой столбец в таблице, тогда должна быть возвращена одна запись (с результатом в текстовом поле).

Ниже приведен пример:

Сначала переписайте вашу функцию def вверху какOpenAccess(StudentID).

Затем выполните присвоение StudentID на листе, который вы хотите использовать:

Заполните B3 значением индекса по вашему выбору.

Затем временнооставить активную ячейку в A1.

Затем вызовите объект Sheet из объектов Microsoft Excel в дереве VBAProject на левой панели VBE.Запишите это в его модуль:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
 If Target.Address = "$B$3" Then
  Call OpenAccess(Target.Value)
 End If
End Sub

Затем нажмите на B3.

0 голосов
/ 05 июля 2019

Вы можете скопировать / вставить этот код за модулем листа Excel и настроить его под свои нужды:

Option Explicit

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

    Dim studentID As Long

    ' Exit if selection is more than one cell
    If Target.Cells.Count > 1 Then
        Exit Sub
    End If

    ' Validate if selected cell is in range
    If Not Application.Intersect(Range("A1:A5"), Range(Target.Address)) _
           Is Nothing Then

        ' Assign studentid value from current cell
        studentID = Target.Value

        ' Call the open procedure with current cell value
        Call OpenAccess(studentID)

    End If

End Sub


Sub OpenAccess(studentID As Long)


    Dim oApp As Object
    Dim LPath As String


    'Path to Access database
    LPath = "C:\Temp\Test.accdb"

    ' Check if Access is open
    On Error Resume Next
        Set oApp = GetObject(LPath)
        If Err.Number <> 0 Then Err.Clear
    On Error GoTo 0

    oApp.Visible = True

    'Open form called Categories filtering by CategoryID
    oApp.DoCmd.OpenForm "Student Details", , , "[Student ID]=" & studentID


End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...