Waarde uit listbox gebruiken in module

Status
Niet open voor verdere reacties.

De Mat

Gebruiker
Lid geworden
17 dec 2005
Berichten
11
Ik wil graag een gekozen waarde uit een listbox gebruiken in een module. Nu ben ik erachter gekomen dat de gekozen waarde niet te gebruiken is behalve dan in dat formulier.

Als ik in een ander formulier een msgbox list.. zet dan geeft die niet de waarde die de listbox heeft. Hetzelfde in die module. Weet iemand hoe ik deze waarde voor een tijdje vast kan houden?
 
Dit is de kort door de bocht methode:

Maak een variabele aan in een module. Zorg dat die variabele bovenaan staat onder
Code:
Option Compare Database
Option Explicit
bijvoorbeeld
Code:
public glngID as long ' Global long variable
Je kan de variabel vullen en die blijft actief gedurende de looptijd van je programma door heel het programma.

Enjoy!
 
Dit is de kort door de bocht methode:

Maak een variabele aan in een module. Zorg dat die variabele bovenaan staat onder
Code:
Option Compare Database
Option Explicit
bijvoorbeeld
Code:
public glngID as long ' Global long variable
Je kan de variabel vullen en die blijft actief gedurende de looptijd van je programma door heel het programma.

Enjoy!

Het vullen van deze variabele doe je alsvolgt:
Code:
Dim l As Long
l = Forms(formname).Controls(controlname).ListIndex
Om nu deze waarde uit de lijst op te halen gebruik je de volgende
Code:
Forms(formname).Controls(controlname).SetFocus
Forms(formname).Controls(controlname).ListIndex = index

En klaar is Kees

Wim
 
Hartstikke bedankt voor de antwoorden, ook in de andere topics.

Ik kom hier alleen niet helemaal uit. Ik heb een FormImport waar ik via een filedialog het bestand selecteer wat dus zichtbaar wordt in List20 als enige optie.

Via een button run ik de module ImportBOM die dus het gekozen bestand moet importeren.

Ik ben al wel een stukje verder gekomen maar krijg nog steeds errors omdat ik volgens mij niet alles in het juiste formulier heb staan.

Zou iemand misschien nog net iets specifiekers willen zijn wat ik waar moet plaatsen? Alvast bedankt...
 
Het vullen van deze variabele doe je alsvolgt:
Code:
Dim l As Long
l = Forms(formname).Controls(controlname).ListIndex
Om nu deze waarde uit de lijst op te halen gebruik je de volgende
Code:
Forms(formname).Controls(controlname).SetFocus
Forms(formname).Controls(controlname).ListIndex = index

En klaar is Kees

Wim

Ik heb denk ik een niet zo helder moment gehad, want deze oplossing zegt mij niets en ik weet er ook niets (meer) van. (De hele dag op cursus geweest).
Wellicht dat andere je nog kunnen helpen.

Sorry

Wim
 
Hartstikke bedankt voor de antwoorden, ook in de andere topics.

Ik kom hier alleen niet helemaal uit. Ik heb een FormImport waar ik via een filedialog het bestand selecteer wat dus zichtbaar wordt in List20 als enige optie.

Via een button run ik de module ImportBOM die dus het gekozen bestand moet importeren.

Ik ben al wel een stukje verder gekomen maar krijg nog steeds errors omdat ik volgens mij niet alles in het juiste formulier heb staan.

Zou iemand misschien nog net iets specifiekers willen zijn wat ik waar moet plaatsen? Alvast bedankt...
De modules zijn alleen containers voor je functies en procedures. Een module kan je dus niet runnen.

Misschien kan je aangeven wat de foutmeldingen zijn of wellicht de database (of een sample) compacten, zippen en posten.

HTH:D
 
De modules zijn alleen containers voor je functies en procedures. Een module kan je dus niet runnen.

Misschien kan je aangeven wat de foutmeldingen zijn of wellicht de database (of een sample) compacten, zippen en posten.

HTH:D

Ja ik run de function Import_BOM in de module, maar ik zal eens een stukje code neer zetten. Ik krijg nu de error Variable not Defined bij List20 in de function.

Code:
Private Sub Command19_Click()

'Requires reference to Microsoft Office 12.0 Object Library.

   Dim fDialog As Office.FileDialog
   Dim varFile As Variant
   Dim file As Long
