当前位置:编程学习 > VB >>

急~在线等~datagrid输出到excel问题

Private Sub CommandPrint_Click()
Dim i As Integer
    Dim j As Integer
    Dim k As Integer
    Dim q As String
    Dim ex As Object
    Dim exwbook As Object
    Dim exsheet As Object
    
    Set ex = CreateObject("Excel.Application")
    Set exwbook = Nothing
    Set exsheet = Nothing
    Set exwbook = ex.Workbooks.Open(App.Path & "\2.xls")
    ex.Visible = True
    Set exsheet = exwbook.Worksheets("sheet1")
    
    
    ex.Range("c3").Value = "序号"
    ex.Range("d3").Value = "姓名"
    ex.Range("e3").Value = "卡号"
    ex.Range("f3").Value = "受控站"
    ex.Range("g3").Value = "时间"
    ex.Range("h3").Value = "集控站"
    ex.Range("i3").Value = "次数"
    ex.Range("j3").Value = "原始卡号"
    ex.Range("k3").Value = "状态"
   
    'i为记录个数使用循环将数据全部添加
    For i = 0 To Mrs.RecordCount
     j = 4 + i
    'k为数据列数
    For k = 0 To 8
    '通过使用变量k和j变换单元格位置
     q = Chr(99 + k) & j
    '将datagrid1的数据放到单元格内
    ex.Range(q).Value = DataGrid1.Columns(k)
    Next k

    If Mrs.EOF = False Then
    Mrs.MoveNext
    End If
    
    Next i
    
    '保存输入到事故信息查询结果.xls
  ex.Save
ex.Quit
MsgBox "数据已导入到根目录下的2.xls中"

Set ex = Nothing
End Sub

我通过上面的一段程序将datagrid里面查询的结果输出到excel2003中,excel中也确实有了输出的内容,但是输出结束后又跳出来一个错误窗口
  vb 实时错误 ‘1004’
   数据访问错误

点击调试后,显示在代码中红色的一行

各位GGJJ们这个我哪里错了啊~ --------------------编程问答-------------------- 我已经解决了HOHO --------------------编程问答--------------------

Private Sub CommandPrint_Click() 
    Dim i As Integer 
    Dim j As Integer 
    Dim k As Integer 
    Dim q As String 
    Dim ex As Object 
    Dim exwbook As Object 
    Dim exsheet As Object 
    On Error Resume Next
    Set ex = CreateObject("Excel.Application") 
    Set exwbook = Nothing 
    Set exsheet = Nothing 
    Set exwbook = ex.Workbooks.Open(App.Path & "\2.xls") 
    ex.Visible = True 
    Set exsheet = exwbook.Worksheets("sheet1") 
    ex.Range("c3").Value = "序号" 
    ex.Range("d3").Value = "姓名" 
    ex.Range("e3").Value = "卡号" 
    ex.Range("f3").Value = "受控站" 
    ex.Range("g3").Value = "时间" 
    ex.Range("h3").Value = "集控站" 
    ex.Range("i3").Value = "次数" 
    ex.Range("j3").Value = "原始卡号" 
    ex.Range("k3").Value = "状态" 
    'i为记录个数使用循环将数据全部添加 
    For i = 0 To Mrs.RecordCount 
    j = 4 + i 
    'k为数据列数 
    For k = 0 To 8 
    '通过使用变量k和j变换单元格位置 
    q = Chr(99 + k) & j 
    '将datagrid1的数据放到单元格内 
  ex.Range(q).Value = DataGrid1.Columns(k) 
    Next k 
    If Mrs.EOF = False Then 
    Mrs.MoveNext 
    End If 
    Next i 
    '保存输入到事故信息查询结果.xls 
  ex.Save 
ex.Quit 
MsgBox "数据已导入到根目录下的2.xls中" 
Set ex = Nothing 
End Sub 
--------------------编程问答--------------------
引用 1 楼 april2775 的回复:
我已经解决了HOHO


jf --------------------编程问答-------------------- Excel 的列是不能为A5,A6,只有AA,AB 的
这里
    For i = 0 To Mrs.RecordCount 
    j = 4 + i 
    'k为数据列数 
    For k = 0 To 8 
    '通过使用变量k和j变换单元格位置 
    q = Chr(99 + k) & j 
    '将datagrid1的数据放到单元格内 
  ex.Range(q).Value = DataGrid1.Columns(k) 
    Next k 

你要取Excel的列名给你一个函数
alngNum这个参数可以直接传入I变量
Public Function GetColumnName(ByRef alngNum As Long) As String
'获取Excel的列名,即数字转A-Z的26进制

    Dim lngNum As Long
    Dim lngI As Long
    Dim strColumn As String
    
    strColumn = ""
    lngNum = alngNum
    
    While lngNum >= 26
        
        lngI = lngNum Mod 26
        lngNum = lngNum \ 26
        strColumn = Chr(65 + lngI) & strColumn
        lngNum = lngNum - 1
        
    Wend
        
    lngI = lngNum Mod 26
    strColumn = Chr(65 + lngI) & strColumn
    GetColumnName = strColumn
    
End Function --------------------编程问答-------------------- 可以的,EXCEL是没有问题的,我后来发现是我的i值有问题,我从0开始的,应该是  For i = 0 To Mrs.RecordCount -1,这样写了后问题就解决了,不过还是谢谢你了~ --------------------编程问答-------------------- ? --------------------编程问答-------------------- ?
补充:VB ,  数据库(包含打印,安装,报表)
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,