我有一個 demo.xlsm 檔案,當我打開作業簿時會自動運行宏,但它需要讀取 .csv 檔案以獲取資料和 Lamda_Logo.png 檔案。Lamda_Logo.png 始終具有相同的名稱。.csv 檔案的名稱未知,但它將與我的 demo.xlsm 具有相同的路徑
如何在 VBA 代碼中使用變數來參考我的 csv 檔案的路徑和名稱?
我試過了
csvPath = Dir(Thisworkbook.Path & "\*.csv")
但它不起作用。唯一有效的命令是
ThisWorkbook.Path & "\Lamda_Logo.png"
加載圖片,但我不能對 .csv 檔案做同樣的事情,因為我不知道名字..
這是我的代碼:
Private Sub Workbook_Open()
Dim ws As Worksheet
Dim imagePath As String
Dim imgLeft As Double
Dim imgTop As Double
Set ws = ActiveSheet
imagePath = ThisWorkbook.Path & "\Lamda_Logo.png"
imgLeft = ActiveCell.Left
imgTop = ActiveCell.Top
'Width & Height = -1 means keep original size
ws.Shapes.AddPicture _
fileName:=imagePath, _
LinkToFile:=msoFalse, _
SaveWithDocument:=msoTrue, _
Left:=imgLeft, _
Top:=imgTop, _
Width:=-1, _
Height:=-1
Dim fileName As String, folder As String
folder = ThisWorkbook.Path & "\"
fileName = "#Lamda_Dev_Projects_Risk_Register_191020211650.csv"
ActiveCell.Offset(1, 0).Range("A12").Select
With Worksheets("Sheet1").Range("A13:T13")
.Font.Size = 12
End With
Worksheets("Sheet1").Range("A13:T13").Font.Bold = True
Range("A13:T13").Interior.Color = RGB(147, 175, 186)
With ActiveSheet.QueryTables _
.Add(Connection:="TEXT;" & folder & fileName, Destination:=ActiveCell)
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 850
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = False
.TextFileSemicolonDelimiter = False
.TextFileCommaDelimiter = True
.TextFileSpaceDelimiter = False
.TextFileColumnDataTypes = Array(1, 1, 1, 1)
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=True
End With
'check for filter, turn on if none exists
If Not ActiveSheet.AutoFilterMode Then
ActiveSheet.Range("A13").AutoFilter
End If
End Sub
uj5u.com熱心網友回復:
我試過了
csvPath = Dir(Thisworkbook.Path & "\*.csv")
但它不起作用。唯一有效的命令是
ThisWorkbook.Path & "\Lamda_Logo.png"
加載圖片,但我不能對 .csv 檔案做同樣的事情,因為我不知道名字..
uj5u.com熱心網友回復:
該Dir函式將回傳 File Name,但沒有Path。因此,如果您的作業簿是“D:\Files\Testing\Workbook1.xlsx”,而您的 CSV 是“D:\Files\Testing\Data_20211020.csv”,則:
ThisWorkbook.Path將是“D:\Files\Testing”Dir(ThisWorkbook.Path & "\*.csv")將是“Data_20211020.csv”- 你想要的結果
csvPath是“D:\Files\Testing\Data_20211020.csv”
因此,完整路徑將是
csvPath = ThisWorkbook.Path & "\" & Dir(ThisWorkbook.Path & "\*.csv")
(請記住,Dir將回傳面具/過濾器相匹配的偽隨機檔案,并要求Dir()再次將回傳一個又一個,直到他們全部被退回。如果有多個CSV檔案,則可能需要更具體的過濾器,如Dir(ThisWorkbook.Path & "\Data_*_Processed.csv")或某物)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/329458.html
上一篇:VBAIf陳述句回傳錯誤值
