我要将MSFlexGrid中的所有数据打印出来。我设置的每页打印100个数据,当MSFlexGrid中的行数超过100时就分页打印。可是我的代码在打印过程中每次都显示下标越界,寻求各位的帮忙。
Private Sub Command6_Click()Dim i, w, a, b As Integer
Dim v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13 As Integerv1 = 20
v2 = v1 + MSFlexGrid1.ColWidth(0) * 1.1      '高度
v3 = v2 + MSFlexGrid1.ColWidth(1) * 1.5     '容量
v4 = v3 + MSFlexGrid1.ColWidth(0) * 1.1    '药品名称
v5 = v4 + MSFlexGrid1.ColWidth(1) * 1.5      '规格
v6 = v5 + MSFlexGrid1.ColWidth(0) * 1.1    '产地
v7 = v6 + MSFlexGrid1.ColWidth(1) * 1.5  '批号
v8 = v7 + MSFlexGrid1.ColWidth(0) * 1.1     '有效期
v9 = v8 + MSFlexGrid1.ColWidth(1) * 1.5     '单位
v13 = 11500Dim m As Integer         '总记录数
Dim N As Integer         '每页记录数
Dim ii As Integer         '总页数
Dim j As Integer         '页码数
Dim k As Integer         '每页起始记录控制m = MSFlexGrid2.Rows - 1 '总记录数
N = 100         '每页 20 条记录
b = m Mod N
If Int(m / N) - m / N = 0 Then
    ii = m / N
Else
    ii = Int(m / N) + 1
