【问题标题】:Runtime error when attempting to delete a worksheet from a newly created workbook - Outlook VBA尝试从新创建的工作簿中删除工作表时出现运行时错误 - Outlook VBA
【发布时间】:2017-05-17 00:30:11
【问题描述】:

我有一个 Outlook 宏,可以将用户 Tasklist 导出到存储在网络驱动器上的 Excel 电子表格中。

我正在尝试检查目录中是否已存在工作簿 (If statement taken form here)。

如果没有,则用一个名为“Sheet 1”的工作表创建一个新工作簿,如果已经有一个具有正确用户名的工作表,则打开它 (add statement taken from here):

Dim FilePath As String
Dim TestStr As String
Dim objExcel As New Excel.Application
Dim exWb As Excel.Workbook
Dim NAME_s As String

objExcel.DisplayAlerts = False
 'Use the Application Object to get the Username
 NAME_s = Environ("USERNAME")



    FilePath = "the\directory\" & NAME_s & ".xlsx"

    TestStr = ""
    On Error Resume Next
    TestStr = Dir(FilePath)
    On Error GoTo 0
    If TestStr = "" Then
    Set exWb = objExcel.Workbooks.Add(1)
    exWb.Worksheets(1).Name = "Sheet1_old"

Else
    Set exWb = objExcel.Workbooks.Open("J:\Efficiency Measures\PTaR\" & NAME_s & ".xlsx")
End If

exWb.Sheets.Add().Name = "Sheet1"
exWb.Sheets("Sheet1_old").Delete

当我单步执行 If 语句时,TestStr 值触发了第一个条件,这是正确的,但随后 exWb.Sheets("Sheet1").Delete 行触发了运行时错误(工作簿必须至少包含一个可见工作表)。但我认为拥有objExcel.Workbooks.Add(1) 会将一个新工作簿添加到由一个名为“Sheet 1”的工作表指定的目录中。

如何修改上述代码以确保生成的新工作簿具有“Sheet 1”名称,并保存在FilePath 变量中指定的网络位置?

【问题讨论】:

  • 您无法从工作簿中删除唯一的工作表 - Excel 不“知道”您要添加一个...首先将“Sheet1”重命名为“Sheet1_old”,然后添加新工作表,然后删除“Sheet1_old”
  • @TimWilliams - 谢谢你,但是我将如何修改上面的代码来重命名工作表?我已经更新了上面的代码以显示我将名称更改的位置,但它显示了 438 错误 - 对象不支持此属性

标签: excel vba outlook


【解决方案1】:

像这样:

exWb.Sheets("Sheet1").Name = "Sheet1Old"
exWb.Sheets.Add().Name = "Sheet1"
exWb.Sheets("Sheet1Old").Delete

【讨论】:

  • 谢谢蒂姆 - 这个特定的宏有另一个问题,稍后会发布 - 待机! :P
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多