Forum Discussion

daimne's avatar
daimne
Copper Contributor
Feb 05, 2025

How to export excel listbox values into a csv file?

How to export excel listbox values into a csv file?

 

TIA

2 Replies

  • NikolinoDE's avatar
    NikolinoDE
    Platinum Contributor

    You can export Excel ListBox values into a CSV file using VBA. Here’s a solution proposal:

    Steps:

    1. Ensure Your ListBox Has Values:

    • If it’s an ActiveX ListBox (ListBox1 on a sheet) or a UserForm ListBox, make sure it's populated.

    2. Use VBA to Write to a CSV File:

    • The code loops through all ListBox items and writes them to a CSV file.

    VBA Code to Export ListBox Values to CSV

    Sub ExportListBoxToCSV()
        Dim ws As Worksheet
        Dim lb As Object
        Dim fso As Object
        Dim ts As Object
        Dim i As Integer
        Dim csvPath As String
        Dim csvLine As String
        
        ' Set worksheet and ListBox reference
        Set ws = ThisWorkbook.Sheets("Sheet1") ' Change as needed
        Set lb = ws.ListBox1 ' For ActiveX ListBox on a sheet

        ' Define the CSV file path (Change as needed)
        csvPath = ThisWorkbook.Path & "\ListBoxData.csv"
        
        ' Create FileSystemObject to write CSV
        Set fso = CreateObject("Scripting.FileSystemObject")
        Set ts = fso.CreateTextFile(csvPath, True)
        
        ' Loop through ListBox items and write to CSV
        For i = 0 To lb.ListCount - 1
            csvLine = lb.List(i) ' Assuming single-column ListBox
            ts.WriteLine csvLine
        Next i
        
        ' Close file
        ts.Close
        
        ' Notify user
        MsgBox "ListBox data exported to " & csvPath, vbInformation, "Export Complete"

    End Sub

    For a Multi-Column ListBox

    Modify the loop to export all columns:

    For i = 0 To lb.ListCount - 1
        csvLine = ""
        For j = 0 To lb.ColumnCount - 1
            csvLine = csvLine & lb.List(i, j) & "," ' Add comma between columns
        Next j
        csvLine = Left(csvLine, Len(csvLine) - 1) ' Remove trailing comma
        ts.WriteLine csvLine
    Next i

    For a UserForm ListBox

    If the ListBox is in a UserForm (UserForm1.ListBox1), modify the reference:

    Set lb = UserForm1.ListBox1

    The text, steps and the code were created with the help of AI.

     

    My answers are voluntary and without guarantee!

    Hope this will help you.

    • daimne's avatar
      daimne
      Copper Contributor

      Thank you Nikolino.

      I'm a bit rusty on VBA. 

      The compiler does not take: Set lb = UserForm1.ListBox1 or Set lb = ws.ListBox1

      We have existing spreadsheet and I'm not sure how to find if this listbox is an Active X or Userform and what is the name of it. Could you advise?

       

      Thank you.

Resources