End IfPrinter.Height = 750 + 300 + 80 * N + 900 + 3000  '定义纸张高度----根据每页记录数
Printer.Width = 12000                              '定义纸张宽度For j = 1 To ii             '外循环控制打印页数
   
    Printer.CurrentX = 4000
    Printer.CurrentY = 1000
    Printer.FontSize = 24
    Printer.FontName = "宋体"
    Printer.Print "汽车油罐容积表 "    Printer.CurrentX = 9250   '页码置于左上角
    Printer.CurrentY = 1000
    Printer.FontSize = 14
    Printer.Print "第 " + Trim(Str(j)) + " 页 共 " & Trim(Str(ii)) + " 页"
    Printer.CurrentX = 400
    Printer.CurrentY = 2100
    Printer.FontSize = 12
    Printer.Print "车号:"
    Printer.CurrentX = 4800
    Printer.CurrentY = 2100
    Printer.FontSize = 12
    Printer.Print "油罐口总高:"
    
    
    Printer.CurrentX = 8800
    Printer.CurrentY = 2100
    Printer.FontSize = 12
    Printer.Print "单位:毫米"
    
    
    
    '列标题
    'A -------- 表主体纵向高度
    a = 2500
    Printer.Line (v1, a)-(v13, a)             '画顶横线
    
    If MSFlexGrid2.ColWidth(0) > 0 Then     '第1列
       Printer.Line (v1, a)-(v1, a + 450)      '画左坚边线
       Printer.CurrentX = 200
       Printer.CurrentY = a + 100
       Printer.FontSize = 10
       Printer.Print "高度"
     End If
     If MSFlexGrid2.ColWidth(1) > 0 Then      '第2列
       Printer.Line (v2, a)-(v2, a + 450)
       Printer.CurrentX = v2 + 40
       Printer.CurrentY = a + 100
       Printer.FontSize = 10
       Printer.Print "容量(L)"
     End If
     If MSFlexGrid2.ColWidth(0) > 0 Then      '第3列
       Printer.Line (v3, a)-(v3, a + 450)
       Printer.CurrentX = v3 + 40
       Printer.CurrentY = a + 100
       Printer.FontSize = 10
       Printer.Print "高度"
     End If
     If MSFlexGrid2.ColWidth(1) > 0 Then      '第4列
       Printer.Line (v4, a)-(v4, a + 450)
       Printer.CurrentX = v4 + 40
       Printer.CurrentY = a + 100
       Printer.FontSize = 10
       Printer.Print "容量(L)"
     End If
     If MSFlexGrid2.ColWidth(0) > 0 Then       '第5列
       Printer.Line (v5, a)-(v5, a + 450)
       Printer.CurrentX = v5 + 40
       Printer.CurrentY = a + 100
       Printer.FontSize = 10
       Printer.Print "高度"
     End If
     If MSFlexGrid2.ColWidth(1) > 0 Then        '第6列
       Printer.Line (v6, a)-(v6, a + 450)
       Printer.CurrentX = v6 + 40
       Printer.CurrentY = a + 100
       Printer.FontSize = 10
       Printer.Print "容量(L)"
     End If
     If MSFlexGrid2.ColWidth(0) > 0 Then       '第7列
       Printer.Line (v7, a)-(v7, a + 450)
       Printer.CurrentX = v7 + 40
       Printer.CurrentY = a + 100
       Printer.FontSize = 10
       Printer.Print "高度"
     End If
     If MSFlexGrid2.ColWidth(1) > 0 Then       '第8列
       Printer.Line (v8, a)-(v8, a + 450)
       Printer.CurrentX = v8 + 40
       Printer.CurrentY = a + 100
       Printer.FontSize = 10
       Printer.Print "容量(L)"
       Printer.Line (v9 + 10, a)-(v9 + 10, a + 450) '画右坚边线(封口)     End If     a = 2950  'A -------- 表主体纵向高度
    Printer.Line (v1, a)-(v13, a) '画横线
    
    If j = 1 Then  'k 每页起始记录控制
       k = 1       'k=0 表示第1行,k=1 表示第2行
    Else
       k = (j - 1) * N + 1
    End If
        For i = k To m - (ii - j) * N '内循环控制每页打印-------------分页打印
     
     If MSFlexGrid2.ColWidth(0) > 0 Then        '第1列
       Printer.Line (v1, a)-(v1, a + 450)      '画左坚边线
       Printer.CurrentX = 50
       Printer.CurrentY = a + 100
       Printer.FontSize = 10
    If MSFlexGrid2.TextMatrix(i, 0) <> "" Then   'i=0 时为第1行,标题行
         Printer.Print MSFlexGrid2.TextMatrix(i, 0)
       End If
     End If
   
     If MSFlexGrid2.ColWidth(1) > 0 Then         '第2列
       Printer.Line (v2, a)-(v2, a + 450)
       Printer.CurrentX = v2 + 10
       Printer.CurrentY = a + 100
       Printer.FontSize = 10
   If MSFlexGrid2.TextMatrix(i, 1) <> "" Then
         Printer.Print MSFlexGrid2.TextMatrix(i, 1)
       End If     End If
      i = i + 1
     If MSFlexGrid2.ColWidth(0) > 0 Then        '第3列
       Printer.Line (v3, a)-(v3, a + 450)      '画左坚边线
       Printer.CurrentX = v3 + 10
       Printer.CurrentY = a + 100
       Printer.FontSize = 10
     If MSFlexGrid2.TextMatrix(i, 0) <> "" Then   'i=0 时为第1行,标题行
         Printer.Print MSFlexGrid2.TextMatrix(i, 0)
       End If
     End If
     If MSFlexGrid2.ColWidth(1) > 0 Then         '第4列
       Printer.Line (v4, a)-(v4, a + 450)
       Printer.CurrentX = v4 + 10
       Printer.CurrentY = a + 100
       Printer.FontSize = 10
       If MSFlexGrid2.TextMatrix(i, 1) <> "" Then
         Printer.Print MSFlexGrid2.TextMatrix(i, 1)
       End If
     End If
      i = i + 1
     If MSFlexGrid2.ColWidth(0) > 0 Then        '第5列
       Printer.Line (v5, a)-(v5, a + 450)      '画左坚边线
       Printer.CurrentX = v5 + 10
       Printer.CurrentY = a + 100
       Printer.FontSize = 10
       If MSFlexGrid2.TextMatrix(i, 0) <> "" Then   'i=0 时为第1行,标题行
         Printer.Print MSFlexGrid2.TextMatrix(i, 0)
       End If
     End If
     
     If MSFlexGrid2.ColWidth(1) > 0 Then         '第6列
       Printer.Line (v6, a)-(v6, a + 450)
       Printer.CurrentX = v6 + 10
       Printer.CurrentY = a + 100
       Printer.FontSize = 10
     If MSFlexGrid2.TextMatrix(i, 1) <> "" Then
         Printer.Print MSFlexGrid2.TextMatrix(i, 1)
       End If
     End If
       i = i + 1
    If MSFlexGrid2.ColWidth(0) > 0 Then        '第7列
       Printer.Line (v7, a)-(v7, a + 450)      '画左坚边线
       Printer.CurrentX = v7 + 10
       Printer.CurrentY = a + 100
       Printer.FontSize = 10
      If MSFlexGrid2.TextMatrix(i, 0) <> "" Then   'i=0 时为第1行,标题行
         Printer.Print MSFlexGrid2.TextMatrix(i, 0)
       End If
     End If
   
     If MSFlexGrid2.ColWidth(1) > 0 Then         '第8列
       Printer.Line (v8, a)-(v8, a + 450)
       Printer.CurrentX = v8 + 10
       Printer.CurrentY = a + 100
       Printer.FontSize = 10
       If MSFlexGrid2.TextMatrix(i, 1) <> "" Then
         Printer.Print MSFlexGrid2.TextMatrix(i, 1)
       End If
      Printer.Line (v9, a)-(v9, a + 450)     '画右坚边线(封口)
       End If
      Printer.Line (v1, a + 450)-(v13, a + 450)   '画下边横线
       a = a + 450  '行距每次增加 450
     
    Next i        '内循环结束
    Printer.NewPage   '新的一页
    Printer.EndDoc    '换页
  
