基于数据库的表,手动添加列 – 维护值位置

让我们考虑与SQL Server表关联的简单Excel表格:

 ID some_data
 0 a
 1 b
 2 c

我想扩展它与手动添加列(不存在于SQL Server的表中):

 ID some_data my_column
 0 a some_data_for_0
 1 b some_data_for_1
 2 c some_data_for_2

但是,当源数据发生更改(行插入/删除/更新)时,my_column和ID列之间的关系不会保留。 例如,添加新行(3,d)时:

 ID some_data my_column
 0 a some_data_for_0
 1 b some_data_for_1
 2 c           
 3 d some_data_for_2

有没有任何Excel内置的解决scheme,可以让我指定如何sortingmy_column行与ID列有关,还是我需要自己使用VBA实现它?

你可以在你的SQL语句中使用ORDER BY子句,但即使这样也不是很可靠。 唯一可行的方法是将附加数据存储在自己的表中,并使用公式将其与SQL数据关联起来。

在一个单独的工作表上,放

ID my_column 0 some_data_for_0 1 some_data_for_1 2 some_data_for_2 

现在在与SQL数据相邻的列中,放置

 =IFERROR(VLOOKUP([@ID],tblAddtlInfo,2,FALSE),"") 

但是,SQL数据是sorting的,附加信息将在右侧的行。 这假定你把你的附加信息列表放到一个表中,并命名为tblAddtlInfo。

如果你想变得奇特,你可以在Change事件中写一些代码,在额外的列中寻找非公式。 如果公式被写入,那么获取新数据,将其添加到(或更新)您的附加信息表,然后恢复公式。 然后,您可以键入行中的数据,但通过将其移动到不同的表保持完整性。