访问 VBA 如何将新工作表添加到 Excel?

Posted

技术标签:

【中文标题】访问 VBA 如何将新工作表添加到 Excel?【英文标题】:Access VBA How to add new sheets to excel? 【发布时间】:2009-08-03 10:48:54 【问题描述】:

我正在运行一些代码模块来访问并将数据写入 Excel。当我第一次写入时,数据被正确写入。但又一次 当我尝试时,新数据写在旧数据之上。我该怎么做 插入新工作表?

我现有的代码是

Dim objexcel As Excel.Application
Dim wbexcel As Excel.Workbook
Dim wbExists As Boolean
Dim objSht As Excel.Worksheet
Dim objRange As Excel.Range                                    
Set objexcel = CreateObject("excel.Application")
On Error GoTo Openwb
wbExists = False
Set wbexcel = objexcel.Workbooks.Open("C:\REPORT1.xls")
Set objSht = wbexcel.Worksheets("Sheet1")
objSht.Activate
wbExists = True

Openwb:              
On Error GoTo 0
If Not wbExists Then
    objexcel.Workbooks.Add
    Set wbexcel = objexcel.ActiveWorkbook
    Set objSht = wbexcel.Worksheets("Sheet1")
End If

【问题讨论】:

是的,如果填充了工作表 1,则转到工作表 2,如果填充工作表 2,则转到工作表 3,依此类推。 【参考方案1】:

我认为下面的代码应该做你想做的事。它与您的非常相似,只是它使用 .Add 方法的返回值来获取您想要的对象。

Public Sub YourSub()
    Dim objexcel As Excel.Application
    Dim wbexcel As Excel.Workbook
    Dim wbExists As Boolean
    Set objexcel = CreateObject("excel.Application")

    'This is a bad way of handling errors. We should'
    'instead check for the file existing, having correct'
    'permissions, and so on, and actually stop the process'
    'if an unexpected error occurs.'
    On Error GoTo Openwb
    wbExists = False
    Set wbexcel = objexcel.Workbooks.Open("C:\REPORT1.xls")
    wbExists = True

Openwb:
    On Error GoTo 0
    If Not wbExists Then
        Set wbexcel = objexcel.Workbooks.Add()
    End If

    CopyToWorkbook wbexcel
EndSub

Private Sub CopyToWorkbook(objWorkbook As Excel.Workbook)
    Dim newWorksheet As Excel.Worksheet
    set newWorksheet = objWorkbook.Worksheets.Add()

    'Copy stuff to the worksheet here'
End Sub

【讨论】:

这仍然会执行相同的功能。当我重复运行时,代码数据将只复制到 sheet1 中 我不会拒绝你的答案,因为与问题相关的部分是正确的,但我认为使用 On Error Resume Next 然后 On Error GoTo 0 代码块是非常糟糕的做法.如果有一个您知道可以安全忽略的预期错误,请编写一个错误处理程序来丢弃该错误。否则,您将面临忽略不应丢弃的重大错误的危险。 哦,我同意 - 我从 tksy 的代码中复制了那段代码。我本可以更改它以检查文件是否存在和设置的权限等等,但我决定他最了解。不过你是对的,所以我会编辑我的答案,注意这不是一个好方法。 在尝试打开之前检查工作簿是否存在不是更简单吗? If Len(Dir("C:\REPORT1.xls")) = 0 然后创建工作簿 如果它存在,但用户无权访问它怎么办?我个人认为只使用空白工作簿更简单,但我想 tksy 想追加到现有的。

以上是关于访问 VBA 如何将新工作表添加到 Excel?的主要内容,如果未能解决你的问题,请参考以下文章

将控件(ActiveX或非ActiveX)添加到图表(Excel VBA)

将excel工作表数据从excel vba传输到访问表给出错误

Excel vba以编程方式将代码添加到工作表模块

C#互操作:将新工作表添加到现有文件后,excel进程未退出[重复]

在 Excel 中将某些特定单元格从一个工作表复制到另一个工作表的 VBA 可能是啥?

VBA excel添加新工作表并删除原来的