好吧,我在这里看到了很多类似的问题,但在我找到的所有问题中,要么没有答案,要么与我的情况不一样,不适用,要么我尝试了解决方案,但对我不起作用。
问题是,在我下面的代码片段中,我得到了";运行时错误"1004":应用程序定义的或对象定义的分配Range.Value属性"的错误;
我确实有Option Explicit
套装。
R
、NR
和RungTopRow
都在代码的前面声明为整数类型。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
其中currentComment
和thatRung.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将尝试将内容解析为公式,如果失败,将生成您所描述的运行时错误类型。