Springen naar inhoud

Visual basic, open multiple files


  • Log in om te kunnen reageren

#1

DePurpereWolf

    DePurpereWolf


  • >5k berichten
  • 9240 berichten
  • VIP

Geplaatst op 04 mei 2008 - 16:52

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:
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
' *******************************************************************************
' * 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?

Veranderd door DePurpereWolf, 05 mei 2008 - 13:44
De code van het probeersel bijgewerkt


Dit forum kan gratis blijven vanwege banners als deze. Door te registeren zal de onderstaande banner overigens verdwijnen.

#2

jhnbk

    jhnbk


  • >5k berichten
  • 6905 berichten
  • VIP

Geplaatst op 04 mei 2008 - 19:26

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.

#3

DePurpereWolf

    DePurpereWolf


  • >5k berichten
  • 9240 berichten
  • VIP

Geplaatst op 04 mei 2008 - 20:55

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.

#4

jhnbk

    jhnbk


  • >5k berichten
  • 6905 berichten
  • VIP

Geplaatst op 04 mei 2008 - 20:57

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

EDIT: http://www.visual-ba...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.

#5

DePurpereWolf

    DePurpereWolf


  • >5k berichten
  • 9240 berichten
  • VIP

Geplaatst op 04 mei 2008 - 21:54

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

8-)

#6

zpidermen

    zpidermen


  • >1k berichten
  • 1623 berichten
  • Ervaren gebruiker

Geplaatst op 04 mei 2008 - 22:41

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

#7

Revelation

    Revelation


  • >1k berichten
  • 2364 berichten
  • Technicus

Geplaatst op 04 mei 2008 - 22:54

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

#8

DePurpereWolf

    DePurpereWolf


  • >5k berichten
  • 9240 berichten
  • VIP

Geplaatst op 05 mei 2008 - 13:41

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....ad.php?t=807921 met hele rare opmaak 8-)
http://www.eggheadca...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.)

#9

Revelation

    Revelation


  • >1k berichten
  • 2364 berichten
  • Technicus

Geplaatst op 05 mei 2008 - 15:27

@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

#10

Schwartz

    Schwartz


  • >250 berichten
  • 691 berichten
  • Verbannen

Geplaatst op 06 mei 2008 - 10:52

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.

#11

EvilBro

    EvilBro


  • >5k berichten
  • 6703 berichten
  • VIP

Geplaatst op 06 mei 2008 - 11:21

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.

#12

jhnbk

    jhnbk


  • >5k berichten
  • 6905 berichten
  • VIP

Geplaatst op 06 mei 2008 - 17:37

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.

#13

Schwartz

    Schwartz


  • >250 berichten
  • 691 berichten
  • Verbannen

Geplaatst op 06 mei 2008 - 18:01

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.

#14

jhnbk

    jhnbk


  • >5k berichten
  • 6905 berichten
  • VIP

Geplaatst op 06 mei 2008 - 21:53

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.

#15

DePurpereWolf

    DePurpereWolf


  • >5k berichten
  • 9240 berichten
  • VIP

Geplaatst op 06 mei 2008 - 22:29

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.





0 gebruiker(s) lezen dit onderwerp

0 leden, 0 bezoekers, 0 anonieme gebruikers

Ook adverteren op onze website? Lees hier meer!

Gesponsorde vacatures

Vacatures