• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

Dialoogvenster oproepen aan begin macro

Status
Niet open voor verdere reacties.

CyberJaap

Gebruiker
Lid geworden
19 aug 2008
Berichten
29
Ik zit met een probleempje waar ik niet uit kom.

Om tekstbestanden met een standaard bestandsnaam te importeren maak ik gebruik van een macro die ik middels de recorder heb gemaakt. Het probleem is nu dat de standaard bestandsnaam sinds kort dagelijks wijzigt met een datum-notatie en ik dus 2 opties heb:
1. Bestandsnaam steeds aanpassen (zonder datumnotatie) en de macro gebruiken of
2. De macro aanpassen waarbij aan het begin gevraagd wordt welk bestand gebruikt moet worden.

Persoonlijk wil ik gebruik maken van de tweede optie, echter heb ik geen idee hoe ik binnen de macro het dialoogvenster kan aanroepen om daarna de macro z'n werk af te laten maken.

Iemand wellicht een tip? Hieronder doe ik het begin van de macro om aan te geven wat het huidige begin is.

Alvast bedankt.
Code:
Range("A1").Select
    With ActiveSheet.QueryTables.Add(Connection:= _
        "TEXT;G:\Management Info\Amsterdam\Nachtverwerking\Manco lijsten\manco_met_vrrd_artikelen_1808" _
        , Destination:=Range("A1"))
        .Name = "manco_met_vrrd_artikelen_1808"
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .TextFilePromptOnRefresh = False
        .TextFilePlatform = 850
        .TextFileStartRow = 1
        .TextFileParseType = xlDelimited
        .TextFileTextQualifier = xlTextQualifierDoubleQuote
        .TextFileConsecutiveDelimiter = False
        .TextFileTabDelimiter = True
        .TextFileSemicolonDelimiter = True
        .TextFileCommaDelimiter = False
        .TextFileSpaceDelimiter = False
        .TextFileColumnDataTypes = Array(9, 9, 9, 2, 2, 2, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
        .TextFileTrailingMinusNumbers = True
        .Refresh BackgroundQuery:=False
    End With
Ik had overigens ergens op dit forum iets gelezen over Application.GetOpenFilename, maar die functie in de macro verwerken snap ik ook (nog) niet en wellicht denk ik daar ook wel verkeerd mee.

[EDIT 20:34]
Kan ik iets met de volgende code die ik in het VBA forum heb gevonden en zo ja; hoe pas ik dat dan toe op mijn macro?
Code:
file = Application.GetOpenFilename("Alle bestanden (*.*),*.*")
If file = False Then Exit Sub
Workbooks.Open Filename:=file
 
Laatst bewerkt:
Zet dat laatste bovenaan. In de variabele file staat nu de naam.
Ik ken alleen het 2de stuk niet goed. Er staan namelijk 2 file locaties in.
Vervang bv
.Name = "manco_met_vrrd_artikelen_1808"
in
.Name = file
of
With ActiveSheet.QueryTables.Add(Connection:="TEXT;G:\Management Info\Amsterdam\Nachtverwerking\Manco lijsten\manco_met_vrrd_artikelen_1808", Destination:=Range("A1"))
in
With ActiveSheet.QueryTables.Add(Connection:=file, Destination:=Range("A1"))

Deze laatste weet ik niet zo.

Volgorde voorbeeld:
-----------------------------------------------------
file = Application.GetOpenFilename("Alle bestanden (*.*),*.*")
If file = False Then Exit Sub
Range("A1").Select

With ActiveSheet.QueryTables.Add(Connection:="TEXT;G:\Management Info\Amsterdam\Nachtverwerking\Manco lijsten\manco_met_vrrd_artikelen_1808", Destination:=Range("A1"))
.Name = "manco_met_vrrd_artikelen_1808"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 850
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = True
.TextFileSemicolonDelimiter = True
.TextFileCommaDelimiter = False
.TextFileSpaceDelimiter = False
.TextFileColumnDataTypes = Array(9, 9, 9, 2, 2, 2, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
End With
 
Beide bedankt voor de reactie.
Ik ga het morgen op het werk (heb daar restricted internet) uittesten en hou jullie op de hoogte van de resultaten.
 
Code:
  file = Application.GetOpenFilename("Tekstbestanden (*.txt),*.txt")
  If file = False Then Exit Sub

With [COLOR="Green"]ActiveSheet.QueryTables.Add("TEXT;" & file, Range("A1"))[/COLOR]
        .Name = "manco"
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .TextFilePromptOnRefresh = False
        .TextFilePlatform = 850
        .TextFileStartRow = 1
        .TextFileParseType = xlDelimited
        .TextFileTextQualifier = xlTextQualifierDoubleQuote
        .TextFileConsecutiveDelimiter = False
        .TextFileTabDelimiter = True
        .TextFileSemicolonDelimiter = True
        .TextFileCommaDelimiter = False
        .TextFileSpaceDelimiter = False
        .TextFileColumnDataTypes = Array(9, 9, 9, 2, 2, 2, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
        .TextFileTrailingMinusNumbers = True
        .Refresh BackgroundQuery:=False
    End With

Maar als er enig systeem zit in de naamgeving van het bestand (en dat zou mij verstandig lijken), kan het bestand natuurlijk door de VBA-code zelf gezocht worden (met Dir, filesearch of getfile). Dan hoeft er geen gebruikersinterventie plaats te vinden (heeft immer de voorkeur)
 
@Allen: Het is gelukt!!
Uiteindelijk is het als volgt geworden
Code:
  ChDrive "G"
  ChDir "\Management Info\Amsterdam\Nachtverwerking\Manco lijsten\"
  file = Application.GetOpenFilename()
  If file = False Then Exit Sub

With ActiveSheet.QueryTables.Add("TEXT;" & file, Range("A1"))

......gevolgd door de rest van de import.......
Ik had tevens ontdekt dat je met ChDrive en ChDir in ieder geval meteen de map kan aangeven waar het gewenste bestand staat. Ik heb ChDrive toegevoegd omdat ik in de Help-functie iets zag staan over het feit dat je met ChDir niet naar een andere schijf kan.
Het feit dat achter GetOpenFilename alleen () staat heeft te maken met het feit dat dan -standaard instelling- alle bestanden in die map weergegeven worden.
Maar als er enig systeem zit in de naamgeving van het bestand (en dat zou mij verstandig lijken), kan het bestand natuurlijk door de VBA-code zelf gezocht worden (met Dir, filesearch of getfile). Dan hoeft er geen gebruikersinterventie plaats te vinden (heeft immer de voorkeur)
@snb: Er zit zeker een systeem in naamgeving; het is namelijk de bestandsnaam plus een datum-notatie zoals bijvoorbeeld bestandsnaam_1808. Je tip van filesearch of getfile ga ik eens uitdokteren.

Vooralsnog ben ik nu al zeer tevreden en zet ik dit topic op [opgelost].
Bedankt voor de snelle hulp!!
 
Waar je met de macrorecorder niet achterkomt, maar die hetzelfde doet als die lap van jou:

Code:
on error resume next
Workbooks.Opentext  Application.GetOpenFilename("Tekstbestanden (*.txt),*.txt"), , , , xlTextQualifierNone, , True, True, False, False, False
 
Ik neem aan dat je het over de hele lap tekst bij het importeren hebt.
Ik ga eens kijken hoe dat "verhaal" van jou dan werkt.

[offtopic] Ik ben altijd vrij "lui" geweest door de recorder te gebruiken, maar kom er langzamerhand achter dat je met VB/VBA nog veel meer kan.
Ben er nu (o.a. op dit forum) druk mee bezig om mij er meer in te verdiepen. Binnenkort vakantie, dus wellicht een goed boek uit de bieb meenemen voor in de avonduren :o
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan