【发布时间】:2016-08-03 14:21:31
【问题描述】:
所以,我有一个相当复杂的工作簿。
表 1: 一个数据库,用户在其中输入仪器列表以及垂直列中有关仪器的一些数据。
工作表 2: 包含与工作表 1 完全相同的信息但以不同格式显示的工作表。根据表 1 中的条目自动填充。(在这个问题中没有用)
Sheet 1 上有一个宏,通过单击按钮执行。此宏从工作表 1 中获取每一列,并为每一列创建一个新工作表。每个新工作表 Sheet 3 都被重命名为其所代表的 Sheet 1 列中的第一个值。
- 即工作表 1 中有 4 列,每列中的第一个值是:LS-ALPHA、LS-BRAVO、LS-CHARLIE、LS-DELTA。我的宏将创建 4 个新工作表,名为 LS-ALPHA、LS-BRAVO、LS-CHARLIE、LS-DELTA。
每个新工作表上的第一个单元格(技术上是 H2)包含一个引用工作表名称的公式。
=MID(CELL("filename",A1),FIND("]",CELL("filename",A1))+1,255)
- 即 LS-ALPHA 表上的 H2 实际上会说“LS-ALPHA”,LS-BRAVO 表上的 H2 会说 LS-BRAVO,等等。
新工作表上的每个其他数据单元格都会自动在主工作表(工作表 1)上查找该值以确定它来自哪一列。然后,它将低于该值并从下面的某些单元格 x 行中获取内容。
=LOOKUP(H2,'Database (Cols)'!D2:AN2,'Database (Cols)'!D3:AN3)
这绝对完美。一切都做得很好。
除了,并非总是如此。
- 如果我将这些列重命名为“LS-A、LS-B、LS-C、LS-D”,它可以工作。如果我将这些列重命名为“LS-AA、LS-AB、LS-AC、LS-AD”,它就可以工作。如果我将这些列重命名为“LS-AAA、LS-AAB、LS-AAC、LS-AAD”,它会起作用。
但是,如果我将这些列重命名为“LS-TTF、LS-TTD、LS-TSD、LS-TSF”之类的名称,它们都会以某种方式损坏...。没有任何链接在床单上工作了。如果他们甚至显示某些内容,他们中的一些人会指出错误的列。我遇到的这个问题非常奇怪。我不知道为什么这些名字会特别破坏它,也不知道还有哪些其他名字也会破坏它。
“中断”时会发生什么:所有引用似乎都在 LOOKUP 中找到了最后一个可用列。四张纸中的三张在不应该使用时都使用了第四列中的值。然后,一张纸只会给我错误(#N/A)。当我逐步计算时,它正在 LOOKUP 函数中寻找正确的值,它只是没有返回正确的东西......
如果不向您展示发生了什么,我真的无法提供更多信息,因此我提供了一个工作电子表格和一个损坏的电子表格。表格是从宏生成的,因此您不必弄乱它。工作和损坏的文件如下:
工作:https://drive.google.com/file/d/0B9zbU-BeMQNfSmRrWVhKVW9RN3M/view?usp=drivesdk
坏了:https://drive.google.com/file/d/0B9zbU-BeMQNfd1FUemwxQjQwMEE/view?usp=drivesdk
注意,echo 列用于调试目的。我试图看看他们是否都会显示回声而不是增量。显然,他们没有。
【问题讨论】:
-
我看不出有什么不同。它在哪里?
-
“破损”表显示所有值的增量。 (除了由于某种原因显示#N/A 的一张表)“工作”表显示正确的对应值; "alpha#" "beta#" 等
-
数据库如下所示:s32.postimg.org/bld2rekn9/database.png 正确的条目将是显示“delta”的 LS-TSF,如下所示:s32.postimg.org/b7bqrt0jp/correct.png 不正确的条目将是 LS-TTF 显示“delta”而不是"alpha": s32.postimg.org/5lpbnqzut/incorrect.png 但是,当列名发生更改时,就像在工作电子表格中一样,不会发生此问题
标签: excel excel-formula excel-2010 vba