簡體   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