Avatar billede amarku Novice
22. september 2022 - 09:48 Der er 7 kommentarer og
1 løsning

Stop for at vælge fil ud fra sti og fortsæt makro efter valgt fil

Jeg har en makro der importerer data fra et bestemt filnavn, men vil gerne have makroen til blot at vælge sti, så man aktivt selv skal vælge den ønskede CSV fil. Derefter skal makroen bare fortsætte, når man har valgt og importeret den ønskede fil.

Jeg starter fx sådan (dette er kun et udpluk af felterne jeg henter):

ActiveWorkbook.Queries.Add Name:= _
        "Test", Formula:= _
        "let" & Chr(13) & "" & Chr(10) & "    Kilde = Csv.Document(File.Contents(""C:\downloads\Test.csv""),[Delimiter="";"", Columns=12, Encoding=65001, QuoteStyle=QuoteStyle.Csv])," & Chr(13) & "" & Chr(10) & "    #""Hævede overskrifter"" = Table.PromoteHeaders(Kilde, [PromoteAllScalars=true])," & Chr(13) & "" & Chr(10) & "    #""Ændret type"" = Table.TransformColumnTypes(#""Hævede overskrifter"",{{""" & _
        "Tid"", type datetime}, {""Lokation"", type text}, {""Event"", type text}, })" & Chr(13) & "" & Chr(10) & "in" & Chr(13) & "" & Chr(10) & "    #""Ændret type"""
    With ActiveSheet.ListObjects.Add(SourceType:=0, Source:=Array( _
        "OLEDB;Provider=Microsoft.Mashup.OleDb.1;Data Source=$Workbook$;Location=""Test"";Extended Prop" _
        , "erties="""""), Destination:=Range("$A$2")).QueryTable
        .CommandType = xlCmdSql
        .CommandText = Array( _
        "SELECT * FROM [Test]")
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .BackgroundQuery = True
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .PreserveColumnInfo = True
        .ListObject.DisplayName = "Test"
        .Refresh BackgroundQuery:=False
    End With

Jeg ønsker at min makro skal stoppe ved "C:\downloads" hvor jeg så i dette tilfælde skal vælge at importere "Test" og så skal makroen fortsætte, så jeg har egentlig blot brug for at vide hvordan jeg starter makroen og stopper for at vælge og derefter genoptager efter valg af fil.
Avatar billede martens Guru
23. september 2022 - 06:17 #1
Jeg har noget vba kode, der åbner en dialogboks, således du kan browse efter en fil eller flere, men det er i Access, men mon ikke det med lidt finjustering kan benyttes i Excel ...
Vi kan da give det et skud....
Avatar billede amarku Novice
23. september 2022 - 11:46 #2
Hej Martens,

Kan du komme med et forslag, for så vil jeg se om jeg kan anvende det og ellers må jeg se hvilke andre løsninger der kommer
Avatar billede Jan Hansen Ekspert
23. september 2022 - 11:54 #3
mon en msgbox ikke kan bruges?
Avatar billede Jan Hansen Ekspert
23. september 2022 - 11:58 #4
Eller inputbox
Avatar billede kulawig Professor
23. september 2022 - 13:00 #5
Avatar billede martens Guru
24. september 2022 - 13:52 #6
Kig også lige her :

https://youtu.be/h_sC6Uwtwxk

Hun laver nogle rigtig gode videoer
Avatar billede bak Seniormester
24. september 2022 - 21:21 #7
Indsæt først denne kode til at finde filen
Private Function GetFile()
   
    With Application.FileDialog(msoFileDialogOpen)
        .InitialFileName = "*.csv"
        .Filters.Clear
        .Filters.Add "*.csv", "*.csv", 1
        .Title = "Find csv filen"
        .Show
        If .SelectedItems.Count = 0 Then
            GetFile = "False"
        Else
            GetFile = .SelectedItems(1)
        End If
    End With
   
End Function

Her efter kan du kalde functionen og bruge det returnerede filnavn

    Dim TheFile As String
    TheFile = """" & GetFile() & """"
    If TheFile = "False" Then Exit Sub
   
ActiveWorkbook.Queries.Add Name:= _
        "Test", Formula:= _
        "let" & Chr(13) & "" & Chr(10) & "    Kilde = Csv.Document(File.Contents(" & TheFile & "),[Delimiter="";"", Columns=12, Encoding=65001, QuoteStyle=QuoteStyle.Csv])," & Chr(13) & "" & Chr(10) & "    #""Hævede overskrifter"" = Table.PromoteHeaders(Kilde, [PromoteAllScalars=true])," & Chr(13) & "" & Chr(10) & "    #""Ændret type"" = Table.TransformColumnTypes(#""Hævede overskrifter"",{{""" & _
        "Tid"", type datetime}, {""Lokation"", type text}, {""Event"", type text}})" & Chr(13) & "" & Chr(10) & "in" & Chr(13) & "" & Chr(10) & "    #""Ændret type"""
    With ActiveSheet.ListObjects.Add(SourceType:=0, Source:=Array( _
        "OLEDB;Provider=Microsoft.Mashup.OleDb.1;Data Source=$Workbook$;Location=""Test"";Extended Prop" _
        , "erties="""""), Destination:=Range("$A$2")).QueryTable
        .CommandType = xlCmdSql
        .CommandText = Array( _
        "SELECT * FROM [Test]")
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .BackgroundQuery = True
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .PreserveColumnInfo = True
        .ListObject.DisplayName = "Test"
        .Refresh BackgroundQuery:=False
    End With
Avatar billede amarku Novice
26. september 2022 - 15:15 #8
Tak for gode forslag og links, men jeg har valgt at anvende Bak's løsning, der virker efter hensigten.

NB. Man tildeler åbenbart ikke point mere, så jeg antager at spørgsmålet er lukket nu.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester