Visual basic, open multiple files

Moderators: jkien, Xilvo

Gebruikersavatar
Berichten: 9.240

Visual basic, open multiple files

Dit is Geen Visual Basic for Applications (VBA) maar gewoon VB

De VB werkt als macro functie in een programma van de laser vibrometer die ik gebruik. Echter, de functie die ik gebruik is van de window api.

Ik heb een functie geschreven voor het openen en exporteren van een bepaald bestand, een pvd bestand. Die code is vrij specifiek voor het programma, maar waar ik problemen mee heb is het automatiseren zodat hij het automatisch doet voor meerdere bestanden. Ik heb namelijk 63 metingen gedaan, en ik wil het allemaal niet mer de hand doen.

Wat wil ik:

Ik wil dat er een 'file open dialog' komt waarin ik meerdere bestanden kan kiezen, en dan een string of array terug krijg met al de 'path' van de gekozen bestanden

Met die string of array kan ik dan zelf wel functies uitvoeren.

Wat heb ik:

Ik kan één bestand openen:

Code: Selecteer alles

Const c_strFileFilter As String = "Polytec File (*.pvd)|*.pvd|All Files (*.*)|*.*||"

 Const c_strFileExt As String = "pvd"

 

 Option Explicit

 

 

 

 Sub Main

 

 ' get filename and path

 Dim strFileName As String

 strFileName = FileOpenDialog()

 

 MsgBox(strFileName)

 

 

 End Sub

 

 

 ' *******************************************************************************

 ' * Helper functions and subroutines

 ' *******************************************************************************

 Const c_OFN_HIDEREADONLY As Long = 4

 

 Private Function FileOpenDialog() As String

 ' -------------------------------------------------------------------------------

 ' Select file.

 ' -------------------------------------------------------------------------------

 On Error GoTo MCreateError

 Dim fod As Object

 Set fod = CreateObject("MSComDlg.CommonDialog")

 fod.Filter = c_strFileFilter

 fod.Flags = c_OFN_HIDEREADONLY

 fod.CancelError = True

 On Error GoTo MCancelError

 fod.ShowOpen

 FileOpenDialog = fod.FileName

 GoTo MEnd

 MCancelError:

 FileOpenDialog = ""

 GoTo MEnd

 MCreateError:

 FileOpenDialog = GetFilePath(, c_strFileExt, CurDir(), "Select a file", 0)

 MEnd:

 End Function
Waar loop ik vast:

Dit is wat ik tracht te doen. Maar het werkt niet: Versie 2

Code: Selecteer alles

' *******************************************************************************

' * Open multiple files, take path-string of each

' *******************************************************************************

Const c_strFileFilter As String = "Polytec File (*.pvd)|*.pvd|All Files (*.*)|*.*||"

Const c_strFileExt As String = "pvd"

Const c_OFN_HIDEREADONLY As Long = &H4

Const c_OFN_ALLOWMULTISELECT As Long = &H200

Const c_OFN_EXPLORER As Long = &H80000

Option Explicit

Sub Main

' get filename and path

Dim strFileName As String

strFileName = FileOpenDialog()

MsgBox(strFileName)

End Sub

Private Function FileOpenDialog() As String

' -------------------------------------------------------------------------------

' Select file.

' -------------------------------------------------------------------------------

On Error GoTo MCreateError

Dim i As Integer

Dim fod As Object

Set fod = CreateObject("MSComDlg.CommonDialog")

fod.Filter = c_strFileFilter

fod.Flags = c_OFN_HIDEREADONLY Or c_OFN_ALLOWMULTISELECT Or c_OFN_EXPLORER

fod.CancelError = True

FileOpenDialog = ""

On Error GoTo MCancelError

If fod.ShowOpen Then

For i = 1 To fod.FileNames.Count

FileOpenDialog = FileOpenDialog + "," + fod.FileName

Next

End If

GoTo MEnd

MCancelError:

FileOpenDialog = ""

GoTo MEnd

MCreateError:

FileOpenDialog = GetFilePath(, c_strFileExt, CurDir(), "Select a file", 0)

