Невозможно превратить строку VBA в формулу ячейки Excel - PullRequest
0 голосов
/ 27 февраля 2020

Сделайте так, чтобы следующий код работал. По какой-то причине возвращает ошибку времени выполнения «1004»: ошибка приложения или объекта.

Код следующий:

Sub UpdateLinks()
Dim lastFlight, lastMis, logBook, studentCode As String
Dim i, j, k, numRows As Integer
Dim wb0 As Workbook
Dim studentSheet As Worksheet

Set wb0 = ActiveWorkbook

Set studentSheet = wb0.Worksheets("STUDENTS")

numRows = studentSheet.Range("A5").CurrentRegion.Rows.Count

studentCode = studentSheet.Cells(8, 2).Value

lastFlight = "=MAIOR('\\server\# FLTLOG_EXPORT\[" & studentCode & ".xlsx]Status'!$A$3:$A$219;1)"
lastMis = "=PROC(2;1/(1-É.CÉL.VAZIA('\\server\# FLTLOG_EXPORT\[" & studentCode & ".xlsx]Status'!$C$3:$C$230));'\\server\# FLTLOG_EXPORT\[" & studentCode & ".xlsx]Status'!$C$3:$C$230)"
logBook = "'\\server\# FLTLOG_EXPORT\[" & studentCode & ".xlsx]Desvios'!$Q$15"

ActiveSheet.Cells(8, 4).Formula = lastFlight

End Sub

Формулы на португальском языке и MAIOR БОЛЬШОЙ, PRO C это LOOKUP. Код останавливается на:

ActiveSheet.Cells(8, 4).Formula = lastFlight

Пожалуйста, помогите. С уважением.

1 Ответ

1 голос
/ 27 февраля 2020

Прежде всего, обратите внимание, что если вы объявляете

Dim i, j, k, numRows As Integer

только numRows, это Integer, но все остальные имеют тип Variant. Это то же самое, что и запись:

Dim i As Variant, j As Variant, k As Variant, numRows As Integer

В VBA необходимо указать тип для каждой переменной. Кроме того, в Excel больше строк, чем умещается в Integer, поэтому вы должны использовать Long. Также нет смысла использовать Integer в VBA , поэтому я рекомендую всегда использовать Long вместо этого:

Dim i As Long, j As Long, k As Long, numRows As Long

То же самое относится и к другим множественным переменным, объявленным в одной строке.


Другая рекомендация - избегать ActiveWorkbook и ActiveSheet, если это возможно. Обратите внимание, что ActiveWorkbook - это книга, которая имеет фокус / находится сверху. Это может легко измениться одним кликом пользователя. Вероятно, вы хотели использовать ThisWorkbook - рабочую книгу, в которой написан этот код VBA (и он никогда не изменяется).

Вместо ActiveSheet.Cells явно укажите worbkook и рабочую таблицу для вашего объекта Cells , Например, studentSheet.Cells или что-то подобное.


К вашей актуальной проблеме

Обратите внимание, что файл studentCode & ".xlsx должен быть открыт, если вы хотите использовать его в формуле.

Убедитесь, что вы открыли его с помощью

Dim wb As Workbook
Set wb = Workbooks.Open("\\server\# FLTLOG_EXPORT\" & studentCode & ".xlsx"

Тогда вы можете использовать его в своей формуле без пути:

lastFlight = "=MAIOR('[" & studentCode & ".xlsx]Status'!$A$3:$A$219;1)"
...