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 SubMää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 TypeUpea 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.