尝试使以下代码起作用。由于某些原因,会返回运行时错误“ 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
请帮助。此致。
答案 0 :(得分:1)
首先请注意,如果您声明
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
。 Also there is no benefit in using Integer
in 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)"