Excel VBA 运行时错误"1004":分配范围值属性时"Application-defined or object-defined error"



好吧,我在这里看到了很多类似的问题,但在我找到的所有问题中,要么没有答案,要么与我的情况不一样,不适用,要么我尝试了解决方案,但对我不起作用。

问题是,在我下面的代码片段中,我得到了";运行时错误"1004":应用程序定义的或对象定义的分配Range.Value属性"的错误;

我确实有Option Explicit套装。

RNRRungTopRow都在代码的前面声明为整数类型。CommentRow也是一个整数(只等于0或1,声明为整数而不是布尔值,因为我在方程中使用0或1作为乘数(。CurrentCell被声明为类型Range。LadderSheet的类型为Worksheet,设置为Excel文件中的特定工作表。我已经在我的程序中多次使用LadderSheet,没有任何问题。CCD_ 10是定义的等于6的常数。thatRung是我定义的Rung类型的类变量。CommentText是一个公共变量,它被声明为Rung类的一部分。我尝试将CommentText声明为字符串,并将其定义为变体。不管怎样,我都会犯同样的错误。CCD_ 16也设置在CCD_ 17类模块中。

NR是我正在使用的梯形图逻辑源中的Rung数。这只是我代码的一部分,此外,如果RungTopRow与定义的Const LastXLRow = 1048576相比,等于或超过excel允许的最大行数,我还有代码可以退出程序。

无论如何,当我插入断点时,我发现我得到的错误值为RungTopRow=3。所以,我绝对不会超过最大行数。

当我评论下面的部分时,我绑定到{Other Code Here}中的所有内容都可以毫无错误地运行。实际上,如果我注释掉.value赋值语句,一切都会按预期运行。

For R = 0 To NR

If R = 0 And CommentRow Then
With LadderSheet.Range("C" & CStr(RungTopRow + 1) & ":P" & CStr(RungTopRow + RowSize - 1))
.MergeCells = True
.ShrinkToFit = False
.WrapText = True
End With
Set CurrentCell = LadderSheet.Cells(RungTopRow + 1, 3)
'this line keeps giving an application defined error
CurrentCell.Value = thatRung.CommentText
End If
... {Other Code Here} ...
Next R

首先我尝试了

LadderSheet.Cells(RungTopRow + 1, 3).Value = thatRung.CommentText

我用CurrentCell替换了LadderSheet.Cells(RungTopRow,3(,因为它在另一种类似的情况下对我有效,但由于某种原因在这里不起作用。

我也试过

currentComment = thatRung.CommentText
currentCell.Value = currentComment

其中currentCommentthatRung.CommentText被声明为字符串。我得到了同样的错误,在currentCell.Value的赋值语句上触发,所以这不是由于thatRung.CommentText的定义

注意,如果我直接将其分配给一个文字字符串,如下所示:

CurrentCell.Value = "hello"

或如下:

currentComment = "hello"
currentCell.Value = currentComment

它执行起来没有问题。当然,在这种情况下,我并没有得到我真正想要的文本。我需要存储在thatRung.CommentText中的文本进入由范围CurrentCell定义的单元格。

更新Rung类太大,无法在此处发布,但唯一提到CommentText的地方是在如下的delcarations中:

Option Explicit
'These values are directly defined
Public Number As Integer
Public NumBranches As Integer
Public RungType As String
Public CommentText As String 'Neither string nor variant working
Public RungText As String
'These values will need to be calculated
Private Branches() As Branch
Private Items() As Item
Private ItemsEmpty As Boolean
Private CommandsEmpty As Boolean
Private InputsEmpty As Boolean
Private OutputsEmpty As Boolean
Private BranchesEmpty As Boolean
Const maxItemsperRow = 4 'Make sure other modules have same value in constant

也许同样相关的还有CommentText在我上面发布的主模块代码(ImportL5x(中的代码之前被操作的地方:

thisRung.CommentText = thisRung.CommentText & ThatXMLTag.Contents

我发布的代码在一个名为DrawRung的子程序中,thisRung作为参数传递给DrawRung

DrawRung thisRung

DrawRung是用那个Rung:定义的

Public Sub DrawRung(thatRung As Rung)

CCD_ 32是我定义的另一个自定义类CCD_。CCD_ 34也是一个字符串。

这是XMLTag类的所有代码(现在只是声明,所有内容都在另一个模块中外部分配(:

Option Explicit
Public Enum XMLType
XMLStart = 0 'No starting /, no ! data
XMLContent = 1 'Starting !
XMLStop = 2 'Starting /
XMLUnknown = 3 'Anything else
End Enum
Public Name As String
Public Contents As String
Public TagType As XMLType

当将某些内容分配给Excel单元格时,即使显式使用Value而不是Formula/FormulaR1C1/etc属性,Excel也会尝试将单元格内容解析为公式,如果它"外观;就像它可能是一个公式。

例如,如果单元格内容以"="Excel将尝试将内容解析为公式,如果失败,将生成您所描述的运行时错误类型。

最新更新