28. februar 2008 - 10:49Der 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.
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
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
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"
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.