【发布时间】:2021-04-28 20:25:39
【问题描述】:
好的,我在这里看到了很多类似的问题,但在我找到的所有问题中,要么没有答案,要么与我的情况不同并且不适用,或者我尝试了解决方案,但它对我不起作用。
问题是,在下面的代码 sn-p 中,我收到“运行时错误 '1004': Application-defined or object-defined error assignmenting Range.Value Property”
我确实设置了Option Explicit。
R、NR 和 RungTopRow 在代码的前面都声明为整数类型。 CommentRow 也是一个整数(仅等于 0 或 1,声明为整数而不是布尔值,因为我在方程式中使用 0 或 1 作为乘数)。 CurrentCell 被声明为 Range 类型。 LadderSheet 的类型为 Worksheet,设置为我的 Excel 文件中的特定工作表。我在我的程序中多次使用LadderSheet,没有任何问题。 RowSize 是一个等于 6 的已定义常量。thatRung 是我定义的 Rung 类型的类变量。 CommentText 是一个公共变量,被声明为 Rung 类的一部分。我尝试将CommentText 声明为字符串并将其定义为变体。无论哪种方式,我都会遇到相同的错误。 Option Explicit 也在Rung 类模块中设置。
NR 是我正在使用的梯形逻辑源中的梯级数。这只是我的代码的一部分,此外,如果RungTopRow 通过与定义的Const LastXLRow = 1048576 进行比较,我有代码退出程序等于或超过 excel 允许的最大行数。 p>
不管怎样,当我插入断点时,我发现我在 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
我将 LadderSheet.Cells(RungTopRow, 3) 替换为 CurrentCell,因为它在另一种类似情况下对我有用,但由于某种原因在这里不起作用。
我也试过
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 Class 太大了,这里就不贴了,但唯一提到CommentText 的地方是在如下声明中:
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 是用 thatRung 定义的:
Public Sub DrawRung(thatRung As Rung)
ThatXMLTag 是我定义的另一个自定义类XMLTag。 Contents 也是一个字符串。
这是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
【问题讨论】:
-
听起来您的自定义类
Rung是某种问题。如果您可以发布它和/或创建一个仅包含该变量或属性的最小类,这将有所帮助。 -
出现错误时thatrung.commentText的值是多少?
-
CurrentCell.Value = "'" & thatRung.CommentText有效吗?如果您分配的内容看起来像一个公式,那么 Excel 可能会窒息它。您还可以在分配值之前尝试将单元格格式化为文本。 -
@TimWilliams 感谢您的建议。当我添加“'”时它确实有效......但这当然不会给我想要的东西。但多亏了你的建议,我明白了。如果我向它添加任何东西,它就会起作用。我现在意识到我从未初始化过
thisRung.CommentText,所以当我执行thisRung.CommentText = thisRung.CommentText & ThatXMLTag.Contents时,它正在执行nothing和ThatXMLTag.Contents。我会想到nothing& something = something,当我检查我的变量时它会显示一些东西 - 但是如果我在我的 Rung 类的class_initialize子中初始化CommentText = " ",它就可以工作 -
这里不涉及
Nothing:如果CommentText或Contents未初始化,它们将只是空字符串。没有与连接空字符串相关的问题。您的真正问题可能是 Excel 认为您正在尝试将(损坏的)公式分配给单元格的Value属性。
标签: excel vba excel-2016