Excel VBA код, формула и функция, не работает должным образом - PullRequest
0 голосов
/ 19 сентября 2019

У меня есть формула 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 Ответ

5 голосов
/ 19 сентября 2019

Я бы предпочел использовать токены и 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 является необъявленной переменной в этом контексте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...