MEnd:

End Function
Ik heb tig dingen uitgeprobeerd met ALLOWMULTISELECT enzo, maar niks werkt.

Heeft iemand enig idee wat er fout gaat?

Gebruikersavatar
Berichten: 6.905

Re: Visual basic, open multiple files

Zet het property multiselect van het open file dialog op True. Je zal wel moeten opzoeken wat er dan juist gebeurt; ik heb dit immers nog nooit getest
Het vel van de beer kunnen verkopen vraagt moeite tenzij deze dood voor je neervalt. Die kans is echter klein dus moeten we zelf moeite doen.

Gebruikersavatar
Berichten: 9.240

Re: Visual basic, open multiple files

via:

fod.c_OFN_ALLOWMULTISELECT = True

of

set fod.c_OFN_ALLOWMULTISELECT = True

Ik probeer het beide wel even, maar iets zegt me dat ik dit al een paar keer heb geprobeert.

Gebruikersavatar
Berichten: 6.905

Re: Visual basic, open multiple files

En als je het direct instelt bij de aanmaak van openfiledialog?

EDIT: http://www.visual-basic5.de/vbclassic/dotnet/multiselect.htm lijkt mij een duidelijke werkwijze
Het vel van de beer kunnen verkopen vraagt moeite tenzij deze dood voor je neervalt. Die kans is echter klein dus moeten we zelf moeite doen.

Gebruikersavatar
Berichten: 9.240

Re: Visual basic, open multiple files

Nee, ik krijg het niet aan de gang. Ik kan de OFN_XXX niet instellen.

8-)

Gebruikersavatar
Berichten: 1.623

Re: Visual basic, open multiple files

Misschien heb je hier of hier wat aan?
Beter kaal als geen haar want een kip snurkt

Gebruikersavatar
Berichten: 2.364

Re: Visual basic, open multiple files

fod.Flags = c_OFN_HIDEREADONLY Or c_OFN_HIDEREADONLY Or c_OFN_ALLOWMULTISELECT
Je Ort hier twee keer dezelfde bitflag.

Op zich zou OFN_ALLOWMULTISELECT moeten werken. Je moet dan wel OFN_EXPLORER erbij gebruiken anders krijg je complicaties.
“Quotation is a serviceable substitute for wit.” - Oscar Wilde

Gebruikersavatar
Berichten: 9.240

Re: Visual basic, open multiple files

Bedankt voor de hulp alvast. Ik heb even de begin post aangepast en mijn probeersel vernieuwd.

@ Zpiderman, de eerste is VBA (visual basic for applications) wat net iets anders is.

de tweede is C++, wat ook net weer iets anders is. Ik kan het best proberen, maar ik ben bang dat ik dan helemaal mijn kluts moet gaan zoeken.

@Rev, eerst moet ik stellen dat het voorbeeld dat met de software was bijgeleverd (dus de eerste in de beginpost) de OFC_HIDEREADONLY niet werkt. Ik heb dus een bestand read-only gemaakt, maar dat verandert niks aan het zaakje. Filteren op bestandstype werkt dan weer wel.

Van zoeken op internet zijn dit de beste resultaten:

(gezocht op MSComDlg.CommonDialog + OFN_ALLOWMULTISELECT)

http://www.dbforums.com/showthread.php?t=807921 met hele rare opmaak 8-)

http://www.eggheadcafe.com/forumarchives/s...ost23376272.asp

Ik probeer nog wel even, maar moet eigenlijk een presentatie voorbereiden.

(Ik was waarschijnlijk allang klaar met 63 maal exporteren dan het bedenken van de multi-select optie, maar kan er mijn gedachten niet overheen zetten.)

Gebruikersavatar
Berichten: 2.364

Re: Visual basic, open multiple files

