【发布时间】:2020-06-01 04:03:10
【问题描述】:
初步讨论结束时可能原因的线索.....
一个简单的 VBA 宏代码行,如:
FontCol = Cells(K, AmntCol).Font.ColorIndex
报告,光标悬停在“FontCol”上,值为“1” - 这是黑色的索引值。
但当此值“发布”到相关(活动)Excel 电子表格时:
Cells(RowRef, ColRef) = FontCol
如上解决的单元格显示 -5 而不是 1(作为问题的一个示例)
“1”是您期望看到的黑色,我什至无法弄清楚“-5”与什么有关 更不用说为什么它也不是在 VBA 代码中起作用的东西。 - 如果我将“-5”写入一些代码逻辑,则不会产生有用的结果,这证实了真正的基础值是 1 而不是 -5。
似乎没有多少(登陆)单元格的格式或将 FontCol 的“维度作为语句”更改为“整数”或“字符串”或“变体”会更改发布到单元格的内容。
我无法获得有关此问题的任何信息。最接近的是关于索引空间中较短数字的长数字和剩余驱动事物......无论这应该是什么意思。
我真的很想解决这个问题,因为我打算使用 ColorIndex 值作为安全编辑单元格值的一种方式。
任何智慧将不胜感激。
以上补充——作为回应。
将变量的 Dim 从“整数”更改为“长”没有区别。
在准备提供如下示例代码时,我已经确定了部分问题 - 它似乎与速度有关。但首先是代码。
'''' 子字体宏问题()
Dim I As Long
Dim FontCol As Long
For I = 36 To 51
FontCol = Cells(I, 10).Font.ColorIndex
If FontCol = 3 Then
Cells(I, 18) = "Red"
Cells(I, 19) = FontCol
Else
Cells(I, 18) = "Not Red"
Cells(I, 19) = FontCol
End If
Next I
End Sub
''''
以上是在 Windows 10 64 位机器上运行的(双引导到 Linux)...这应该不相关。
如果上述内容按原样运行,则输出大部分/全部为“非红色”,并且 FontCol 值的字符串打印为,
1 -5 -5 -5 -5 -7 -7 -7 -7 -7 -7 -7 -7 -7 -5 -7 - 如果减速,如 1 3 3 3 3 1 1 1 1 1 1 1 1 1 3 1
慢,我的意思是在调试模式下运行宏,在“Next I”或类似的地方有一个断点,然后每秒按两次 F5 按钮(比如说)。全速情况下的输出大部分/全部是“非红色”,但是当对正在评估的字体放慢速度时,正确报告“红色”和“非红色”。
所以我现在的问题更多了,“这种行为是否正常”,“我怎样才能最好地放慢速度以获得正确的结果”或“什么代码更有效”? 编辑...
我倾向于同意 Fun Thomas 的观点,因为即使 2 个周期/秒也会带来问题。 我没有答案,但有些 cmets 可能会有所帮助。 1. 我的硬盘是 2 TB SSD 2. 相关电子表格有超过 46000 行。 3. 这绝非巧合: 8 -7 = 1,黑色字体报告为 1 和 -7,并且 8 -5 = 3,红色字体报告为 3 和 -5。 谢谢
【问题讨论】:
-
FontCol的 Dim 语句是什么? -
试试吧,请
Dim FontCol As Long... -
您可能会得到 -4105 的结果,请参阅:docs.microsoft.com/nl-nl/office/vba/api/excel.xlcolorindex 其中表示 -4105 是“自动颜色”,而 -4142 是“无颜色”。
-
您应该发布整个代码。我这边似乎一切都很好。你可以edit你的代码。你显然没有告诉我们足够的信息。如果代码在带有参数的过程中,则缺少
ByVal可能是问题所在。顺便说一句,单元格格式是General吗? -
我建议您使用简单的三行代码,看看是否出现问题,还有:
Dim FontCol As LongFontCol = ActiveCell.Font.ColorIndex和Debug.Print FontCol。您可以在即时窗口中看到什么?如果您看到正确的值,则问题必须在您的整个代码中找到...