Excel VBA Worksheet.Function与dynamic工作表参考

我有一个带有主WS(INSTRUCTIONS)的Excel文件(wbTL)用于分析,还有许多其他的WS与每个国家的数据(将在主表中进行分析)主表有一个包含所有国家的表格,并显示关键信息每个国家都使用引用国别表的函数。

国家WS中的信息是从其他Excel(wb)发送的。

我的问题 :

假设有一个新的国家。 用户将从(wb)和(wbTL)中报告信息,一个新的工作表将被创build一个特定的名称。

现在我想用新的国家名称来更新表格,这些函数应该引用新的工作表生成。

Sub Test() Dim wb As Workbook, wbTL As Workbook Dim wsRep As Worksheet, wsIns As Worksheet, wsInsTL As Worksheet Dim lrowTable As Long, lcolTable As Long Dim rngTLPath As Range Dim CountryInList As Single Dim s As String, j As String Dim rngTable As Range Set wb = ThisWorkbook Set wsIns = wb.Worksheets("INSTRUCTIONS") Set rngTLPath = wsIns.Range("TLPATH") Set wbTL = Workbooks.Open(rngTLPath) Set wsRep = wb.Worksheets("REPORT") Set wsInsTL = wbTL.Worksheets("INSTRUCTIONS") lrowTable = wbTL.Worksheets("INSTRUCTIONS").Cells(Rows.Count, 3).End(xlUp).Row lcolTable = wbTL.Worksheets("INSTRUCTIONS").Cells(6, Columns.Count).End(xlToLeft).Column Set rngTable = wsInsTL.Range(Cells(5, 3), Cells(lrowTable, lcolTable)) 'What I pretend is to storage the variable S as string with the Worksheet for the country. s = wsIns.Range("A1") 'I make a reference to a cell, lets say it says DENMARK 

“我仍然在这里工作。 我想要的代码来检查国家是否已经在表中。 '如果国家不在,那么添加一个国家/职能的新线。

 On Error Resume Next CountryInList = Application.WorksheetFunction.VLookup(s, rngTable, 1, False) On Error GoTo 0 If CountryInList = 0 Then wsInsTL.Cells(lrowTable + 1, 3).Value = s 'This does not work, leaves cell as Empty 

'这是我的主要问题:'我想要得到的是参考根据国家名称生成的新的WS'我期待的是它是以“S”作为string并生成:= COUNTA('DENMARK'! A:A) – 1

  wsInsTL.Cells(lrowTable + 1, 4).Formula = "=Counta('s'!A:A) - 1" wsInsTL.Cells(lrowTable + 1, 7).Formula = "=Countif('s'!$H:$H,Vlookup(G$5,OTHER!$N$1:$O$10,2,false))" End If End Sub 

我试过了(加“s”或double“”s“”,删除'',用“”或“'和''”“创buildvariablesstring)

可以做到吗? 还是有任何解决方法?

提前谢谢了。

使用Range.Find方法来search国家是否存在,而不是Range.Find (无论如何,你写的方式将不起作用)。 另外,看看我如何将variables包含在If块内的公式中。

 Dim rngC as Range Set rngC = rngTable.Find(What:=s,lookat:=xlWhole) If rngC Is Nothing Then wsInsTL.Cells(lrowTable + 1, 3).Value = s wsInsTL.Cells(lrowTable + 1, 4).Formula = "=Counta(" & s & "!A:A) - 1" wsInsTL.Cells(lrowTable + 1, 7).Formula = "=Countif(" & s & "!$H:$H,Vlookup(G$5,OTHER!$N$1:$O$10,2,false))" End If