Básicamente tienes que concatenar el contenido, para formar tú mismo las 4 columnas como una solo string, o bien imprimir en la misma línea reposicionado el cursor...
Puede danrse diferentes casos. Por ejemplo;
- A - Que el ancho de las 4 columnas sea superior al del papel.
- B - Que el ancho de las 4 columnas sea notablemente inferior al del papel 
- C - Que una de las columnas sea muy superior al resto y al final las 4 no quepan en el papel.
- D - Que el listbox tenga 4 columnas, pero no tenga ítems suficientes para las 4 columnas (una o más están vacías).
- E - Que el listbox acabe teniendo más de 4 columnas (lo que sucederá cuando añadas más ítems o acortes el alto dle control).
- F - Que en un listbox, con x columnas, la última no tiene porque tener los mismos ítems que las previas ya que un listbox, es una lista que al llegar a cierta cantidad de altura continúa en otra columna, es decir no es un 'grid', donde el número de filas y columnas discurren independientemente.
Lo ideal es tener solución para todos los casos y dado el presente, decidir cuál de ellos se da y qué solución se aplica.
Tratándose de un listbox, el reparto horizontal es automatico sin posibilidad de cambio y distribuye los elementos en columna a medida que tocan el alto del listbox, (requiere tener la propiedad IntegralHeight = TRUE), tampoco hay control sobre qué ancho se le da a la columna, que además es el mismo para todas.
Es decir, nótese que hablamos de una lista (un listbox, técnicamente  solo tiene 1 campo a pesar de que se muestre en varias columnas), luego la alineación, fuente, ancho de columna, color de tinta, etc... es solo uno y el mismo para todo), no hablamos de un grid, donde cada columna es un campo y puede tener propiedades distintas... incluído el tipo de datos que aloja (no solo texto).
Lo ideal es repartir proporcionalmente las 4 columnas al ancho del papel (salvo que fueren columnas cuyo ancho textual para cada ítem sea muy corto, en cuyo caso sería preferible añadir más columnas), para ello, hay que crear una función que concatene el número de textos cuyo número de columnas se requiere y que además considere la alineación.
Además por simpliicidad, en vez de proceder como hace VB6, donde deposita (por ejemplo): lunes, martes, miércoles, jueves, viernas, sabado, domingo... debajo uno de otro, 
es preferible hacer una transposición, y poner en la primera fila: lunes, martes, miercoles jueves, en la segunda viernes, sabado, domingo... etc...
 
private function ListarEnColumnas(byref lista as listbox, byval numCols as integer, byval MargenIzquierdo as integer, byval AnchoPapel as integer, byval alineacion as AlineacionHorizontal[izquierda, centrada, derecha])  ' entiéndase, no quiero perder tiempo escribiendo una enumeración...
    dim filas as long
    dim ultimafila as long
    dim k as long, j as long, anchocol as integer 
    dim linea as string
    din fuente as stdfont
 
 
    set fuente = printer.font
    printer.fontname =  "Courier New" ' una fuente monoespaciada, si no el trabajo es más laborioso...
    filas = ((lista.listcount +1) \ numcols)
    ultimafila = ((lista.listcount +1) mod numcols)  ' columnas que tendrá la última fila.
    AnchoCol = ((AnchoPapel  - MargenIzquierdo )\numcols)
 
 
    for k = 0 to filas -1
         ' obtener la línea de texto en x columnas.
        linea = ConcatenarCols(lista, j, NumCols, NumCols, Margen, AnchoCol, Alineacion)
         ' imprime el texto de la línea
        printer.currentx = Margen
        printer.currenty = (printer.currenty + printer.textheight("t"))  ' el textheight depende de la fuente seleccionada en la impresora, no importa el texto entre paréntesis... es fijo para la  fuente.
        imprimir linea ' <----- mejor imprimir linea a línea
    next
 
    if (ultimafila > 0) luego
        ' obtener la línea de texto en x columnas (con las columnas que resten).
        linea = ConcatenarCols(lista, j, UltimaFila, NumCols, Margen, AnchoCol, Alineacion)
        ' imprime el texto de la línea
        printer.currentx = Margen
        printer.currenty = (printer.currenty + printer.textheight("t"))  
        imprimir linea 
    end ifi
 
    set printer.font = fuente
