【问题标题】:VBA 1004 Application defined or Object defned errorVBA 1004 应用程序定义或对象定义错误
【发布时间】:2015-04-15 08:18:26
【问题描述】:

在运行这段代码时,我得到了

VBA 1004 错误:“应用程序定义或对象定义错误”

在下面指示的行上。为什么?

我正在使用 Excel 2013。我的电子表格有 2 张工作表,Sheet1 和 Sheet2。

Public Sub ImportTextFile()

Dim RowNdx As Long
Dim TempVal As String
Dim WholeLine As String

Application.ScreenUpdating = False
'On Error GoTo EndMacro:
RowNdx = 11
FName = Worksheets("Sheet1").Cells(1, 2).Value

Open FName For Input Access Read As #1

While Not EOF(1)
    Line Input #1, WholeLine
    Worksheets("Sheet1").Cells(RowNdx, 1).Value = WholeLine ' <~~~~~~ ERROR
    RowNdx = RowNdx + 1
Wend

Application.ScreenUpdating = True
Close #1

End Sub

【问题讨论】:

  • 没有足够的信息来重现问题。尝试在调试模式下单步执行您的代码并观察您的变量如何演变 (instructions)。发生错误时RowNdx 和WholeLine 的值是多少?
  • RowNdx = 11 时发生错误。我正在读取一个简单的文本文件(包含 450 行)。因此,出错时的 Wholeline 包含“ABCxyz”。同样,此代码是从文本文件读取并将其全部内容从第 11 行开始复制到 excel 电子表格的简单代码。我也尝试通过代码。在 While 循环中,我尝试在第一次运行循环期间评论 Worksheets("Sheet1").Cells(RowNdx, 1).Value = WholeLine。在循环的第二次迭代中,我取消了对这一行的注释。然后它一直很好地运行到最后。
  • 我想知道WholeLine 中是否有 Excel 不喜欢的内容。类似没有 Chr(10) 的 Chr(13) 虽然不是这样。您能否遍历导致错误的行上 WholeLine 的每个字母以及 Debug.Print Mid$(WholeLine,i,1), Asc(Mid$(WholeLine,i,1)) 其中i 是您的控制变量?看看里面有什么类型的字符可能会很有用。
  • 是的。 @DickKusLeika,你是对的。我的文件有以下行。这导致了我的错误。 =~=~=~=~=~=~=~=~=~=~=~= PuTTY 日志 2015.04.10 14:12:25 =~=~=~=~=~=~=~=~= ~=~=~= 我从文本文件中删除了该行,代码运行良好。似乎 Excel 不喜欢 '=' 作为文本文件中的第一个字符。有没有办法从文本文件中复制所有行,不管它包含什么?非常感谢您为我指明了正确的方向。我花了好几个小时更改我的代码,但没有成功。

标签: vba excel


【解决方案1】:

如果您的行的第一个字符是等号,Excel 会认为您正在输入一个公式。你的评论中以等号开头的那行不是一个有效的公式——这不足为奇! Excel 抱怨,因为您尝试输入无效的公式。

您可以在撇号前缀

Worksheets("Sheet1").Cells(RowNdx, 1).Value = "'" & WholeLine

这会将每一行都视为文本 - 它不会将日期字符串转换为日期,而是将数字转换为实际数字,并使所有内容保持原样。明确检查等号可能是更好的选择,因为这样您还必须检查加号、减号等。因此,除非您有充分的理由不这样做,否则请将所有内容保留为带有前导撇号的字符串。

【讨论】:

  • 非常感谢,迪克。非常感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-25
  • 1970-01-01
相关资源
最近更新 更多