2016-09-16 154 views
0

因此,我经常运行某个报告,然后必须手动输入大约30个字段,然后将其输入到执行一些计算的VBA用户窗体中。他们最近更新了我得到这份报告的网站,所以他们现在在一个excel文件中提供这个特定的报告。从外部Excel文件读取数据

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

感谢

+0

需要在这里稍作澄清 - 你知道文件与数据字段的位置吗?如果是这样,让你的按钮执行一个'Workbooks.Open',然后检索你需要的任何东西,关闭它,做你的calcs等等?如果你想要用户指定文件,看看'Application.FileDialog(msoFileDialogFilePicker)'命令让他们选择有问题的文件?一般来说,如果您发布自己的努力并表明您已经尝试先自己解决问题,那么您在这里可能会更有帮助。 – Dave

+0

你实际上没有在这里提到“具体问题”。 –

+0

对不起,我实际上并没有找人为我做这个!只是想要朝正确的方向推进。我会看看FileDialog命令,这看起来像我在找什么。谢谢 – ct4242

回答

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文件直接查询。我会补充说,该文件可能需要“干净/整洁”,才能完美运行。无论哪种方式这应该有所帮助。

编辑这是假设你首先下载它。我将不得不四处自动从网站获取文件,然后查询它。

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$" 

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

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 
+0

我仍然需要动态获取文件路径名,我假设使用Application.FileDialog(msoFileDialogFilePicker)命令。我只是不熟悉这个命令。思考? – ct4242

+0

@ ct4242,我在上面的答案中加入了。如果你的情况允许,正则表达式可以解决你的问题。 – James