Vba 添加新工作簿时出现不匹配错误

Vba 添加新工作簿时出现不匹配错误,vba,excel,Vba,Excel,更新2:我已经从Set-ExcelBook=Workbook中拆分了行。添加到两个单独的行Workbook。添加并设置ExcelBook=ActiveWorkbook,我仍然随机收到错误。它并不是每次都发生,但当它发生时,它会将我指向行工作簿。Add仍然收到相同的类型不匹配错误 Sub NewWorkbook(CompanyName As String, OutputDirectory As String, Scenario As String) Dim ExcelBook As Workbo

更新2:我已经从Set-ExcelBook=Workbook中拆分了行。添加到两个单独的行Workbook。添加并设置ExcelBook=ActiveWorkbook,我仍然随机收到错误。它并不是每次都发生,但当它发生时,它会将我指向行工作簿。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”循环中调用下面的代码。有时会成功完成,有时会在第一次迭代时出错,有时会在第五次迭代时出错,等等


有什么想法吗

错误可能是由于缺少范围分配的规范,更改:

Set CopyArea = Range("CopyArea")


或者将编号更改为工作表的名称。

该错误可能是由于缺少范围分配的规范,请更改:

Set CopyArea = Range("CopyArea")

或者将编号更改为工作表的名称。

我更改了工作簿。添加到Application.Workbooks.Add,似乎有帮助

我仍然随机地得到失配错误,但它的频率要低一点。我将继续尝试并进一步完善。

我更改了工作簿。添加到Application.Workbooks.Add,它似乎有所帮助


我仍然随机地得到失配错误,但它的频率要低一点。我将继续尝试并进一步完善。

尝试此代码。工作簿将在同一命令中创建并分配给变量

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

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

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

另一个宏在“For”循环中调用下面的代码-另一个宏也是用Excel编写的吗?还是从另一个应用程序调用它?另请阅读“是”,所有宏都在同一工作簿AAAAA.xlsm中。现在我将查看链接文章,谢谢。当它导致错误时,它是否创建工作簿?此外,错误说明了什么?我得到错误:类型不匹配,它将我指向“Set ExcelBook=Workbooks.Add”行。关闭错误框后,出现了一个新的Excel工作簿,因此它似乎正在创建它。另一个宏在“For”循环中调用以下代码-另一个宏是否也用Excel编写?还是从另一个应用程序调用它?另请阅读“是”,所有宏都在同一工作簿AAAAA.xlsm中。现在我将查看链接文章,谢谢。当它导致错误时,它是否创建工作簿?此外,错误说明了什么?我得到错误:类型不匹配,它将我指向“Set ExcelBook=Workbooks.Add”行。关闭错误框后,会出现一个新的Excel工作簿,因此它似乎正在创建它。错误发生在该行代码之后。确切的行是“Set ExcelBook=Workbooks.Add”。也不是每次都会发生。似乎是随机的。错误发生在该行代码之后。确切的行是“Set ExcelBook=Workbooks.Add”。也不是每次都会发生。似乎是随机的,没有运气。行集合ExcelBook=Workbooks.addxlwbatsheet上发生错误。在今天的迭代2-4前后一直在发生。此外,我将错误结果打印到日志文件中,似乎同一行正在触发对象变量或块变量未设置错误…不走运。行集合ExcelBook=Workbooks.addxlwbatsheet上发生错误。在今天的迭代2-4前后一直在发生。此外,我将错误结果打印到日志文件中,似乎同一行正在触发对象变量或块变量未设置错误。。。。