file = Forms(Formulier_Importeren).Controls(List20).ListIndex

   'Clear listbox contents.
   Me.List20.RowSource = ""

   'Set up the File Dialog.
   Set fDialog = Application.FileDialog(msoFileDialogFilePicker)
   With fDialog
      'Allow user to make multiple selections in dialog box
      .AllowMultiSelect = False
            
      'Set the title of the dialog box.
      .Title = "Please select one file"

      'Clear out the current filters, and add our own.
      .Filters.Clear
      .Filters.Add "Excel Spreadsheets", "*.xls"


      'Show the dialog box. If the .Show method returns True, the
      'user picked at least one file. If the .Show method returns
      'False, the user clicked Cancel.
      If .Show = True Then
         'Loop through each file selected and add it to our list box.
         For Each varFile In .SelectedItems
            Me.List20.AddItem varFile
         Next
      Else
         MsgBox "You clicked Cancel in the file dialog box."
      End If
   End With
End Sub

--------------------------------------------------------------------------------------



Private Sub Command23_Click()
On Error GoTo Err_Command23_Click

    Dim stDocName As String
MsgBox List20
    stDocName = "Module"
    DoCmd.RunMacro stDocName

Exit_Command23_Click:
    Exit Sub

Err_Command23_Click:
    MsgBox Err.Description
    Resume Exit_Command23_Click
    
End Sub

Deze code zit in het formulier, hieronder de module:

Code:
Option Compare Database
Option Explicit
Public file As Long ' Global long variable
Public Function Import_BOM()

Forms(Formulier_Importeren).Controls(List20).SetFocus
Forms(Formulier_Importeren).Controls(List20).ListIndex = 0

Dim file As Long
file = Forms(Formulier_Importeren).Controls(List20).ListIndex


DoCmd.TransferSpreadsheet acImport, 3, "BOM", "file", False, ""

End Sub
 
Laatst bewerkt:
Volgens mij krijg je een hoop foutmeldingen.

In plaats van een hele berg code achter een knop die ook elders gebruikt zou kunnen worden zou ik kiezen voor die code in een module:
Code:
Option Compare Database
Option Explicit

Public Enum FileType
    Access = 0
    Excel = 1
End Enum

Public Function SelectSingleFile(strCurDir As String, strDialogTitle As String, intFilter As FileType) As String
   ' Hetzelfde als SelectOneFile maar dan met behulp van de built-in Application.FileDialog.
   On Error GoTo Err_SelectSingleFile

   Dim fd As FileDialog
   Dim varSelectedItem As Variant
   Dim strFile As String
   
   'Create a FileDialog object as a Folder Picker dialog box.
   Set fd = Application.FileDialog(msoFileDialogFilePicker)
   strFile = ""
   
   With fd
      .Title = strDialogTitle
      .ButtonName = "&Select"
      .InitialView = msoFileDialogViewDetails
      'Add a filter that includes MDB or XLS files and make it the first item in the list.
      .Filters.Clear
      Select Case intFilter
        Case FileType.Access
            .Filters.Add "Access databases", "*.mdb", 1
        Case FileType.Excel
            .Filters.Add "Excel spreadsheet", "*.xls", 1
      End Select
      .Filters.Add "Alle bestanden", "*.*", 2
      'Sets the initial file filter to number 1.
      .FilterIndex = 1
      If .Show = -1 Then
         For Each varSelectedItem In .SelectedItems
            If Len(strFile) > 0 Then
                strFile = strFile & ", " & varSelectedItem
            Else
                strFile = varSelectedItem
            End If
         Next varSelectedItem
      Else
         strFile = ""
      End If
   End With

    SelectSingleFile = strFile
        
    Set fd = Nothing

Exit_SelectSingleFile:
   Set fd = Nothing
   Exit Function

Err_SelectSingleFile:
'   msgbox Err, Error$, "SelectSingleFile", "basFileDialog"
msgbox "Hier moet jouw persoonlijke foutmelding komen"
   Resume Exit_SelectSingleFile

End Function

Zet deze code in een module bijvoorbeeld basFileDialog. De code moet je ook nog een beetje aanpassen om door het resultaat te lopen.

Code:
Option Compare Database
Option Explicit

Public lngFile As Long ' Global long variable 'file is misschien een gereserveerd woord
Public Function Import_BOM()

[COLOR="red"]Dim [COLOR="Magenta"]file[/COLOR] As Long[/COLOR]

Forms([COLOR="Red"]Formulier_Importeren[/COLOR]).Controls([COLOR="red"]List20[/COLOR]).SetFocus
Forms([COLOR="red"]Formulier_Importeren[/COLOR]).Controls([COLOR="red"]List20[/COLOR]).ListIndex = 0

file = Forms(Formulier_Importeren).Controls(List20).ListIndex


DoCmd.TransferSpreadsheet acImport, 3, "BOM", [COLOR="red"]"file"[/COLOR], False, ""

End Sub
Zijn Formulier_Importeren en List20 variabelen? Je gebruikt ze wel zo. Ze zijn echter nergens gedeclareerd en aangezien je "Option Explicit" aan hebt staan zullen die ook wel een foutmelding genereren. Als het namen zijn zet ze dan tussen "List20" dubbele quotes.

