여러 선택 목록 상자에서 선택한 항목을 Microsoft Access에서 쉼표로 구분된 문자열로 검색하는 방법

이 문서는 Microsoft Access 데이터베이스(.mdb) 파일이나 Microsoft Access 데이터베이스(.accdb) 파일에 적용됩니다.

보통: 기본 매크로, 코딩 및 상호 운용성 기술이 필요합니다.

요약

이 문서에서는 여러 선택 목록 상자에서 선택한 항목을 검색한 다음 선택한 항목을 Microsoft Access에 쉼표로 구분된 문자열로 저장하는 방법을 설명합니다.

추가 정보

Microsoft Access에서 양식 또는 보고서의 목록 상자의 MultiSelect 속성 값은 목록 상자가 단일 선택 목록 상자인지 아니면 여러 선택 목록 상자인지를 결정합니다. 여러 선택 목록 상자에서 여러 목록 항목을 한 번에 선택할 수 있습니다.

목록 상자의 Value 속성을 사용하여 목록 상자에서 선택한 항목을 검색할 수 있습니다. 그러나 여러 선택 목록 상자를 사용하고 Value 속성을 사용하여 선택한 항목을 검색하려고 하면 Value 속성이 Null을 반환합니다.

선택한 항목을 여러 선택 목록 상자에서 검색한 다음 선택한 항목을 프로그래밍 방식으로 쉼표로 구분된 문자열로 저장할 수 있습니다. 이렇게 하려면 다음과 같이 하십시오.

  1. Microsoft Access를 시작합니다.

  2. Northwind 샘플 데이터베이스를 엽니다.

  3. 데이터베이스 창의 개체 섹션에서 을 클릭합니다.

    참고 Access 2007의 만들기 탭에 있는 양식 그룹에서 양식디자인을 클릭합니다.

  4. 오른쪽 창에서 디자인 보기에서 양식 만들기를 두 번 클릭합니다.

    참고 Access 2007에서 이 단계를 건너뜁니다.

  5. 폼에 다음 컨트롤을 추가한 다음 지정된 대로 컨트롤의 속성을 설정합니다.

    List Box
    ----------------------------------------------------
    Name : NamesList
    Row Source Type : Table/Query
    Row Source : SELECT First Name FROM Employees
    Multi Select : Extended
    Width : 3.5"
    Height : 0.75"
    
    Text Box
    -----------------------
    Name : mySelections
    Width : 3.5"
    Height : 0.25"
    
    Command Button
    ----------------------------------
    Name : testmultiselect
    Caption : Display Selected Items
    Width : 1.375"
    Height : 0.3"
    
    Command Button
    ----------------------
    Name : ClrList
    Caption : Clear List
    Width : 1.375"
    Height : 0.3"
    
  6. 보기 메뉴에서 코드를 클릭합니다.

    참고 Access 2007의 디자인 탭에 있는 도구 그룹에서 코드 보기를 클릭합니다.

  7. Visual Basic 편집기 다음 코드를 붙여넣습니다.

Option Compare Database
Option Explicit

Private Sub Form_Current()
    Dim oItem As Variant
    Dim bFound As Boolean
    Dim sTemp As String
    Dim sValue As String
    Dim sChar As String
    Dim iCount As Integer
    Dim iListItemsCount As Integer

sTemp = Nz(Me!mySelections.Value, " ")
    iListItemsCount = 0
    bFound = False
    iCount = 0

Call clearListBox

For iCount = 1 To Len(sTemp) + 1
    sChar = Mid(sTemp, iCount, 1)
        If StrComp(sChar, ",") = 0 Or iCount = Len(sTemp) + 1 Then
            bFound = False
            Do
                If StrComp(Trim(Me!NamesList.ItemData(iListItemsCount)), Trim(sValue)) = 0 Then
                    Me!NamesList.Selected(iListItemsCount) = True
                    bFound = True
                End If
                iListItemsCount = iListItemsCount + 1
            Loop Until bFound = True Or iListItemsCount = Me!NamesList.ListCount
            sValue = ""
        Else
            sValue = sValue & sChar
        End If
    Next iCount
End Sub

Private Sub clearListBox()
    Dim iCount As Integer

For iCount = 0 To Me!NamesList.ListCount
        Me!NamesList.Selected(iCount) = False
    Next iCount
End Sub

Private Sub testmultiselect_Click()
    Dim oItem As Variant
    Dim sTemp As String
    Dim iCount As Integer

iCount = 0

If Me!NamesList.ItemsSelected.Count <> 0 Then
        For Each oItem In Me!NamesList.ItemsSelected
            If iCount = 0 Then
                sTemp = sTemp & Me!NamesList.ItemData(oItem)
                iCount = iCount + 1
            Else
                sTemp = sTemp & "," & Me!NamesList.ItemData(oItem)
                iCount = iCount + 1
            End If
        Next oItem
    Else
        MsgBox "Nothing was selected from the list", vbInformation
        Exit Sub  'Nothing was selected
    End If

Me!mySelections.Value = sTemp
End Sub

Private Sub clrList_Click()
    Call clearListBox
    Me!mySelections.Value = Null
End Sub

  1. Visual Basic 편집기 닫습니다.

  2. 양식을 Form1로 저장합니다.

  3. 양식을 닫습니다.

  4. 양식 보기에서 Form1 양식을 엽니다.

    1. 데이터베이스 창의 개체 섹션에서 을 클릭합니다.

      참고 Access 2007의 탐색 창에서 양식 그룹을 클릭합니다.

    2. 오른쪽 창에서 Form1을 마우스 오른쪽 단추로 클릭한 다음 열기를 클릭합니다.

      참고 Access 2007에서 Form1을 마우스 오른쪽 단추로 클릭한 다음 열기를 클릭합니다.

  5. 목록 상자에서 여러 항목을 선택합니다. 이렇게 하려면 목록 상자에서 항목을 클릭하고 Ctrl 키를 누른 채 목록 상자에서 더 많은 항목을 클릭합니다.

  6. 선택한 항목 표시를 클릭합니다.

여러 선택 목록 상자에서 선택한 항목은 텍스트 상자에 쉼표로 구분된 문자열로 표시됩니다.

Microsoft에서 제공하는 프로그래밍 예제는 예시를 위한 것일 뿐이며 이와 관련하여 명시적이거나 묵시적인 어떠한 보증도 하지 않습니다. 이는 상품성이나 특정 목적에 대한 적합성의 묵시적인 보증을 포함하며 이에 제한되지 않습니다. 이 문서에서는 예제에 사용되고 있는 프로그래밍 언어와 프로시저를 만들고 디버깅하는 데 사용되는 도구를 사용자가 잘 알고 있는 것으로 가정합니다. Microsoft 지원 엔지니어는 사용자에게 도움이 되도록 특정 프로시저에 대한 기능을 설명할 수 있지만 사용자의 특정 요구 사항에 맞도록 예제를 수정하여 추가 기능을 제공하거나 프로시저를 구성하지는 않습니다.