2016-02-05 27 views
1

更新#2:我将Set ExcelBook = Workbooks.Add行分割为2行(Workbooks.AddSet ExcelBook = ActiveWorkbook),并且仍然会随机接收错误。它不会每次都发生,但是当它发生时,它会将我指向Workbooks.Add(仍然收到相同类型的不匹配错误)。添加新工作簿时不匹配错误

Sub NewWorkbook(CompanyName As String, OutputDirectory As String, Scenario As String) 

Dim ExcelBook As Workbook 
Dim CopyArea As Range 

Set CopyArea = Range("CopyArea") 
Workbooks.Add 
Set ExcelBook = ActiveWorkbook 

CopyArea.Copy 

ExcelBook.Sheets("Sheet1").Range("A1").PasteSpecial xlPasteValues 
ExcelBook.Sheets("Sheet1").Range("A1").PasteSpecial xlPasteFormats 
ExcelBook.Sheets("Sheet1").Columns(2).EntireColumn.Delete 
ExcelBook.Sheets("Sheet1").Rows(6).EntireRow.Delete 
ExcelBook.Sheets("Sheet1").Cells.EntireColumn.AutoFit 

Application.DisplayAlerts = False 
ExcelBook.Close SaveChanges:=True, Filename:=OutputDirectory + "\" + Replace(Replace(Replace(CompanyName, "\", ""), "/", ""), ":", "") + " - " + Scenario + ".xlsx" 
Application.DisplayAlerts = True 

Set ExcelBook = Nothing 
Set CopyArea = Nothing    

End Sub 

更新:我已重新工作的代码来删除选择/激活,但我仍然得到随机不匹配的错误。当我收到错误时,似乎是在创建新的工作簿,但在此之后停止(在收到错误并选择'结束'之后,有一个空白工作簿以前不存在)。

原文描述:我在'Set ExcelBook = Workbooks.add'行上面的代码中收到不匹配错误。奇怪的是,每次都不会发生错误(我似乎无法找到任何模式,为什么有时会发生,而不是其他情况)。

我有另一个宏,在'For'循环中调用下面的代码。有时它会成功完成,其他时间会在第一次迭代时出错,第五次迭代中的其他时间等。

有什么想法?

+0

*另一个在'For'循环中调用下面的代码的宏* - 另一个宏是否也写在Excel中?或者你从另一个应用程序调用它?另请阅读[如何避免选择](http://stackoverflow.com/questions/10714251/how-to-avoid-using-select-in-excel-vba-macros) –

+0

是的,所有的宏都在相同的工作簿(AAAAA.xlsm)。我现在会看看链接的帖子,谢谢。 –

+0

当它导致错误时,它是否创建工作簿? – vacip

回答

0

该错误可能是由于在范围分配,改变缺乏规范:

Set CopyArea = Range("CopyArea") 

Set CopyArea = ThisWorkbook.Sheets(1).Range("CopyArea") 

或更改号码,你的表的名称。

+0

该行代码后出现错误。确切的行是'Set ExcelBook = Workbooks.Add'。每次都不会发生。似乎是随机的。 –

0

我将Workbooks.Add更改为Application.Workbooks.Add,它似乎有所帮助。

我仍然随机获得不匹配错误,但它不太频繁。我会继续努力并进一步完善。

0

试试看看这个代码。该工作簿已创建并在同一命令中分配给该变量。

Sub Test() 

    NewWorkbook "aZ\A", "\\OutputdirectoryServer\Test", "ScenarioA" 

End Sub 

Sub NewWorkbook(CompanyName As String, OutputDirectory As String, Scenario As String) 

    Dim ExcelBook As Workbook 
    Dim CopyArea As Range 

    'Create a new workbook with 1 sheet and assign it to the variable. 
    Set ExcelBook = Workbooks.Add(xlWBATWorksheet) 

    With ExcelBook.Worksheets(1) 

     'Update this line to look at the correct sheet. 
     ThisWorkbook.Worksheets("Sheet2").Range("CopyArea").Copy 

     With .Range("A1") 
      .PasteSpecial xlPasteValues 
      .PasteSpecial xlPasteFormats 
     End With 

     .Columns(2).EntireColumn.Delete 
     .Rows(6).EntireRow.Delete 
     .Cells.EntireColumn.AutoFit 
    End With 

    'Save the file using the correct fileformat. 
    'For an existing file, the default format is the last file format specified; 
    'for a new file, the default is the format of the version of Excel being used. 
    Application.DisplayAlerts = False 
    ExcelBook.SaveAs OutputDirectory & "\" & _ 
     Replace(Replace(Replace(CompanyName, "\", ""), "/", ""), ":", "") & " - " & Scenario & ".xlsx", _ 
     FileFormat:=51 
    ExcelBook.Close False 
    Application.DisplayAlerts = True 

    Set ExcelBook = Nothing 
    Set CopyArea = Nothing 

End Sub 
+0

没有运气。错误发生在行Set ExcelBook = Workbooks.Add(xlWBATWorksheet)'。今天在迭代#2-4周围发生的情况相当一致。 –

+0

此外,我将错误结果打印到日志文件中,似乎同一行触发了“对象变量或块变量未设置”错误以及.... –

相关问题