< návrat zpět

MS Excel


Téma: výpis adresáře rss

Zaslal/a 17.1.2022 8:56

Ahoj,
z dřívějška mám soubor, (spouští se dvojklikem do žluté zóny), který umí vypsat obsah libovolného adresáře (volitelně i včetně podadresářů) do tabulky. Z času na čas se tato věcička náramně hodí. Jenomže to využívá API funkce pro 32 bitový Office. Na 64 bit to nefunguje 7

Věděl by někdo z příslušných expertů toto opatřit příslušnými API funkcemi aby to fungovalo i v 64bit Office? Anebo klidně ať to používá jiné technologie, ale ať to umí vypsat obsah nějakého adresáře včetně podadresářů.

Předem dík

Příloha: zip51898_vypisadresaresoubory.zip (34kB, staženo 11x)
Zaslat odpověď >

#051902
avatar
Z příkazového řádku:
dir /S
Další nápověda je dir /?citovat
#051903
avatar
OK, nouzově by to šlo i takhle, ale než to pak rozparsuje do tabulky, tak je to docela fuškacitovat
#051904
avatar
Oprav si deklarace api volání.

Nějak tak (netestoval jsem to):

#If VBA7 Then

Private Declare PtrSafe Function SHGetPathFromIDList Lib "shell32.dll" Alias "SHGetPathFromIDListA" _
(ByVal pidl As LongPtr, ByVal pszPath As String) As Boolean

Private Type BROWSEINFO
hOwner As LongPtr
pidlRoot As LongPtr
pszDisplayName As String
lpszTitle As String
ulFlags As Long
lpfn As LongPtr
lParam As LongPtr
iImage As Long
End Type

Private Declare PtrSafe Function SHBrowseForFolder Lib "shell32.dll" Alias "SHBrowseForFolderA" _
(lpBrowseInfo As BROWSEINFO) As LongPtr
#Else
Private Type BROWSEINFO
hOwner As Long
pidlRoot As Long
pszDisplayName As String
lpszTitle As String
ulFlags As Long
lpfn As Long
lParam As Long
iImage As Long
End Type

Private Declare Function SHBrowseForFolder Lib "shell32.dll" Alias "SHBrowseForFolderA" _
(lpBrowseInfo As BROWSEINFO) As Long

Declare Function SHGetPathFromIDList Lib "shell32.dll" _
Alias "SHGetPathFromIDListA" (ByVal pidl As Long, ByVal pszPath As String) As Long

#End If


ps. Vždy upozorňuji na to, že tupé kopírování kódu není dobrý nápad.citovat
#051913
avatar
Dík, zatím na 32 bitech to fachá. 64 odzkouším až budu doma.

K té výtce: VBA kódy si ovbykle píšu sám, občas po tupém zkopírování upravuji ke svým potřebám, ale porozumět API (zřejmě myšleno jako ten lepší nápad) je přece jenom jiná liga a nedovedl jsem na na netu dohledat moc smysluplných informací.citovat
#051920
avatar
Tak na 64 bit Office to nejede, poslední dvě deklarace v #ELSE části jsou červené.

Zvláštní, že když v 32 bit změním logiku z
#If VBA7 Then na #If Not VBA7 Then
tak to stejně funguje.

A na 64 bitech když měním totéž, tak to nefachá ani tak ani tak. Rovněž jsem namísto VBA7 alternoval Win64 (dle nějakých googlových nálezů) ale taky žádný vlivcitovat
#051925
avatar
64 bit verzi excelu nepoužívám. Detaily např.:

https://docs.microsoft.com/en-us/previous-versions/office/developer/office-2010/ee691831(v=office.14)?redirectedfrom=MSDN

Mimo to jsou hlášeny problémy s uvedenými funkcemi:

https://social.msdn.microsoft.com/Forums/sqlserver/en-US/94fbf641-3c9a-46e3-a8a0-bba10829e57d/update-vba-code-to-64-bit-from-32-bit?forum=exceldev

Jinak google doručí dost informací na 1. pokus:

https://www.google.com/search?q=win64+SHBrowseForFolderA+excel+vbacitovat
#051936
avatar
Dík, nastuduju a zkusím pořešitcitovat

Uživatelské menu

Nejste přihlášen(a)
avatar\n

Menu

Formulář Faktura

Formulář Faktura IV

Oblíbený formulář Faktura byl vylepšen a rozšířen.
Více se dočtete zde.

Helios iNuvio

Používáte podnikový systém Helios iNuvio? Potřebujete pomoci se správou nebo vyvinout SQL proceduru? Více informací naleznete na stránce Helios iNuvio.

On-line nástroje