我写了个将字符串按等宽的比列换行输出的函数
'***********************************************************
'函数:CutString(s,10)
'功能:将字符串按等宽的比列换行输出
'调用:CutString("123456789",3)
'参数:Str:待截取的字符串,BrN:换行的字符个数
'*************************************************************
Function CutString(Str As String, BrN As Integer) As String
Dim n As Integer
Dim s1 As String
Str = Str
n = Len(Str)
s1 = ""
s2 = ""
For i = 1 To n
    If i Mod BrN = 0 Then
        s1 = Left(Str, BrN)
        Str = Replace(Str, s1, "")
        s2 = s2 & Space(2) & s1 & Chr(10)
    End If
Next
CutString = s2
End Function然后这样纵向输出打印, Printer.Print CutString("西安张家界双飞4日游全球所发送到非", 1)
不知道为什么打印预览的时候只要字符一超过12,整个页面就变乱了,谢谢指点,这个函数改如何修改

解决方案 »

  1.   

    '*********************************************
    '函数:CutString(s,10)
    '功能:将字符串按等宽的比列换行输出
    '调用:CutString("123456789",3)
    '参数:Str:待截取的字符串,BrN:换行的字符个数
    '*********************************************
    Function CutString(Str As String, BrN As Integer) As String
    Dim n As Integer
    Dim s1 As String
    n = Len(Str)
    For i = 1 To n
        If i Mod BrN = 0 Then
            s1 = Left(Str, BrN)
            Str = Replace(Str, s1, "")
            CutString = CutString & s1 & Chr(13)
        End If
    Next
    End FunctionPrivate Sub Command2_Click()            Printer.CurrentX = 20
                Printer.CurrentY = 600
                Printer.FontName = "黑体"
                Printer.FontSize = 12
                Printer.Print CutString("abcd", 1)            Printer.CurrentX = 1200
                Printer.CurrentY = 600
                Printer.FontName = "黑体"
                Printer.FontSize = 12
                Printer.Print CutString("EFGH", 1)
                Printer.EndDoc
    End Sub现在打印输出的结果是:
    +++++++++++++++++++++
    a                  E
    b(F覆盖了b)        
    c(F覆盖了c)        
    d(F覆盖了d)  
          
    而我要的结果是:
    +++++++++++++++++++++
    a                 E
    b                 F
    c                 G
    d                 H
    现在请问CutString函数要如何改进,谢谢!
      

  2.   

    你字符串处理不用那么复杂:
    Option Explicit
    Dim i As Integer
    Dim str1 As StringPrivate Sub Command1_Click()
        Printer.FontSize = 12
        Printer.FontName = "黑体"
        str1 = "abcd"
        For i = 1 To Len(str1)
            Printer.CurrentX = 20
            Printer.CurrentY = 600 + i * 300
            Printer.Print Mid("abcd", i, 1)
        Next
        str1 = "abcd"
        For i = 1 To Len(str1)
            Printer.CurrentX = 1200
            Printer.CurrentY = 600 + i * 300
            Printer.Print Mid("EFGH", i, 1)
        Next
        Printer.EndDoc
    End Sub
      

  3.   

    谢谢楼上的兄弟,这样可以完成我的要求了啊哈哈'str:要打印的字符串
    'y:每个要打印的字符串对应的Y坐标
    Private Sub CutPrint(str As String, y As Integer)
        Dim i As Integer
        Printer.FontSize = 12
        Printer.FontName = "黑体"
        For i = 1 To Len(str)
            Printer.CurrentX = y
            Printer.CurrentY = 300 * (i + 1)
            Printer.Print Mid(str, i, 1)
        Next
    End Sub
    Private Sub Command1_Click()
    '打印第一行
    Call CutPrint("ABCDE", 0)
    '打印第二行
    Call CutPrint("abcde", 1200)
    Printer.EndDoc
    End Sub
      

  4.   

    再次修改了一下^_^
    'str:要打印的字符串
    'x:每个要打印的字符串对应的x坐标
    'y: 每个要打印的字符串对应的y坐标的步长
    Private Sub CutPrint(str As String, x As Integer, y As Integer)
        Dim i As Integer
        Printer.FontSize = 12
        Printer.FontName = "黑体"
        For i = 1 To Len(str)
            Printer.CurrentX = x
            Printer.CurrentY = y * (i - 1)
            Printer.Print Mid(str, i, 1)
        Next
    End Sub
    Private Sub Command1_Click()
    Call CutPrint("ABCDE", 0, 200)
    Call CutPrint("abcde", 1200, 200)
    Call CutPrint("12345", 2400, 200)
    Printer.EndDoc输出结果:
    A   a   1
    B   b   2
    C   c   3
    D   d   4
    E   e   5