我有一个使用过的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
答案 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
在这种情况下是未声明的变量。