【问题标题】:VBA Variable not defined when calling Method with Object使用对象调用方法时未定义 VBA 变量
【发布时间】:2018-11-05 21:27:37
【问题描述】:

您好,我是第一次使用 VBA 开发(之前使用的是 vb.net 等)。 我总是收到错误

变量未定义

运行代码时。 在调用方法writeHeaders 时,程序总是退出。

非常感谢您的帮助,这件事让我发疯了。

Option Explicit

Sub exportToAPplus()

    Dim applusImport As Workbook
    Set applusImport = createFile
    writeHeaders applusImport
End Sub

Function createFile() As Workbook

    Dim dateiName As String
    dateiName = Application.GetSaveAsFilename()
    If dateiName <> "Falsch" And dateiName <> "False" Then
        Dim applusImport As Workbook
        dateiName = dateiName + "xlsx"
        Set applusImport = Workbooks.Add
        Application.DisplayAlerts = False
        applusImport.SaveAs dateiName, FileFormat:=xlOpenXMLWorkbook
        Application.DisplayAlerts = True
        Set createFile = applusImport
    Else
        MsgBox ("Sie haben keinen Dateinamen ausgewählt, es wurde nichts 
        gespeichert.")
    End If

End Function

Sub writeHeaders(applusImport As Workbook)
    Dim headers() As Variant
    headers() = Array("DATUM", "AUFTRAG", "PERSONAL", "KSTR", "INNENAUFTRAG", "POSITION", "AG", "KAPAST", "MASCHINENGRUPPE", "START", "ENDE", "DAUER", "BESCHREIBUNG")
    Application.ScreenUpdating = False
    For i = LBound(headers()) To UBound(headers()) Step 1
        .Cells(1, 1 + i).Value = headers(i)
    Next i
    applusImport.Save
    Application.ScreenUpdating = True
End Sub

【问题讨论】:

  • 如果您有错误,请始终说明您收到错误的。 • 此处的错误“变量未定义” 表示您的变量i 未声明。您必须声明它并指定其类型,例如。 Dim i As Long 之前可以使用i
  • 原因是您的明确选项,它要求声明每个变量。如果你省略了我不推荐的选项 explicit,变量 i 将自动被标注为变量
  • 顺便说一句,你不需要循环来写出你的标题。您可以在一行中使用 Cells(1, 1).Resize(1,UBound(headers) + 1) = headers

标签: excel vba


【解决方案1】:

错误

“变量未定义”

表示你使用了一个变量但没有定义它。

您尚未在writeHeaders 中声明的变量是变量i。 您必须先声明它并指定其类型,然后才能使用i

Dim i As Long 
For i = LBound(headers()) To UBound(headers()) Step 1

请注意,出现这种错误是因为您使用Option Explicit 强制变量声明(强烈建议这样做)。更多信息请见:Excel Easy: Option Explicit

【讨论】:

    【解决方案2】:

    在运行项目之前,转到Debug&gt;Compile Project,它会告诉你哪个变量没有声明:

    仅当您在模块/类/对象的顶部写了Option Explicit 时才有效(但您有它)。

    【讨论】:

      【解决方案3】:

      感谢佩。您需要在 VBA 的 For 循环中声明 i。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-12-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多