【发布时间】: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