end function
 
 
private function ConcatenarCols(lista as listbox,indice as long, byval cols as integer, byval maxCols as integer, byval X as integer, byval AnchoCol as integer, byval Alineacion as AlineacionHorizontal) as string
    dim k as integer, s as string, cols as string 
 
    for k = j to (j+cols)
        col = Formatear(lista.list(k), AnchoCol, Alineacion)   
        s = (s & col)
    next
 
    ConcatenarCols = s
end function
 
' Recordar que usamos una fuente monoespaciada, porque sino el trabajo es mucho más laborioso...
private function Formatear(Texto as string, byval Ancho as integer, byval Alineacion as AlineacionHorizontal) as string
    dim k as integer, j as integer, s as string 
 
    k = (Ancho - printer.textwidth(texto))
    j = (k \ printer.textwidth(" ")) ' siendo monoespaciada, da igual que carácter sea...
 
    if (Alineacion  = IZQUIERDA) then
        if (k > 0) then   ' añadir espacios...
            s = (Texto & space$(j))
        elseif (K < 0) then  ' cortar texto.
            s = (left$( Texto, len(texto) + j)) ' j es negativo, luego la suma, resta...
        else 
            s = texto
        end if
    elseif (alineacion = CENTRO) then
        '  ' Solo consideor alineación izquierda, el resto quedaría a tu esfuerzo
    else ' DERECHA
        '  ' Solo considero alineación izquierda, el resto quedaría a tu esfuerzo
    end if
 
    Formatear = s
end function
 
Si estás completamente seguro que no se dan los casos etiquetados al comienzo como: 'A' y 'C', puede hacerse más directo (menos código, pero más ineficiente) y en general puede cambiarse cosas aquí y allá según el caso concreto de que se trate...
private function ListarEnColumnas(byref lista as listbox, byval numCols as integer, byval MargenIzquierdo as integer, byval AnchoPapel as integer)
    dim filas as long
    dim ultimafila as long
    dim k as long, j as long, i as integer, n as integer, anchocol as integer 
    dim linea as string
    din fuente as stdfont
 
 
    set fuente = printer.font
    printer.fontname =  "Courier New" ' una fuente monoespaciada, si no el trabajo es más laborioso...
    filas = ((lista.listcount +1) \ numcols)
    ultimafila = ((lista.listcount +1) mod numcols)  ' columnas que tendrá la última fila.
    AnchoCol = ((AnchoPapel  - MargenIzquierdo )\numcols)
 
 
    for k = 0 to filas -1  
        n = Margen               
        for i = 0 to numcols -1
            printer.currentx = n  ' imprime el texto de la columna 'i'
            imprimir lista.list(j+i) 
            n = (n + AnchoCol)
        next
 
        j = (j+NumCols)
        printer.currenty = (printer.currenty + printer.textheight("t"))  ' el textheight depende de la fuente seleccionada en la impresora, no importa el texto entre paréntesis... es fijo para la  fuente. 
    next
 
    if (ultimafila > 0) then' la última fila tiene 1 o más columnas, pero menos que 'numcols'.
        n = Margen               
        for i = 0 to ultimafila -1
            printer.currentx = n  ' imprime el texto de la columna 'i'
            imprimir lista.list(j+i) 
            n = (n + AnchoCol)
        next
    end if
 
    set printer.font = fuente
end function
 
Todo el código es genérico y requiere adaptación al caso concreto y retocar algunas cosas... por ejemplo es típico tener que pelearse con el 'scalemode'... Margen y AnchoPapel (y por extenson anchoCol) son dependientes de dicho valor, así como TextWidth y TextHeight, CurrentX y CurrentY... Si no se opera para todos con la misma escala, hay desajustes.
editado: 
donde ponía: imprimir lista.list(j+n)  <---- imprimir, si el objeto es la impresora, sería: printer.print
debe poner: imprimir lista.list(j+i)
Faltaba restablecer la fuente al final d ela función: set printer.font = fuente