无法将VBA字符串转换为Excel单元格公式

时间:2020-02-27 11:34:27

标签: excel vba formula

尝试使以下代码起作用。由于某些原因,会返回运行时错误“ 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为大,PROC为LOOKUP。代码在以下位置停止:

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

请帮助。此致。

1 个答案:

答案 0 :(得分:1)

首先请注意,如果您声明

Dim i, j, k, numRows As Integer

只有numRowsInteger,而其他所有类型均为Variant。它与写作完全相同:

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

在VBA中,您需要为每个变量指定一种类型。此外,Excel的行超出了Integer的容纳范围,因此您必须改用LongAlso there is no benefit in using Integer in VBA,所以我建议始终使用Long代替:

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

同一行适用于一行中声明的其他多个变量。


另一建议是,尽可能避免使用ActiveWorkbookActiveSheet。 请注意,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)"