【发布时间】:2015-08-20 18:17:15
【问题描述】:
我有一个名为“组”的 Excel 表格,其中标题是组名。在组名下方的列中是该特定组的成员。
在另一个表中,第一列中包含所有成员名称,第一行中包含组名称。我想检查每个成员的名字是否在上面的组中。
要检查 Tim 是否在“家伙”组中,我可以使用以下公式:
=if( countif( groups[guys];"Tim")>0;"yes";"no")
但是我有一个命令按钮“添加组”,它打开一个用户表单,我可以在其中输入一个新组+成员。新组的名称输入到 textbox1。组和成员将添加到组表中。
我希望第二张表也能更新。我想做的是这样的:
With Worksheets("Overview").ListObjects("PersonIsInGroupTab")
.ListColumns.Add Position:=3
.HeaderRowRange(3).Value = TextBox1.Value
.DataBodyRange(1, 3).formula= "=if( countif( groups[textbox1.value];""Tim"")>0;""yes"",""no"")"
End With
很遗憾,这不起作用。
textbox1.value 是新组的名称(也添加到组选项卡中)。
我有什么办法可以完成这项工作吗?
编辑: 我尝试了另一种也不起作用但可能有助于回答问题的方法。 在检查某个人是否是某个组的成员的表格中,我默认从一个组开始。并手动输入公式
=if(countif(groups[guys],"Tim")>0,"yes","no")
进入单元格(在我的情况下为 J4)。当我使用用户窗体添加一个组“gals”时,我在表中得到第二列“gals”。当我手动将公式从 [guys] 单元格拖动到 [gals] 单元格 (K4) 时,它就像我想要的那样工作。我得到了公式
=if(countif(groups[gals],"Tim)>0,"yes","no")
在 gals 细胞 (K4) 中 所以我想我可以在 VBA 中做这个自动填充作为“添加组”例程的一部分。这是我使用的代码:
Range("groups[guys]").Select
Selection.AutoFill Destination:=Range("J4:K4"), Type:=xlFillDefault
我通过将自动填充记录为宏获得了此代码。但是当我运行它时,K4 中的公式与 J4 中的一样,使用 groups[guys] 而不是 groups[gals]。 我不能做 Destination:=Range("groups[[guys]:[gals]]") 因为我希望它可以与任何组名一起工作,而不仅仅是 gals。
【问题讨论】:
-
您是否遇到任何具体错误?
-
运行时错误 1004 在 .DataBodyRange(1, 3).formula= "=if( countif( groups[textbox1.value];"Tim")>0;"yes";"no") ”。我想我不能以这种方式引用。 textbox1.value 从用户表单中的文本框接收。如果 textbox1.value= group1 那么 groups[group1] 会起作用。不幸的是,我事先不知道 textbox1.value。
-
公式不正确,需要修改。 (1)在公式中用双“”替换单“”,如
"=if( countif( groups[textbox1.value];""Tim"")>0;""yes"";""no"")"。(2)您使用的是非英文Excel版本。不过,在VBA中,所有公式都必须以英文格式传递。所以,你需要将 ; 替换为 ,如下所示:"=if( countif( groups[textbox1.value],""Tim"")>0,""yes"",""no"")"。这样会更好。 -
谢谢!我纠正了这些错误。但是问题仍然存在;(我还注意到:当我将鼠标光标悬停在相关行中的 TextBox1.value 上时,它不会显示其值。它在其他行中会显示。这是否意味着 VBA 无法识别表中的 textbox1.value参考?