如果文件包含某些文本,如何从文件中提取字符串并将其输入到单元格中? (VBA)

时间:2012-09-13 21:36:31

标签: vba if-statement excel-vba excel

说我有以下路径和文件名:

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

2 个答案:

答案 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