Excel VBA代码,公式和函数无法正常工作

时间:2019-09-19 18:06:29

标签: excel vba excel-formula

我有一个使用过的excel公式:

=IFNA(LEFT(INDIRECT(ADDRESS(3,MATCH("Target Ship*",Ed!1:1,0),,,"Ed")),
 FIND(" ",INDIRECT(ADDRESS(3,MATCH("Target Ship*",Ed!1:1,0),,,"Ed")))-1),"")

我正在尝试使其在VBA中工作,并具有提取Sheet2名称的功能,但是在下面的代码中会引发错误

  

“编译错误:语法错误”

Worksheets(1).Cells(l + i * 2 - 2, j).Formula = "=IFNA(LEFT(INDIRECT(ADDRESS(3,MATCH(""Target Ship*"","&shtName&"!1:1,0),,,""&shtName&"")),FIND("" "",INDIRECT(ADDRESS(3,MATCH(""Target Ship*"","&shtName&"!1:1,0),,,""&shtName&"")))-1),"""")"

此外,我在下面的代码中没有从函数中设置shtName。

shtName = sheetName(2)

Function sheetName(num As Integer) As String
    shtName = Sheets(num).Name
End Function

1 个答案:

答案 0 :(得分:5)

与一堆串联相比,我更喜欢使用令牌和Replace()

Const FRM = _
  "=IFNA(LEFT(INDIRECT(ADDRESS(3,MATCH(""Target Ship*"",'<sht>'!1:1,0),,,""<sht>""))," & _
   "FIND("" "",INDIRECT(ADDRESS(3,MATCH(""Target Ship*"",'<sht>'!1:1,0),,,""<sht>"")))-1),"""")"

Dim f as String
f = Replace(FRM, "<sht>", sheetName(2))
f = Replace(f, "<x>", someOtherVariable) 'other substitutions as needed...

Worksheets(1).Cells(l + i * 2 - 2, j).Formula = f

您的函数未正确设置返回值:

Function sheetName(num As Integer) As String
    sheetName = ThisWorkbook.Sheets(num).Name '<< sheetName not shtName
                '  ^ be specific about the workbook to look in
End Function

如果您使用Option Explicit,它将警告您有关这种类型的错误,因为shtName在这种情况下是未声明的变量。