全部;
我已經被這個問題難住了幾個星期,似乎無法弄清楚。
我創建了一個宏來運行我每天下載的檔案——它們包含有關選定數量股票的資訊。宏并不是特別復雜或深入。它加粗一些列,在新列中執行計算,按該計算 (ZA) 排序,并創建前 x 只股票的文本連接串列,以匯入到 TradingView 的監視串列中。
我的問題是宏只在同名的作業簿上運行。我試圖通過在標準檔案名下創建宏,然后在 Finder 中手動將下載更改為此名稱來解決此問題,以便在我打開檔案并激活它后運行宏。這是規避運行時錯誤 9:“下標超出范圍”錯誤消??息的唯一方法。然而,每天都這樣做很麻煩,而且在我看來,這是一個不太難編碼的問題。
例如:
russell-2000-index-12-23-2021.csv是下載名稱(日期會有所不同),而russell-2000-index.csv是當前在宏的 VBA 代碼中的檔案名
我隨后每天下載這些檔案,檔案名將反映下載日期。我曾嘗試使用 VBA 編輯代碼以在檔案名的“russell-2000-index”部分之后使用通配符,但這對我不起作用。檔案本身具有相同的結構和相同數量的列、標題等。每天下載它們。
如果有人可以幫助我解決如何在 VBA 中使用通配符對我的宏進行編碼,以便能夠在將通過它傳遞的不同檔案名上運行,我將不勝感激。
謝謝!
編輯:

我的主要問題是如何撰寫 VBA 代碼才能正確運行我的宏檔案名,例如russell-2000-index-12-23-2021.csv或日期的任何變體?無論我下載它的日期如何,資料都將采用完全相同的結構,但檔案本身的名稱會有所不同。有沒有辦法做到這一點?再次感謝支持。
uj5u.com熱心網友回復:
如果在運行之前將代碼放入作業簿,則可以使用內置的物件識別符號來參考作業簿,而無需使用其名稱。例如。ThisWorkbook而不是Workbooks("Name").
如果您在宏作業簿/附加組件旁邊打開作業簿,則可以搜索作業簿集合以查找與您的預定義模式匹配的名稱,例如
Dim WB as Workbook, csvWB As Workbook
For Each WB in Application.Workbooks
If ... Then Set csvWB = WB
Next WB
那么關鍵是找到一種方法來將作業簿的名稱與您的模式相匹配。您可以嘗試使用Like運算子。
If FileName Like "russell-2000-index-??-??-????.csv" Then ...
或者
If FileName Like "russell-2000-index*" Then ...
您還可以使用InStr函式來測驗字串是否包含特定的子字串。InStr如果在主字串中找到,則回傳子字串的位置,如果未找到,則回傳 0。所以我們可以測驗<> 0(不等于零)。
If Instr(1, FileName, "russell-2000-index", vbTextCompare) <> 0 Then ...
使用這些方法之一成功找到作業簿后,您可以使用變數繼續宏的其余部分,csvWB而不再需要使用檔案名。
uj5u.com熱心網友回復:
按日期識別檔案
Option Explicit
Function GetTodaysRussell() As String
Const FolderPath As String = "C:\Test\"
Const BaseName As String = "russell-2000-index"
Const Delimiter As String = "-"
Const DateFormat As String = "mm-dd-yyyy"
Const FileExtension As String = ".csv"
Dim FilePath As String: FilePath = FolderPath & BaseName _
& Delimiter & Format(Date, DateFormat) & FileExtension
If Len(Dir(FilePath)) > 0 Then GetTodaysRussell = FilePath
End Function
Sub GetTodaysRussellTEST()
Dim swbPath As String: swbPath = GetTodaysRussell
If Len(swbPath) = 0 Then
MsgBox "Today's file hasn't been downloaded yet.", vbExclamation
Exit Sub
End If
Dim swb As Workbook: Set swb = Workbooks.Open(swbPath)
' Continue...
' e.g.:
MsgBox "Opened file '" & swb.Name & "'.", vbInformation
End Sub
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/392974.html
