所以我经常运行某个报告,然后我必须手动将大约30个字段输入到进行某些计算的VBA用户表单中。他们最近更新了我收到此报告的网站,因此他们现在在excel文件中提供此特定报告。
我想要做的是在我的用户窗体中添加一个浏览按钮,我可以搜索该文件,然后它会自动填充数据字段。我对VBA非常方便(或者至少曾经是这样),但我在这里对这个具体问题了解不多。希望有人能伸出援助之手!
由于
答案 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