从外部Excel文件中读取数据

时间:2016-09-16 13:35:20

标签: excel vba excel-vba

所以我经常运行某个报告,然后我必须手动将大约30个字段输入到进行某些计算的VBA用户表单中。他们最近更新了我收到此报告的网站,因此他们现在在excel文件中提供此特定报告。

我想要做的是在我的用户窗体中添加一个浏览按钮,我可以搜索该文件,然后它会自动填充数据字段。我对VBA非常方便(或者至少曾经是这样),但我在这里对这个具体问题了解不多。希望有人能伸出援助之手!

由于

2 个答案:

答案 0 :(得分:0)

strConnection = "Provider=Microsoft.ACE.OLEDB.12.0;" _
           & "Data Source='C:\Path\To\Workbook.xlsm';" _
           & "Extended Properties=""Excel 8.0;HDR=YES;"";"

strSQL = "SELECT * FROM [Sheet1$]" 

您可以直接查询excel文件。我将补充一点,该文件可能需要"干净/整洁" up"让它完美地运作。无论哪种方式,这都应该有所帮助。

编辑这是假设你先下载它。我必须先玩弄自动从站点获取文件然后查询它。

答案 1 :(得分:0)

我必须经常与其他工作簿一起工作,并且我会执行以下操作:

Dim reportBookPath As String
Dim reportwb As Workbook

reportBookPath = "C:\Users\......\filename.xlsx"
Set reportwb = Workbooks.Open(Filename:=reportBookPath)
reportwb.Application.Visible = False

然后,当我想访问该工作簿中的任何内容时,只需执行以下操作:

valueDesired = reportwb.Worksheets("Desired Sheet").Cells(row,column).Value

要使用它来打开具有动态文件名的工作簿,您需要为工作簿名称设置某种已建立的模式。如果有,则可以使用正则表达式打开相应的工作簿。要做到这一点,你会:

Dim objFSO As Object
Dim objFolder As Object
Dim objFile As Object
Dim shiftRegExp As RegExp
Dim strPattern As String
Dim pathToFile As String

以下一行:

strPattern = "[S|s]hift( ?)1( ?)\.xlsx$"

是所有这些代码中真正强大的部分。对于以下列任何方式结尾的任何文件名,此特定正则表达式将为true:

shift1.xlsx;转移1.xlsx; SHIFT1。 xlsx;班次1 .xlsx; Shift1.xlsx; Shift 1.xlsx; Shift1 .xlsx; Shift 1 .xlsx

您可以使用this link来测试自己的正则表达式。

Set shiftRegExp = CreateObject("vbscript.regexp")
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFSO.GetFolder("C:\Users\....\workbook directory")

With shiftRegExp

.Global = True
.MultiLine = True
.IgnoreCase = False
.Pattern = strPattern

End With

通过遍历所选目录中的所有文件来使用正则表达式,直到找到与正则表达式匹配的文件。显然,如果您有多个与正则表达式匹配的文件,则会出现问题。

For Each objFile In objFolder.Files

If shiftRegExp.test(objFile.Path) Then
    pathToFile = objFile.Path
    Exit For
End If

Next objFile