所以我的excel工作表中有一个错误,我无法在机器上重现该错误,但是却以某种方式使其他人的计算机上的内容不断出错。
我制作了一个子程序,该子程序从数据库中获取数据并在excel中创建表。在这种情况下,它是采矿项目。
它简单地选择第一个单元格,在向右移动时找到第一个空单元格,写标题,用它创建一个表,然后用另一个子填充它。当我运行它时,一切都会顺利进行,但是当同事尝试使用它时,它将以某种方式扩展前一个表,然后在尝试创建新表时崩溃,因为两个表不能重叠。
初始布局:
应该发生的事情:
我的同事得到的是:
这是该子项的VBA代码:
Public Sub creerTable(Nom As Variant)
Dim cellule As Range
' se placer
Set cellule = ActiveWorkbook.Worksheets("DATA").Range("A1").End(xlToRight).Offset(0, 1)
Do While cellule.Value <> "" Or Not IsEmpty(cellule)
Set cellule = cellule.Offset(0, 1)
Loop
'cr?er le header
cellule.Interior.Color = vbBlue
cellule.Value = Nom
'cr?er la table
ActiveSheet.ListObjects.Add(xlSrcRange, cellule, , xlYes).Name = Nom
End Sub
编辑:在我同事的计算机上进行了更多测试之后,我确定该问题很可能与excel设置有关。在他们的情况下,每当在表的右边写入内容时,表就会扩展以覆盖它。一些谷歌搜索发现这是一种自动纠正的行为。我想我必须停用自动更正的特定选项。
答案 0 :(得分:1)
答案真是愚蠢。问题是excel中的自动更正设置。我要做的就是添加以下行:
Application.autocorrect.AutoExpandListRange = False
答案 1 :(得分:0)
尚不清楚此代码如何在您的计算机上工作,但在您的同事上如何工作。我怀疑输入必须有所不同,但这是您(可以访问输入,但我们没有)要自己解决。通常:不一致不可能存在,所以当出现不一致时,检查一下输入,通常会发现输入数据中存在差异,从而导致输出不一致。
我会注意到范围对象的End
方法可能并不可靠,特别是在以下情况下,我观察到Range("A1").End(xlToRight).Address
这样的情况在列A,B和C为每个单独的ListObject
表:
在这种情况下也是:
似乎您尝试找到 next 空单元格/列(可能在两个或多个非空单元格/列之间)。 应该微不足道,但是我们需要了解 next 与工作表上已有的东西相关吗?
您是否正在尝试在名为“Tâches”(或单元格值=“Tâches”)的ListObject
之后的 之后找到下一个空单元格?