Next j   '外循环结束
Call MsgBox("正在打印......!", vbOKOnly + vbInformation, "提示...")
End Sub

解决方案 »

  1.   

    MSFlexGrid2.TextMatrix(i, 0)估计是i值的问题up
      

  2.   

    Private Sub Command6_Click() Dim i, w, a, b As Integer 
    Dim v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13 As Integer v1 = 20 
    v2 = v1 + MSFlexGrid1.ColWidth(0) * 1.1      '高度 
    v3 = v2 + MSFlexGrid1.ColWidth(1) * 1.5    '容量 
    v4 = v3 + MSFlexGrid1.ColWidth(0) * 1.1    '药品名称 
    v5 = v4 + MSFlexGrid1.ColWidth(1) * 1.5      '规格 
    v6 = v5 + MSFlexGrid1.ColWidth(0) * 1.1    '产地 
    v7 = v6 + MSFlexGrid1.ColWidth(1) * 1.5  '批号 
    v8 = v7 + MSFlexGrid1.ColWidth(0) * 1.1    '有效期 
    v9 = v8 + MSFlexGrid1.ColWidth(1) * 1.5    '单位 
    v13 = 11500 Dim m As Integer        '总记录数 
    Dim N As Integer        '每页记录数 
    Dim ii As Integer        '总页数 
    Dim j As Integer        '页码数 
    Dim k As Integer        '每页起始记录控制 m = MSFlexGrid2.Rows - 1 '总记录数 
    N = 100        '每页 20 条记录 
    b = m Mod N 
    If Int(m / N) - m / N = 0 Then 
        ii = m / N 
    Else 
        ii = Int(m / N) + 1 
    End If Printer.Height = 750 + 300 + 80 * N + 900 + 3000  '定义纸张高度----根据每页记录数 
    Printer.Width = 12000                              '定义纸张宽度 For j = 1 To ii            '外循环控制打印页数 
      
        Printer.CurrentX = 4000 
        Printer.CurrentY = 1000 
        Printer.FontSize = 24 
        Printer.FontName = "宋体" 
        Printer.Print "汽车油罐容积表 "     Printer.CurrentX = 9250  '页码置于左上角 
        Printer.CurrentY = 1000 
        Printer.FontSize = 14 
        Printer.Print "第 " + Trim(Str(j)) + " 页 共 " & Trim(Str(ii)) + " 页" 
        Printer.CurrentX = 400 
        Printer.CurrentY = 2100 
        Printer.FontSize = 12 
        Printer.Print "车号:" 
        Printer.CurrentX = 4800 
        Printer.CurrentY = 2100 
        Printer.FontSize = 12 
        Printer.Print "油罐口总高:" 
        
        
        Printer.CurrentX = 8800 
        Printer.CurrentY = 2100 
        Printer.FontSize = 12 
        Printer.Print "单位:毫米" 
        
        
        
        '列标题 
        'A -------- 表主体纵向高度 
        a = 2500 
        Printer.Line (v1, a)-(v13, a)            '画顶横线 
        
        If MSFlexGrid2.ColWidth(0) > 0 Then    '第1列 
          Printer.Line (v1, a)-(v1, a + 450)      '画左坚边线 
          Printer.CurrentX = 200 
          Printer.CurrentY = a + 100 
          Printer.FontSize = 10 
          Printer.Print "高度" 
        End If 
        If MSFlexGrid2.ColWidth(1) > 0 Then      '第2列 
          Printer.Line (v2, a)-(v2, a + 450) 
          Printer.CurrentX = v2 + 40 
          Printer.CurrentY = a + 100 
          Printer.FontSize = 10 
          Printer.Print "容量(L)" 
        End If 
        If MSFlexGrid2.ColWidth(0) > 0 Then      '第3列 
          Printer.Line (v3, a)-(v3, a + 450) 
          Printer.CurrentX = v3 + 40 
          Printer.CurrentY = a + 100 
          Printer.FontSize = 10 
          Printer.Print "高度" 
        End If 
        If MSFlexGrid2.ColWidth(1) > 0 Then      '第4列 
          Printer.Line (v4, a)-(v4, a + 450) 
          Printer.CurrentX = v4 + 40 
          Printer.CurrentY = a + 100 
          Printer.FontSize = 10 
          Printer.Print "容量(L)" 
        End If 
        If MSFlexGrid2.ColWidth(0) > 0 Then      '第5列 
          Printer.Line (v5, a)-(v5, a + 450) 
          Printer.CurrentX = v5 + 40 
          Printer.CurrentY = a + 100 
          Printer.FontSize = 10 
          Printer.Print "高度" 
        End If 
        If MSFlexGrid2.ColWidth(1) > 0 Then        '第6列 
          Printer.Line (v6, a)-(v6, a + 450) 
          Printer.CurrentX = v6 + 40 
          Printer.CurrentY = a + 100 
          Printer.FontSize = 10 
          Printer.Print "容量(L)" 
        End If 
        If MSFlexGrid2.ColWidth(0) > 0 Then      '第7列 
          Printer.Line (v7, a)-(v7, a + 450) 
          Printer.CurrentX = v7 + 40 
          Printer.CurrentY = a + 100 
          Printer.FontSize = 10 
          Printer.Print "高度" 
        End If 
        If MSFlexGrid2.ColWidth(1) > 0 Then      '第8列 
          Printer.Line (v8, a)-(v8, a + 450) 
          Printer.CurrentX = v8 + 40 
          Printer.CurrentY = a + 100 
          Printer.FontSize = 10 
          Printer.Print "容量(L)" 
          Printer.Line (v9 + 10, a)-(v9 + 10, a + 450) '画右坚边线(封口)     End If 
        a = 2950  'A -------- 表主体纵向高度 
        Printer.Line (v1, a)-(v13, a) '画横线 
        
        If j = 1 Then  'k 每页起始记录控制 
          k = 1      'k=0 表示第1行,k=1 表示第2行 
        Else 
          k = (j - 1) * N + 1 
        End If 
        
    ''''''''''''''''''''''''''''''''''''
        For i = k-1 To m - (ii - j) * N '内循环控制每页打印-------------分页打印 
        
        If MSFlexGrid2.ColWidth(0) > 0 Then        '第1列 
          Printer.Line (v1, a)-(v1, a + 450)      '画左坚边线 
          Printer.CurrentX = 50 
          Printer.CurrentY = a + 100 
          Printer.FontSize = 10 
        If MSFlexGrid2.TextMatrix(i, 0) <> "" Then  'i=0 时为第1行,标题行 
            Printer.Print MSFlexGrid2.TextMatrix(i, 0) 
          End If 
        End If 
      
        If MSFlexGrid2.ColWidth(1) > 0 Then        '第2列 
          Printer.Line (v2, a)-(v2, a + 450) 
          Printer.CurrentX = v2 + 10 
          Printer.CurrentY = a + 100 
          Printer.FontSize = 10 
      If MSFlexGrid2.TextMatrix(i, 1) <> "" Then 
            Printer.Print MSFlexGrid2.TextMatrix(i, 1) 
          End If     End If 
          i = i + 1 
        If MSFlexGrid2.ColWidth(0) > 0 Then        '第3列 
          Printer.Line (v3, a)-(v3, a + 450)      '画左坚边线 
          Printer.CurrentX = v3 + 10 
          Printer.CurrentY = a + 100 
          Printer.FontSize = 10 
        If MSFlexGrid2.TextMatrix(i, 0) <> "" Then  'i=0 时为第1行,标题行 
            Printer.Print MSFlexGrid2.TextMatrix(i, 0) 
          End If 
        End If 
        If MSFlexGrid2.ColWidth(1) > 0 Then        '第4列 
          Printer.Line (v4, a)-(v4, a + 450) 
          Printer.CurrentX = v4 + 10 
          Printer.CurrentY = a + 100 
          Printer.FontSize = 10 
          If MSFlexGrid2.TextMatrix(i, 1) <> "" Then 
            Printer.Print MSFlexGrid2.TextMatrix(i, 1) 
          End If 
        End If 
          i = i + 1 
        If MSFlexGrid2.ColWidth(0) > 0 Then        '第5列 
          Printer.Line (v5, a)-(v5, a + 450)      '画左坚边线 
          Printer.CurrentX = v5 + 10 
          Printer.CurrentY = a + 100 
          Printer.FontSize = 10 
          If MSFlexGrid2.TextMatrix(i, 0) <> "" Then  'i=0 时为第1行,标题行 
            Printer.Print MSFlexGrid2.TextMatrix(i, 0) 
          End If 
        End If 
        
        If MSFlexGrid2.ColWidth(1) > 0 Then        '第6列 
          Printer.Line (v6, a)-(v6, a + 450) 
          Printer.CurrentX = v6 + 10 
          Printer.CurrentY = a + 100 
          Printer.FontSize = 10 
        If MSFlexGrid2.TextMatrix(i, 1) <> "" Then 
            Printer.Print MSFlexGrid2.TextMatrix(i, 1) 
          End If 
        End If 
          i = i + 1 
        If MSFlexGrid2.ColWidth(0) > 0 Then        '第7列 
          Printer.Line (v7, a)-(v7, a + 450)      '画左坚边线 
          Printer.CurrentX = v7 + 10 
          Printer.CurrentY = a + 100 
          Printer.FontSize = 10 
          If MSFlexGrid2.TextMatrix(i, 0) <> "" Then  'i=0 时为第1行,标题行 
            Printer.Print MSFlexGrid2.TextMatrix(i, 0) 
          End If 
        End If 
      
        If MSFlexGrid2.ColWidth(1) > 0 Then        '第8列 
          Printer.Line (v8, a)-(v8, a + 450) 
          Printer.CurrentX = v8 + 10 
          Printer.CurrentY = a + 100 
          Printer.FontSize = 10 
          If MSFlexGrid2.TextMatrix(i, 1) <> "" Then 
            Printer.Print MSFlexGrid2.TextMatrix(i, 1) 
          End If 
          Printer.Line (v9, a)-(v9, a + 450)    '画右坚边线(封口) 
          End If 
          Printer.Line (v1, a + 450)-(v13, a + 450)  '画下边横线 
          a = a + 450  '行距每次增加 450 
        
        Next i        '内循环结束 
        Printer.NewPage  '新的一页 
        Printer.EndDoc    '换页 
      
    Next j  '外循环结束 
    Call MsgBox("正在打印......!", vbOKOnly + vbInformation, "提示...") 
    End Sub 
      

  3.   

    这个与打印机有关的
    本人专门研究printer打印,已经有一个关于报表COM发布到本网站
    http://download.csdn.net/source/2780285
    也可以到我们专业VB报表讨论区