我有以下 Excel VBA 代码:
Sheet1.Columns.ColumnWidth = 8.14
Sheet1.Rows.EntireRow.RowHeight = Sheet1.Cells(1).Width
Sheet1.Cells.WrapText = True
Sheet1.Cells.NumberFormat = "F0 P0 C0" & vbLf & "00 00 00"
Sheet1.Cells.Value = 123456789
前两行使我的工作表中的单元格成为 8.14 个水平点的完美正方形,以下几行旨在使每个单元格看起来像这样(又名在同一单元格内视觉上“分离”的部分中显示 9 位数字):
F1 P2 C3
45 67 89
问题是 Excel 用井号 (#) 替换了我的数字(由于它是自动换行的,所以它应该完全适合 2 行中 8.14 点大小的单元格),因为它的长度被感知 - 而我不希望这样。
有没有办法通过 Excel 设置或 VBA 代码来防止这种自动行为,而不将单元格格式更改为“常规”或“文本”或增加单元格的宽度?
现在我之前已经看到过这个问题的答案,但所有答案都涉及更改单元格格式或大小,而我无法这样做,原因有几个:
这张表或多或少是一个地理“地图”,其中每个单元格都是该地图上的一个点,所以自然地我需要在 Excel 的可见部分中显示尽可能多的“点”。如果我使单元格(正方形)变大,我几乎无法将 10x4 网格放入可见部分(以 100% 缩放) - 因为我必须将单元格之前的大小加倍到巨大的 124 像素,以便 Excel 不改变地显示我的数字
如果我将格式更改为“文本”(也称为字符串单元格值),我的 Excel 文件会变得很大(约 1MB)并且几乎无法使用,因为地图约为 255x128 个“点”。与相同数量的“文本”/字符串格式的单元格相比,255x128 数字格式的单元格运行速度极快
如果我将格式更改为“常规”或多或少与上面的情况相同,另外,我无法使用自定义格式来“分隔”我的数字部分,如我的示例中所示(是的,这是预期的外观) 。
编辑:检查时http://datapigtechnologies.com/blog/index.php/forcing-carriage-return-in-custom-date-format/ http://datapigtechnologies.com/blog/index.php/forcing-carriage-return-in-custom-date-format/我从某个戴夫那里找到了这个(归功于他),这也是我的问题的解决方案:
如果你尝试缩小列宽,你会发现你会在你(或我)认为你应该看到之前看到####的方式。但稍微改变一下就可以解决这个问题。在单元格格式对话框的对齐选项卡上,关闭自动换行(如果已打开)。打开“缩小以适合”,然后打开换行。
我尝试了一下,成功了!其 VBA 代码同样简单 - 在我的初始代码完成后添加下面的代码:
Sheet1.Cells.WrapText = False
Sheet1.Cells.ShrinkToFit = True
Sheet1.Cells.WrapText = True
我不想“作弊”并回答我自己的问题,所以我写了这篇文章作为对我原始帖子的编辑。