Excel VBA Worksheet.Function与动态工作表参考

时间:2016-01-13 19:30:20

标签: excel vba excel-vba

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

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

我的问题:

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

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

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”作为字符串并生成: = 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”或双“”s“”,删除'',用“”或“'和''”创建变量字符串)

有可能吗?或者有解决方法吗?

非常感谢提前。

1 个答案:

答案 0 :(得分:1)

使用Range.Find方法搜索国家/地区是否存在,而不是vlookup(无论如何,您编写的方式都不起作用)。另外,看看我如何将变量包含在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