说我有以下路径和文件名:
P:\ ... \年度和季度预算数据\ ECMQA 2012Q1.xls
我想写一个if then语句执行以下操作(不确定我的语句是否设置正确):
If InStr(1, "P:\...\Annual and Quarterly Budget Data\ECMQA 2012Q1.xls", "QA", vbTextCompare) > 0 Then
BD.Sheets("Sheet1").Range("C2").value = "2012Q1"
End If
我不想只输入“2012Q1”,而是希望它从文件中自动读取。问题是我实际上循环了12个左右的文件,有两种类型,“ECMQA 2012Q1.xls”(或ECMQB 2012Q2.xls等)和“ECM Annual Budget 2012.xlsx”
如果我的文件是年度文件(如果文件包含“年度”),那么我想:
BD.Sheets("Sheet1").Range("C2").value = "2012"
我想让它从实际文件中读取这个,和另一个一样......不是我放入“2012”
有办法做到这一点吗?
任何帮助将不胜感激!
编辑:
这是循环:
Dim wb As Workbook, sFile As String, sPath As String
Dim itm As Variant
Dim strFileNames As String
sPath = "C:\Actuary\Cash Flow Forecast\Annual and Quarterly Budget Data\"
''Retrieve the current files in directory
sFile = Dir(sPath)
Do While sFile <> ""
strFileNames = strFileNames & "," & sFile
sFile = Dir()
Loop
''Open each file found
For Each itm In Split(strFileNames, ",")
If itm <> "" Then
Set wb = Workbooks.Open(sPath & itm)
''DO LOTS OF CALCULATIONS
'wb.Close True
End If
Next itm
答案 0 :(得分:3)
Filesystemobject有一个从文件名中提取基本名称的方法:
Msgbox createobject("scripting.filesystemobject").getbasename("myTest.xlsx") 'myTest
答案 1 :(得分:2)
有很多方法可以使用split,right,left,mid甚至regex来获得所需的内容。这实际上取决于可能的源字符串的构成以及它们包含的变化量。
基于你的例子,下面显示了最后一个变量给出“2012”
的各种操作Sub test()
fPath = "P:\...\Annual and Quarterly Budget Data\ECMQA 2012Q1.xls"
fArray = Split(fPath, "\")
fnamewithtext = fArray(UBound(fArray))
fnamewithoutext = Split(fArray(UBound(fArray)), ".")(0)
ifannual = Left(Split(fArray(UBound(fArray)), " ")(1), 4)
End Sub