你好,我想问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文档,我希望的是每次都存在同一个文档当中,可以帮帮我吗?
展开
 我来答
三心全乱
2013-04-10 · TA获得超过6158个赞
知道小有建树答主
回答量:518
采纳率:100%
帮助的人:222万
展开全部
  这三句放到公共变量
  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的时候就可以执行那几句了。
niceasdfa11
2013-04-10 · TA获得超过263个赞
知道小有建树答主
回答量:444
采纳率:100%
帮助的人:358万
展开全部
Set xlbook = xlapp.Workbooks.Add

你这里用的是add啊 add就是添加个新的workbook
你改用open(filename) 就可以了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zx001z7d53
2013-04-10 · TA获得超过2万个赞
知道大有可为答主
回答量:2.4万
采纳率:52%
帮助的人:5719万
展开全部
同一文档写是没问题,但这个文档开着不可能刷新到最新数据。其它问题可以HI我或QQ联系
来自:求助得到的回答
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式