Excel VBAdynamic表引用

我有一个名为“组”的Excel表,其中的标题是组名称。 在下面的列中,组名称是该特定组的成员。

在另一个表中,我有第一列中的所有成员名称和第一行中的组名称。 我想检查每个成员名称是否在上面的组中。

要检查蒂姆是否在“伙计”组中,我可以使用公式:

=if( countif( groups[guys];"Tim")>0;"yes";"no") 

但我有一个命令button“添加组”,它打开一个用户表单,我可以进入一个新的组+成员。 新组的名称被input到文本框1中。 组和成员被添加到组表中。

我想要更新第二张表。 我想要做的是这样的:

 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是新组的名称(也添加到组选项卡)。

有什么办法可以使这项工作?

编辑:我试过另一种方法,但也没有工作,但可能有助于回答这个问题。 在检查某个人是否属于某个组的成员的表中,我默认启动一个组。 并手动input公式

 =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 

我把这个代码从自动填充logging为一个macros。 但是当我运行它时,K4中的公式与J4中的公式一样,与群组[伙计]而不是群组[伙计]。 我不能做Destination:= Range(“groups [[guys]:[gals]]”),因为我希望它可以与任何groupname一起使用,不仅是gals。

我能够通过写一个VBA函数而不是使用countif来解决这个问题。 function是:

 Function IsInGroup(group, member As String) As Boolean For Each Item In group If Item = member Then IsInGroup = True Exit Function End If Next Item IsInGroup = False End Function 

我这样使用它:

 temparray = ActiveSheet.ListObjects("groups").ListColumns(2).Range With Worksheets("Overview").ListObjects("PersonIsInGroupTab") tempmember = .DataBodyRange(1, 1).Value .ListColumns.Add Position:=3 .HeaderRowRange(3).Value = TextBox1.Value .DataBodyRange(1, 3).Value = IsInGroup(temparray, tempmember) End With