你好,我想问VB的问题。代码如下
PrivateSubCommand6_Click()DimiAsInteger,jAsIntegerDimxlappAsExcel.ApplicationDimxlboo...
Private Sub Command6_Click()
Dim i As Integer, j As Integer
Dim xlapp As Excel.Application
Dim xlbook As Excel.Workbook
Dim xlsheet As Excel.Worksheet
Set xlapp = CreateObject("excel.application")
xlapp.Visible = True
Set xlbook = xlapp.Workbooks.Add
Set xlsheet = xlbook.Worksheets(1)
For i = 0 To DataGrid1.Columns.Count - 1
xlsheet.Cells(1, i + 1) = DataGrid1.Columns(i).Caption
Next i
i = 0
Do While (Adodc1.Recordset.EOF = False)
For j = 0 To Int(DataGrid1.Columns.Count - 1)
DataGrid1.Col = j
xlsheet.Cells(i + 2, j + 1) = DataGrid1.Text
Next j
Adodc1.Recordset.MoveNext
i = i + 1
Loop
xlapp.ActiveSheet.Protect "123", DrawingObjects:=True, _
Contents:=True, Scenarios:=True '这是密码,可要可不要
Set xlapp = Nothing
Set xlbook = Nothing
Set xlapp = Nothing
Set xlbook = Nothing
Adodc1.Recordset.MoveFirst
End Sub
目前是每按一次出来一个excel文档,我希望的是每次都存在同一个文档当中,可以帮帮我吗? 展开
Dim i As Integer, j As Integer
Dim xlapp As Excel.Application
Dim xlbook As Excel.Workbook
Dim xlsheet As Excel.Worksheet
Set xlapp = CreateObject("excel.application")
xlapp.Visible = True
Set xlbook = xlapp.Workbooks.Add
Set xlsheet = xlbook.Worksheets(1)
For i = 0 To DataGrid1.Columns.Count - 1
xlsheet.Cells(1, i + 1) = DataGrid1.Columns(i).Caption
Next i
i = 0
Do While (Adodc1.Recordset.EOF = False)
For j = 0 To Int(DataGrid1.Columns.Count - 1)
DataGrid1.Col = j
xlsheet.Cells(i + 2, j + 1) = DataGrid1.Text
Next j
Adodc1.Recordset.MoveNext
i = i + 1
Loop
xlapp.ActiveSheet.Protect "123", DrawingObjects:=True, _
Contents:=True, Scenarios:=True '这是密码,可要可不要
Set xlapp = Nothing
Set xlbook = Nothing
Set xlapp = Nothing
Set xlbook = Nothing
Adodc1.Recordset.MoveFirst
End Sub
目前是每按一次出来一个excel文档,我希望的是每次都存在同一个文档当中,可以帮帮我吗? 展开
3个回答
展开全部
这三句放到公共变量
Dim xlapp As Excel.Application
Dim xlbook As Excel.Workbook
Dim xlsheet As Excel.Worksheet
这4句放到窗体的load事件中
Set xlapp = CreateObject("excel.application") '这句话运行一次就有一个新的excel窗口出来,即一个新的应用程序
xlapp.Visible = True
Set xlbook = xlapp.Workbooks.Add ‘这句话运行一次就有一个新的工作簿文件出来,工作簿就在xlapp这个窗口里面
Set xlsheet = xlbook.Worksheets(1) ‘‘这句话获取xlbook工作簿里面第二个sheet表。一般默认一个工作簿新建后有三张表,如果不够用就用 xlbook.Worksheets.add增加
理解上面三个层次关系,就可以自由控制 应用程序 ----- 工作簿 ------- 数据表 的数量了
这4句放到窗体的closing事件中,closed事件也可以,只要系统不报错就行
Set xlapp = Nothing
Set xlbook = Nothing
Set xlapp = Nothing
Set xlbook = Nothing
Dim xlapp As Excel.Application
Dim xlbook As Excel.Workbook
Dim xlsheet As Excel.Worksheet
这4句放到窗体的load事件中
Set xlapp = CreateObject("excel.application") '这句话运行一次就有一个新的excel窗口出来,即一个新的应用程序
xlapp.Visible = True
Set xlbook = xlapp.Workbooks.Add ‘这句话运行一次就有一个新的工作簿文件出来,工作簿就在xlapp这个窗口里面
Set xlsheet = xlbook.Worksheets(1) ‘‘这句话获取xlbook工作簿里面第二个sheet表。一般默认一个工作簿新建后有三张表,如果不够用就用 xlbook.Worksheets.add增加
理解上面三个层次关系,就可以自由控制 应用程序 ----- 工作簿 ------- 数据表 的数量了
这4句放到窗体的closing事件中,closed事件也可以,只要系统不报错就行
Set xlapp = Nothing
Set xlbook = Nothing
Set xlapp = Nothing
Set xlbook = Nothing
更多追问追答
追问
按你所说的确实能只放入一个excel中,但是每次都会覆盖之前的数据,希望能够把每次的数据同时记录到一个表中。 最后四句我放入form_unload中了,未报错,但因不知其原理,所以不知道对不对。
追答
现在要先设想好整个操作,是要每次都放到同一张表,还是对当前操作都放到同一张表?如果是所有操作都放到同一张表,那就必须保存excel文件了,以后用打开excel文件的方式来获得一个workbook。
不管是新workbook还是打开旧的workbook,如果要从上次最后一行后面开始接着写入,下面的方法可以获取excel的已用区域的最后一行行号,用以下语句
xlsheet.UsedRange.Rows.Count + xlsheet.UsedRange.Row - 1
UsedRange就是已用区域,row是这个区域第一行的行号,rows.count是区域总行数,两者的和减1就是最后一行行号。
还有一个问题就是第一次写入时要执行写入标题行的过程,第二次开始就不用了。
For i = 0 To DataGrid1.Columns.Count - 1
xlsheet.Cells(1, i + 1) = DataGrid1.Columns(i).Caption
Next i
这个很简单,判断xlsheet的.UsedRange.Rows.Count是否为0,等于0说明没有写入过,从标题行开始写。如果写入过,就按上面的方式找到最后一行,从下一行开始写数据。
最后四句放入form_unload中,没报错就可以了,那几句是清理内存用的,反正在你已经不需要再调用xlsheet的时候就可以执行那几句了。
展开全部
Set xlbook = xlapp.Workbooks.Add
你这里用的是add啊 add就是添加个新的workbook
你改用open(filename) 就可以了
你这里用的是add啊 add就是添加个新的workbook
你改用open(filename) 就可以了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
同一文档写是没问题,但这个文档开着不可能刷新到最新数据。其它问题可以HI我或QQ联系
来自:求助得到的回答
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询