' ***** frm_InstantSQL ***** Private Sub btn_fileSelect_Click() txt_fileSelect.Value = getFile() End Sub Private Sub btn_run_Click() Dim sourceFile As String, _ queryString As String sourceFile = txt_fileSelect.Value queryString = txt_SqlQuery.Value runQuery sourceFile, queryString End Sub ' ***** bas_InstantSQL ***** ' To Do: ' * fix DEBUG flags ' * error handling? ' initialize form Sub InstantSQL_init() Load frm_InstantSQL frm_InstantSQL.Show End Sub ' run SQL query on Excel data Sub runQuery(sourceFile As String, queryString As String) ' initialization Const DSN As String = "Excel-Dateien" ' DEBUG: DE only => i18n!? Const driverID As String = "790" ' Excel 97 Const MaxBufferSize As String = "2048" ' DEBUG: ?? Const PageTimeout As String = "5" ' DEBUG: ?? Dim sourceDir As String sourceDir = getFolder(sourceFile) ' check source file Set fs = CreateObject("Scripting.FileSystemObject") If fs.FileExists(sourceFile) And fs.FolderExists(sourceDir) Then ' temporarily disable screen updating Application.ScreenUpdating = False ' empty active sheet ActiveSheet.Range("A1").Select ActiveSheet.Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Clear ' run query With ActiveSheet.QueryTables _ .Add( _ Connection:= _ "ODBC;" & _ "DSN=" & DSN & ";" & _ "DBQ=" & sourceDir & Application.PathSeparator & sourceFile & ";" & _ "DefaultDir=" & sourceDir & ";" & _ "DriverId=" & driverID & ";" & _ "MaxBufferSize=" & MaxBufferSize & ";" & _ "PageTimeout=" & PageTimeout & ";", _ Destination:=ActiveSheet.Range("A1") _ ) .CommandText = Array(queryString) .Name = "Excel Data" .FieldNames = True .RowNumbers = False .FillAdjacentFormulas = False .BackgroundQuery = True .SavePassword = False .SaveData = True .AdjustColumnWidth = False .PreserveColumnInfo = True .PreserveFormatting = True .RefreshOnFileOpen = False .RefreshPeriod = 0 .RefreshStyle = xlOverwriteCells .Refresh BackgroundQuery:=False End With ' re-enable screen updating ActiveSheet.Range("A1").Select Application.ScreenUpdating = True Else MsgBox "Error reading source file." & vbNewLine & "Aborting." End If End Sub ' display file selection prompt Function getFile() filePath = Application _ .GetOpenFilename( _ "Excel files (*.xls), *.xls," & _ "All files (*.*), *.*" _ ) getFile = filePath End Function ' retrieve base folder from file path Function getFolder(filePath As String) ' DEBUG: inefficient/redundant!? Dim file As String, _ path As String file = Dir(filePath) path = Left(filePath, Len(filePath) - (Len(file) + 1)) getFolder = path End Function