尝试从新创建的工作簿中删除工作表时出现运行时错误 - Outlook VBA

时间:2017-05-17 00:30:11

标签: vba excel-vba outlook outlook-vba excel

我有一个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”的工作表指定的目录中。

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

1 个答案:

答案 0 :(得分:2)

像这样:

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