@Rev, eerst moet ik stellen dat het voorbeeld dat met de software was bijgeleverd (dus de eerste in de beginpost) de OFC_HIDEREADONLY niet werkt. Ik heb dus een bestand read-only gemaakt, maar dat verandert niks aan het zaakje. Filteren op bestandstype werkt dan weer wel.
Ik snap niet precies wat je bedoelt. Twee keer een waarde ORen is nooit wat je wilt.
fod.Flags = c_OFN_HIDEREADONLY Or c_OFN_HIDEREADONLY Or c_OFN_ALLOWMULTISELECT
Ik bedoelde te zeggen dat je dit kunt proberen:
fod.Flags = c_OFN_EXPLORER Or c_OFN_ALLOWMULTISELECT
Met de CTRL-toets kun je dan meerdere selecteren in het lijstje.
“Quotation is a serviceable substitute for wit.” - Oscar Wilde

Gebruikersavatar
Berichten: 691

Re: Visual basic, open multiple files

Misschien een ideetje:

Men zou ook een folder kunnen nemen voor de bestanden die men allemaal wilt toepassen.

En dan de folder scannen op de files die men wilt uitvoeren.

Behoeft men ze ook niet allemaal te selecteren.

(ik weet niet of dat de bedoeling was)

In mijn programmeertaal heb ik een opdracht die een gehele folder kan scannen op de files die de compiler kan lezen.

Men zou ook een txt file kunnen maken met de files die men wilt toepassen.
Een computertaal is voor mensen, niet voor de computer.

Berichten: 7.068

Re: Visual basic, open multiple files

In mijn programmeertaal ...
Ik snap dat je trots bent op je eigen brouwsel, maar ik word een beetje moe van elke keer te moeten lezen hoe geweldig jouw programmeertaal is. Vooral omdat niemand er verder iets aan heeft wat jouw programmeertaal allemaal kan aangezien ze niet beschikken over jouw programmeertaal. Dus alhoewel ik je neiging best begrijp, toch het verzoek om referenties naar je eigen programmeertaal te mijden.

Gebruikersavatar
Berichten: 6.905

Re: Visual basic, open multiple files

En tevens bestaat dat in andere talen ook of is op 2 min geschreven.
Het vel van de beer kunnen verkopen vraagt moeite tenzij deze dood voor je neervalt. Die kans is echter klein dus moeten we zelf moeite doen.

Gebruikersavatar
Berichten: 691

Re: Visual basic, open multiple files

Aan Evilbro: Sorry, ik wis niet dat je je daaraan ergerd.

Maar hoe kan ik dat nu weten als je mij daarover niet inlicht via mijn vermelde email.

Ik vind het altijd interessant waarvoor mensen soms iets nodig hebben zoals het probleem in dit topic.

Daarom ben ik geneigd te schrijven waarvoor iets dient.

Hoe leest men in C++ enzo eigenlijk een gehele folder in die alleen htm, html, txt ondersteunt?

Enne ik weet ook niet alles, heb maar een Havo nivo...
Een computertaal is voor mensen, niet voor de computer.

Gebruikersavatar
Berichten: 6.905

Re: Visual basic, open multiple files

Hier staan wat voorbeelden van verschillende talen om door een directory structuur te lopen.

Echter vermoed ik dat DePurpereWolf zijn software gebruiksvriendelijk wil hebben. Dan is een openfiledialog de aangewezen methode.

@DePurpereWolf: lukt het ondertussen al? Anders wil ik wel eens zien of mij het lukt als ik van nul begin om gewoon een array met filenames er uit te halen.
Het vel van de beer kunnen verkopen vraagt moeite tenzij deze dood voor je neervalt. Die kans is echter klein dus moeten we zelf moeite doen.

Gebruikersavatar
Berichten: 9.240

Re: Visual basic, open multiple files

Nee, het lukt nog niet, anders had ik dat wel vermeld, ik moet het nu alleen op een laag pitje zetten want ik heb het heden te druk, ik heb er al veelsteveel tijd aan besteed.

Ik nam aan dat deze kleine operatie door iedereen met een beetje VB achtergrond zo op te typen zou zijn, maar ik ben een beetje negatief verast door de vele verschillende versies op het web, waarvan de meeste het niet doen bij mij.

Zelf ben ik geen programmeur.

Reageer