CommonDialogControl on todella käyttökelpoinen moniin tarkoituksiin, mutta haittapuolena on se, että ohjelma vaatii toimiakseen suurehkon ocx-tiedoston mukaan. Onneksi sama onnistuu API:n kautta. Esimerkki luo tiedostonavaamisikkunan API-funktion GetOpenFileName avulla.
Pääohjelma
Private Sub Form_Click() Dim OpenFile As OPENFILENAME 'pakollinen: tietueen koko OpenFile.lStructSize = Len(OpenFile) 'mille ikkunalle kuuluu OpenFile.hwndOwner = Form1.hWnd 'valittavat tiedostotarkenteet OpenFile.lpstrFilter = "Tekstitiedostot (*.txt)" & Chr(0) & "*.TXT" & Chr(0) & _ "Kaikki tiedostot (*.*)" & Chr(0) & "*.*" & Chr(0) 'pakollinen: tiedostonimen alustus OpenFile.lpstrFile = String(257, 0) 'pakollinen: tiedostonimen koko OpenFile.nMaxFile = Len(OpenFile.lpstrFile) - 1 'ikkunan otsikko OpenFile.lpstrTitle = "Valitse tiedosto" 'ikkunan näyttäminen lReturn = GetOpenFileName(OpenFile) 'valittu tiedostonimi löytyy OpenFile.lpstrFile -muuttujasta MsgBox "Valitsit " & Trim(OpenFile.lpstrFile) End Sub
Määrittelyt bas-tiedostoon
Public Declare Function GetOpenFileName Lib "comdlg32.dll" Alias "GetOpenFileNameA" (pOpenfilename As OPENFILENAME) As Long Public Type OPENFILENAME lStructSize As Long hwndOwner As Long hInstance As Long lpstrFilter As String lpstrCustomFilter As String nMaxCustFilter As Long nFilterIndex As Long lpstrFile As String nMaxFile As Long lpstrFileTitle As String nMaxFileTitle As Long lpstrInitialDir As String lpstrTitle As String flags As Long nFileOffset As Integer nFileExtension As Integer lpstrDefExt As String lCustData As Long lpfnHook As Long lpTemplateName As String End Type
Upea vinkki, juuri niin kuin niiden on tarkoitus palvella koodaajaa ;)
Juu sikahyvä on mutta mitkäs functiot näyttää colori/fontti ikkunat?
Kiitoksia vinkistä, autatteko vielä kertomalla missä bas-tiedosto on tai miten sitä pääsee editoimaan?
Itse itselleni vastaten: Tiedot lisättävä VBA-projektissa johonkin moduuliin. Vielä en kuitenkaan päässyt puusta pidemmälle. Herjaukset tyypistä(Type) loppui, mutta nyt saan runtime errorin "Object required" pääohjelman rivillä 9. Oltaisin, että ongelma on ettei uutta objektia ole alusteuttu, mutta mitehköhän se sitten tapahtuu?
Rivin 9 (hwndOwner) voi poistaa, jolloin ohjelma toimii myös VBA:ssa.
tänhän sais funkkariks kivasti, funkkari palauttais valitun tiedoston.
EDIT: ja sitten GetSaveFileName
tekee tallenna-ikkunan
Aihe on jo aika vanha, joten et voi enää vastata siihen.