繁体   English   中英

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

[英]Unable to turn VBA string into Excel cell 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 为 LARGE,PROC 为 LOOKUP。 代码停在:

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

请帮忙。 亲切的问候。

首先请注意,如果您声明

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 ,因此您必须改用Long 在 VBA 中使用Integer也没有好处,所以我建议总是使用Long代替:

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

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


另一个建议是尽可能避免使用ActiveWorkbookActiveSheet 请注意, ActiveWorkbook是具有焦点/位于顶部的工作簿。 这可以通过单个用户单击轻松更改。 您可能打算使用的是ThisWorkbook ,它是编写此 VBA 代码的工作簿(它永远不会改变)。

而不是ActiveSheet.Cells为您的Cells对象明确指定 worbkook 和工作表。 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)"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM