Excel 2003:ssa on tehty makro joka tarkistaa onko jossakin tietyssä kansiossa tietyllä merkkijonolla (tunnisteella)olevia tiedostoja. Excel 2007 tökkää tuohon "Set fs = Application.FileSearch" kohtaan.
Virheilmoituksena tulee Run-time Error "445", Object doesn´t support this action.
Visual Basic editorissa on Tools -> References laitettu ruksi "Microsoft Scripting Runtime" -kohtaan ja Excel taulukon puolella Makrojen suojaus kohdassa on täppä kohdassa "salli VBA-projektin objektimallin käyttäminen"
Mikähän voisi olla pielessä? Alla koodia: (Muuttujat "Kansio" ja "Tunniste" on määritelty aikaisemmin).
Dim fs As Variant
Set fs = Application.FileSearch
With fs
.LookIn = Kansio
.FileName = Tunniste
If .Execute(SortBy:=msoSortByFileName, SortOrder:=msoSortOrderAscending) > 0 Then
jotakin
Else
jotakin muuta
End If
End With
-Pasi-
Virheilmoituksena tulee Run-time Error "445", Object doesn´t support this action.
Visual Basic editorissa on Tools -> References laitettu ruksi "Microsoft Scripting Runtime" -kohtaan ja Excel taulukon puolella Makrojen suojaus kohdassa on täppä kohdassa "salli VBA-projektin objektimallin käyttäminen"
Mikähän voisi olla pielessä? Alla koodia: (Muuttujat "Kansio" ja "Tunniste" on määritelty aikaisemmin).
Dim fs As Variant
Set fs = Application.FileSearch
With fs
.LookIn = Kansio
.FileName = Tunniste
If .Execute(SortBy:=msoSortByFileName, SortOrder:=msoSortOrderAscending) > 0 Then
jotakin
Else
jotakin muuta
End If
End With
-Pasi-
Vastaukset 6
Vanhimmat
.Filesearch on poistettu Excel 2007 versiosta.
Täältä MS-sivulta voit ladata myös 2007 versiossa toimivan tiedostolistaus työkirjan. Add-Ins valinnasta saat auki alavalikon.
http://office.microsoft.com/en-us/marketplace/EM011628721033.aspx?CategoryID=CE010846091033
Näyttää toimivan, mutta valitettavasti en voi käyttää tuota työkirjaa koska toiminnon tulisi olla osa omaa työkirjaani...
Miksi ihmeessä tuo .FileSearch on menty poistamaan, ja muutenkin, miksi ihmeessä yleensä Excel 2007 on menty tekemään...
-Pasi-
ja syystä tai toisesta poistaa funktioita uusista versioista aika ajoin. Uusin funktio on DIR(). Vastaavaa on tapahtunut aikaisemminkin. Löysin Excel.Programming sivustosta myös 2007 sopivan VBA-koodin.
Tässä lyhykäisyydessään Dir()-listaus, joka toimii myös vanhemmissa versioissa. Muuta koodin tiedot tarvittavaksi.
Sub DirListaus()
Application.ScreenUpdating = False
Sheets("Sheet1").Columns("A").ClearContents
Omahakemisto = "C:\Temp"
Tiedostonimi = Dir(Omahakemisto & "\")
Tiedostot = 0
Rivi = 1
Do While Tiedostonimi ""
Kokonimi = Omahakemisto & "\" & Tiedostonimi
Tiedostot = Tiedostot 1
Range("A" & Rivi) = Kokonimi
Rivi = Rivi 1
Tiedostonimi = Dir()
Loop
End Sub
Niin, kyllähän ne ohjelmat muuttuu, kutsutakoon sitä nyt sitten vaikkapa kehitykseksi. Vaikka aina välillä tuntuu että tuo "kehitys" aiheuttaa tavalliselle käyttäjälle enemmän ongelmia kuin mitään muuta. Väkisinkin tuli taas mieleen Linuxiin ja OpenOfficeen siirtyminen Microsoftin pikkuruisten muutosten myötä, mutta sekin olisi aikamoisen työläs tie kun VBA on tullut edes jollain tavalla tutuksi.
Suuri kiitos tuosta DIR-listauksesta, uskoisin että tuolla saan korvattua .FileSearch funktiolla tekemäni toiminnon. Saa nähdä kuinka pitkälle ohjelma sen jälkeen toimii...
Suuri kiitos siis sinulle ja Rauhallista Joulun aikaa!
Muokkasin koodin seuraavanlaiseksi, sain siitä melko siistin, ja mikä tärkeintä, toimivan. Kiitos.
Tiedosto = Dir(Kansio & "\")
Do While Tiedosto ""
If Left(Tiedosto, 8) = Tunniste Then
jotakin
KansioOk = True
End If
Tiedosto = Dir()
Loop
If KansioOk = False Then
jotakin muuta
End If
-Pasi-