使用对象调用方法时未定义VBA变量

时间:2018-11-05 10:52:43

标签: excel vba

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

  

未定义变量

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

一些帮助将不胜感激,这东西使我发疯了atm。

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

3 个答案:

答案 0 :(得分:2)

错误

  

“未定义变量”

表示您使用了变量但未定义变量。

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

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

请注意,发生此类错误是因为您使用Option Explicit强制进行变量声明(强烈建议这样做)。有关更多信息,请参见:Excel Easy: Option Explicit

答案 1 :(得分:1)

在运行项目之前,转到Debug>Compile Project,它将告诉您未声明哪个变量:

enter image description here

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

答案 2 :(得分:1)

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