B-B*_*erl 4 database macros microsoft-excel microsoft-excel-2010
我想开发一个宏,在我的 Excel 工作表中,我在特定单元格中键入日期,然后宏将进入包含文本文件的文件夹。一个你可以说的数据库。我希望它找到写成日期的相应文件名,通过分隔符将数据放入,然后粘贴到我最初放置日期的正下方的单元格中。
该文件夹将始终位于同一位置,文本文件的格式将全部为 DD_MM_YYYY。下面的单元格将永远是空的
一些图片可以让我更容易理解我的要求。
这比您想象的要简单,因为您可以从宏中调用文本导入向导(或者更确切地说,您可以使用其功能),无需编写 CSV 解析器或任何类似的东西。
事实上,我对下面的宏所做的只是使用内置的记录功能,然后稍微调整一下以满足您的需求。
备份您当前的 Excel 文件,以防出现问题。
folder将宏中的定义更改为包含所有数据文件的路径 - 确保包含尾部斜杠。
选择列的标题单元格,其中必须包含您的文件之一的名称 -包括文件扩展名. 如果您希望删除扩展名,您可以在加载数据后编辑此字段。
运行宏。
它将从当前单元格中获取文件名,查看指定folder并打开单元格中指定的文件。然后它会将其导入为 CSV,正好位于所选单元格下方的一个单元格(启动宏时)。
因此,它可能会在运行宏时覆盖所选单元格下方的单元格 - 建议小心。
如果未找到该文件,或发生其他一些错误,这将失败并显示正常的 VBA 错误框,没有友好的错误消息。
其中一些可能可以修剪 - 正如我从录音中得到的,而不是学习如何使用QueryTables自己 - 但它不会受到伤害,并且似乎可以可靠地工作。
Sub LoadFromFile()
Dim fileName As String, folder As String
folder = "C:\Path\To\Your\Files\"
fileName = ActiveCell.Value
ActiveCell.Offset(1, 0).Range("A1").Select
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:=False
End With
End Sub
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
81676 次 |
| 最近记录: |