Het hoeft niet maar het is wel netter: zet je declaraties bovenin je procedure en "file" kan een gereserveerd woord zijn. Maak daar lngFile van.

In het Transferspreadsheet importeer je de spreadsheet met de naam "file".
Code:
docmd.TransferSpreadsheet acImport,acSpreadsheetTypeExcel9 ,"BOM",lngfile,false
Je importeert dus een bestand bijvoorbeeld "20.xls". Als dat ook "BOM2008.xls" kan zijn dan is het type lngFile verkeerd en dat zou dan
Code:
Dim strFile as string
moeten zijn.

HTH:D
 
Volgens mij krijg je een hoop foutmeldingen.

In plaats van een hele berg code achter een knop die ook elders gebruikt zou kunnen worden zou ik kiezen voor die code in een module:
Code:
Option Compare Database
Option Explicit

Public Enum FileType
    Access = 0
    Excel = 1
End Enum

Public Function SelectSingleFile(strCurDir As String, strDialogTitle As String, intFilter As FileType) As String
   ' Hetzelfde als SelectOneFile maar dan met behulp van de built-in Application.FileDialog.
   On Error GoTo Err_SelectSingleFile

   Dim fd As FileDialog
   Dim varSelectedItem As Variant
   Dim strFile As String
   
   'Create a FileDialog object as a Folder Picker dialog box.
   Set fd = Application.FileDialog(msoFileDialogFilePicker)
   strFile = ""
   
   With fd
      .Title = strDialogTitle
      .ButtonName = "&Select"
      .InitialView = msoFileDialogViewDetails
      'Add a filter that includes MDB or XLS files and make it the first item in the list.
      .Filters.Clear
      Select Case intFilter
        Case FileType.Access
            .Filters.Add "Access databases", "*.mdb", 1
        Case FileType.Excel
            .Filters.Add "Excel spreadsheet", "*.xls", 1
      End Select
      .Filters.Add "Alle bestanden", "*.*", 2
      'Sets the initial file filter to number 1.
      .FilterIndex = 1
      If .Show = -1 Then
         For Each varSelectedItem In .SelectedItems
            If Len(strFile) > 0 Then
                strFile = strFile & ", " & varSelectedItem
            Else
                strFile = varSelectedItem
            End If
         Next varSelectedItem
      Else
         strFile = ""
      End If
   End With

    SelectSingleFile = strFile
        
    Set fd = Nothing

Exit_SelectSingleFile:
   Set fd = Nothing
   Exit Function

Err_SelectSingleFile:
'   msgbox Err, Error$, "SelectSingleFile", "basFileDialog"
msgbox "Hier moet jouw persoonlijke foutmelding komen"
   Resume Exit_SelectSingleFile

End Function

Zet deze code in een module bijvoorbeeld basFileDialog. De code moet je ook nog een beetje aanpassen om door het resultaat te lopen.

Code:
Option Compare Database
Option Explicit

Public lngFile As Long ' Global long variable 'file is misschien een gereserveerd woord
Public Function Import_BOM()

[COLOR="red"]Dim [COLOR="Magenta"]file[/COLOR] As Long[/COLOR]

Forms([COLOR="Red"]Formulier_Importeren[/COLOR]).Controls([COLOR="red"]List20[/COLOR]).SetFocus
Forms([COLOR="red"]Formulier_Importeren[/COLOR]).Controls([COLOR="red"]List20[/COLOR]).ListIndex = 0

file = Forms(Formulier_Importeren).Controls(List20).ListIndex


DoCmd.TransferSpreadsheet acImport, 3, "BOM", [COLOR="red"]"file"[/COLOR], False, ""

End Sub
Zijn Formulier_Importeren en List20 variabelen? Je gebruikt ze wel zo. Ze zijn echter nergens gedeclareerd en aangezien je "Option Explicit" aan hebt staan zullen die ook wel een foutmelding genereren. Als het namen zijn zet ze dan tussen "List20" dubbele quotes.

Het hoeft niet maar het is wel netter: zet je declaraties bovenin je procedure en "file" kan een gereserveerd woord zijn. Maak daar lngFile van.

In het Transferspreadsheet importeer je de spreadsheet met de naam "file".
Code:
docmd.TransferSpreadsheet acImport,acSpreadsheetTypeExcel9 ,"BOM",lngfile,false
Je importeert dus een bestand bijvoorbeeld "20.xls". Als dat ook "BOM2008.xls" kan zijn dan is het type lngFile verkeerd en dat zou dan
Code:
Dim strFile as string
moeten zijn.

HTH:D

Oke hartstikke bedankt. Ik ben zelf niet zo'n held met dat VBA hoewel ik de simpelere dingen wel gedaan kan krijgen. Ik zal weer eens gaan knutselen! :thumb:
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan