Es que la sub tiene algunos fallos, como incluir un textbox que no existe y luego restando k-val(k) en lugar de poner simplemente 0.
Tambien tienes que tener en cuenta que lo que espera la funcion es un textbox, de modo que si le mandas una celda de una grilla puede no servir.
De todas formas esta función hace lo contrario de lo que tu buscas porque lo que imprime es un textbox tal cual se muestra en la ventana, con tantas lineas como muestre el textbox.
Esta debería ser la sub correcta. Que me corrijan si me equivoco.
Código vb:
Ver originalPrivate Sub ImprimirPorLinea(qControl As TextBox)
Dim i As Long, k As Long
Dim L1 As Long, L2 As Long
Const EM_GETLINECOUNT = &HBA
Const EM_LINEFROMCHAR = &HC9
Const EM_LINELENGTH = &HC1
Const EM_LINEINDEX = &HBB
' Obtenemos el Número de líneas del TextBox
k = SendMessage(qControl.hwnd, EM_GETLINECOUNT, 0, 0&)
Printer.Print ""
For i = 0 To k - 1
L1 = SendMessage(qControl.hwnd, EM_LINEINDEX, i, 0&) + 1
L2 = SendMessage(qControl.hwnd, EM_LINELENGTH, L1, 0&)
Printer.Print Mid$(qControl.Text, L1, L2)
Next
Printer.EndDoc
End Sub
Se usaría así:
ImprimirPorLinea Text1
Lo que tu necesitarías sería quitar los saltos de línea. Para eso quizá te valga con reemplazar los saltos de línea por espacios:
Suponiendo que tienes el texto a imprimir en una variable llamada Texto, sería:
Printer.print Replace(Texto, vbcrlf, " ")
Saludos