Avatar billede jonesw Nybegynder
28. februar 2008 - 10:49 Der er 5 kommentarer og
1 løsning

Er det muligt via VBA at lave en åben fil boks?

Jeg har et ark som indeholder noget statistik. For at opdatere statistikken så skal der køreres en makro hvorved at man åbner et andet excel-dokument som makroen så tager dataen fra og lægger den i statistik arket. Overførslen af data er lavet, men jeg tænkte på om det var muligt om det var muligt at lave en funktion så brugeren bare skal finde filen på sin harddisk eller hvor den nu ligger. Altså lidt ligesom når man åbner en fil i excel. De informationer som jeg gerne skulle få ud af det er den fulde sti til filen, samt filens navn så jeg kan åbne og hente data fra filen og lukke den igen, uden at brugeren skal gøre noget.
Avatar billede jonesw Nybegynder
28. februar 2008 - 12:07 #1
Jeg glemte lige at nævne at det skal laves i VBA...
Avatar billede falster Ekspert
28. februar 2008 - 13:50 #2
Jeg ville sige nej.

Har haft en lignende situation, som jeg kun ku' løse ved at hardcode filplaceringen, som jo dermed blev "fast" uden valgmuligheder.

Kigger med.
Avatar billede stefanfuglsang Juniormester
28. februar 2008 - 15:19 #3
Du kan nok bruge GetOpenFilename som i eksemplet nedenfor, der åbner en bestemt type filer på A:


Public Sub LoadClearance()
    Dim file As Workbook
    Dim book As Workbook
    On Error Resume Next
    Set book = ActiveWorkbook
    Application.DefaultFilePath = "C:\Documents and Settings\administrator\Dokumenter"
    ChDrive "A:"
    ChDir "\"
    datafile = Application.GetOpenFilename("Clearancefiler (*.a??), *.a??")
    ChDrive "C:"
    ChDir "\Documents and Settings\administrator\Dokumenter"
    If datafile <> False Then
        Workbooks.OpenText Filename:=datafile _
            , Origin:=xlWindows, _
            StartRow:=1, DataType:=xlFixedWidth, FieldInfo:=Array(Array(0, 1), Array(5, _
            1), Array(12, 1), Array(18, 1))
        If InStr(UCase(datafile), "CR") > 0 Then
            pharm = "Cr-51 EDTA"
        Else
            pharm = "Tc-99m DTPA"
        End If
        ActiveSheet.UsedRange.Copy
        Set file = ActiveWorkbook
    Else
        pharm = "Cr-51 EDTA"
    End If
    book.Activate
    Worksheets(shData).Activate
    If datafile Then
        ActiveSheet.Paste Destination:=Worksheets(shData).Range("A1")
        ActiveSheet.Range("A1").Copy ' to clear large amount of data warning
        file.Close
    End If
    Range("e3").Select
    InsertText
   
End Sub
Avatar billede jonesw Nybegynder
28. februar 2008 - 15:41 #4
Det er et godt bud, faktisk utrolig godt... Ved hjælp af GetOpenFilename så får jeg lige den boks som jeg ønskede... Det man får retur er den fuldesti til filen, hvilket er også hvad jeg ønskede... Nu mangler jeg bare lige at sortere i inputtet så jeg bare har filnavnet i en String, da jeg jo skal bruge det til at lukke den igen via Application.Workbooks(filnavn).Close
Avatar billede stefanfuglsang Juniormester
28. februar 2008 - 20:43 #5
hvis du åbner filen i samme procedure, kan du blot gemme en reference til den aktive workbook, som f.eks. (svarende til det jeg gør ovenfor):
Set aw = ActiveWorkbook
og senere
aw.close,

ellers kan du finde filnavnet således:
Sub TEST()
    Dim fs As Object
    Set fs = CreateObject("Scripting.FileSystemObject")
    MsgBox fs.Getfilename("C:\test\data\filnavn.xls")
End Sub
i msgbox'en skrives "filnavn.xls"
Avatar billede jonesw Nybegynder
28. februar 2008 - 21:18 #6
Mange tak for hjælpen...
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
Kategori
Excel kurser for alle niveauer og behov – find det kursus, der passer til dig

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