设置xWorkb =新工作簿不起作用,ActiveX错误

时间:2014-08-20 21:41:10

标签: vba excel-vba excel

我下面有一些代码,它有点像魅力,但我对某些事情感到好奇。

  • 为什么我不能发表Set xWorkb = new Workbook声明?相反,我使用Dim xWorkb as new Workbook,这是有效的。但是我已经学会了(希望是正确的)在new中使用Dim语句是不好的做法,并且你应该单独创建对象。那么为什么它不起作用呢?我得到一个ActiveX组件不能创建对象错误,但由于xWorkb部分中的新语句,Dim以后仍然作为对象创建?让我感到困惑。

  • 为什么在定义变量excel.application.workbooks时我无法使用xApp?是因为我必须指定一个工作簿而不能像这样将工作簿留空吗?我尝试将excel.application更改为excel.application.workbooks时出现类型不匹配错误。

Sub tester()

    Dim xWorkb As New Workbook
    Dim xApp As Excel.Application: Set xApp = New Excel.Application
    Dim xFiles_target() As Variant
    Dim file_path As String

    xFiles_target = Array("Bella.xls", "Fizz.xls", "Milo.xls", "Jake.xls")
    file_path = Dir("C:\Users\hans\Desktop\")

    Do While Len(file_path) > 0
        Debug.Print file_path
        If UBound(Filter(xFiles_target, file_path)) >= 0 Then
        Debug.Print "found " & file_path
        Set xWorkb = xApp.Workbooks.Open("C:\Users\hans\Desktop\" & file_path)
        xApp.ActiveSheet.Cells(2, 2) = "tester"
        xWorkb.Save
        xWorkb.Close
        End If
        file_path = Dir

    Loop

End Sub

1 个答案:

答案 0 :(得分:3)

您无法使用New创建新工作簿,因为工作簿与Application配合使用,必须使用Workbooks.AddWorkbooks.Open创建。

Dim xWorkb as new Workbook不起作用 - 它似乎有效,因为您在声明它并将其分配给xWorkb之间无法访问Workbooks.Open。如果你这样做,你会得到相同的ActiveX组件不能创建对象错误 该错误是因为Excel.Workbook没有任何公共构造函数。

您无法将变量定义为excel.application.workbooks,因为它不是一种类型。它是名为Workbooks的属性,类型为Excel.Workbooks,属于Application类型为Excel.Application的对象。
您可以将变量声明为Excel.Workbooks,但您可能不想这样做,因为无论如何您都需要创建一个Excel.Application才能使用它。