【问题标题】:Compile Error: Object Required (VBA)编译错误:需要对象 (VBA)
【发布时间】:2018-04-15 06:03:09
【问题描述】:

我的代码应该从一个工作簿中获取联系信息,为列表中的每个人创建一个新的并传输他们的信息。当我尝试运行我的宏时,它在Set pathOrig = ActiveWorkbook.path 行给了我一个错误。它说

编译错误:需要对象

有人知道我的错误是什么吗? (对不起,我的代码中的法语位)

Sub generateFichier()

    Dim orig, dest As Range
    Dim classOrig, classDest As Workbook
    Dim pathOrig As String
    Dim nom, prenom, faitPar As String
    Dim sommeCap, sommeCapActuel As Long

    Set classOrig = ActiveWorkbook
    Set pathOrig = ActiveWorkbook.path

    Set orig = Sheets("clients").Range("A2")

    For i = 1 To 7 Step 1

        nom = orig.Offset(i, 0).Value
        prenom = orig.Offset(i, 1).Value
        sommeCap = orig.Offset(i, 3).Value + orig.Offset(i, 5).Value
        sommeCapActuel = orig.Offset(i, 4).Value + orig.Offset(i, 7).Value
        faitPar = classOrig.Sheets(1).PageSetup.RightFooter

        Dim nomFichier As String
        nomFichier = nom & ".xls"

        Set classDest = Workbooks.Add(pathOrig & "\" & nomFichier)
        classDest.Sheets(1).Range("B1").Value = nom
        classDest.Sheets(1).Range("B2").Value = prenom
        classDest.Sheets(1).Range("A5").Value = sommeCap
        classDest.Sheets(1).Range("B5").Value = sommeCapActuel
        classDest.Sheets(1).Range("B13").Value = faitPar


        For j = 1 To 6 Step 1

            Select Case j

                Case 1 To 3

                    classOrig.Cells(i, j).Value = classDest.Sheets(1).Cells(j + 7, 2).Value

                Case 4 To 6

                    classOrig.Cells(i, j).Value = classDest.Sheets(1).Cells(j + 4, 3).Value

            End Select

        Next j

        classDest.SaveAs Filename:=pathOrig & "\" & nomFichier, FileFormat:=xlNormal

    Next i

End Sub

【问题讨论】:

  • 顺便说一句,它应该是Dim classOrig As Workbook, classDest As Workbook。您需要定义每件或未声明的变体

标签: excel vba


【解决方案1】:

工作簿的路径是指向包含工作簿的文件夹的字符串,而不是工作簿本身。因此,您不要将对象 var 设置为 .Path;您只需将 .Path 分配给字符串变量。

dim pathOrig as string
pathOrig = activeworkbook.path
debug.print pathOrig 

【讨论】:

  • 或者,pathOrig = ThisWorkbook.Path。但这只是我使用 ThisWorkbook 而不是 ActiveWorkbook 的偏好,除非我有理由使用后者。
  • ThisWorkbook 是包含代码的工作簿;这并不总是活动工作簿(最重要的工作簿)。
  • "工作簿的路径是指向包含工作簿的文件夹的字符串,而不是工作簿本身。"这正是我想要的。包含文件夹的路径。我还删除了“设置”部分。现在它只是给我一个错误,说“变量未定义”但不指向任何行。还尝试使用“ThisWorkbook”运行代码,仍然没有运气。
  • 更改此声明 Dim sommeCap As Long, sommeCapActuel As Long, i As Long, j As Long 并记住将所有变量调暗。
  • 错误非常明显,这意味着您没有在代码中声明正在使用的变量。当您收到该错误时,相关变量将以蓝色突出显示。此外,显式声明每个变量的数据类型。例如当您使用Dim orig, dest As Range 时,这仅仅意味着,dest 被声明为Range,orig 被声明为Variant
【解决方案2】:

您不需要“设置”字符串,pathOrig 只是一个字符串,而不是像 classOrig 这样的工作簿对象。

只需从该行中删除 Set 语句,就可以了。

【讨论】:

  • 还有错误声明的变量和未声明的变量的问题。虽然 OP 的代码没有表明他/她正在尝试在 Option Explicit 下运行代码,但从 cmets 看来确实如此。
  • Option Explicit 对自律很有帮助。声明变量所需的额外时间通常会减少调试。
  • 我完全同意。我之所以提出它,是因为一旦操作人员修复了 Set 问题,他/她就有一个未声明的 var 问题,他/她有问题解决。
  • 我实际上使用的是 Option Explicit,我将其删除并从我的代码中删除了“set”,它似乎可以工作。现在编译器设法继续阅读代码并在与此问题无关的其他地方发现错误。感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 2014-03-11
  • 2018-02-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多