Avatar billede Oscar560 Novice
03. august 2011 - 00:22 Der er 13 kommentarer og
1 løsning

Database i excel - forespørgelser

Jeg har prøvet og prøvet uden held. Jeg prøver at forklare problemet.
Jeg har et program hvor jeg kan hente excel filer (ikke andre format muligheder at vælge) som jeg skal bruge til at lave nogle analyser.
Det er 23 ark som så skal samles i et excel fil med 23 ark, men der er ikke alle celler og rækker som skal med på det nye.
Det vil sige at jeg skal vælge de rækker og kolloner ud med guiden forespørgelser, derefter skal jeg tilføje par kolloner med min beregningsformler og noget datavalidering.
Og kolloneoverskrifter skal defineres med brugerdefinerede navne (sådet ikke er f1, f2, f3 osv.)

Alt det kan jeg lave på ark1 MANUELT, men så skal jeg i gang med ark 2 ark 3 osv, kan man ikke nøjes med at gøre det engang og så kan jeg bruge det til alle ark.

Formål er nå jeg er færdig, så gemmer jeg nye ark oven i de gamle og så går jeg bare ind på den som jeg har lavet med alt hvad jeg skal bruge og trykker på opdatere alle.

Jeg har løsningen men der varer par dage inden jeg er færdig med at gentage det samme 23 gange, og efterfølgende skal jeg lave det på 44 andre ark bare med andre beregninger.

HJÆLP.... Findes det ikke en måde hvordan man kan lave det engang og så bruge på alle 23 ark????

Hjælp belønnes med hele 200 point og hvis den bare rammer pote vil jeg give 400 point oven i!!
Avatar billede komputerdk Mester
03. august 2011 - 08:11 #1
bare så jeg forstår det korrekt.

du har 23 excel filer, som skal samles i en fil med 23 faner?

Er formateringen / overskrifter og formler de samme på alle fanerne ??


Du kunne optage en makro (funktioner=>makro=>optag makro) hvis det er ens, og evt. lave en genvejstast - så kan du i koden se hvad den gør (eller poste den her, så den kan indgå i en VBA løsning).

Hvis det er ens for alle filer , så er koden logisk opbygget med

Vælg mappe med de 23 filer => opret en fane for hver fil => lav formateringen + formler => voila ;) 


man kunne også samle det hele i en database og lave en ark som så henter det ud derfra (som så skal i det andet program).
Avatar billede Oscar560 Novice
03. august 2011 - 20:37 #2
ja der er 23 excel filer som skal samles i en fil med 23 faner, der er samme sted i alle 23 ark jeg henter data, samme overskrifter og samme formler bruger.
Der er sådan i orginale excel filer er det en lang række celler med oplysinger som ikke skal med. Det er lykkes mig at lave en, men eftersom det tager langt tid bare med at lave et så håber jeg på en automatisk løsning til resten.
Der er ok løsning nr. 2 jeg tænker på
For senere bliver de 23 ark med data opdateret med ny filer som jeg bare gemmer oven i, så de 23 filer er databasen for hovedarket med de 23 faner, desvære kan jeg ikke bruge de 23 excel filer som de er, jeg vil kun have det med som jeg skal bruge.
F.eks skal den i den nye have følgende med nå jeg laver den med microsoft query:
Kun sheet 2
Så skal den kun have følgende med F1, F3, F4, F5, F6, F7, F8, F10, F12, 
F1 som ikke indholder summer og ikke indholder periode
F7, f8, F10, F12 ikke indholder tekst
Nå det er klaret så skal alle F'er have andre overskrifter.
Så er data hentet efterfølgende tilføjer jeg 3 kolloner mere,
en med formel i J med B2*0,85
i K med formel ABS(B2-J2)
og i L med formel HVIS(J2>0;J2/K2;0%) L kollone er formateret som % derudover er der i L kollone datavalidering med
0-10% grøn
10%-20% gul
>20% Rød
Rækker er aldrig ens det kommer an på hvor mange datoer jeg har valgt i den orginale fil der jeg henter den og gemme den, der er ikke problem det kan excel åbnbart selv finde ud af fordi ark er formateret som tabel og den udvider selv antal kolloner og dermer også min 3 kolloner med formler.
Men som du kan se ta det langt tid at oprette alt det der 23 gange, plus det næste jeg skal i gang med 44 fil.
Avatar billede komputerdk Mester
04. august 2011 - 08:39 #3
her en vba kode som kan hente filer ind som faner (den henter det hele, men så kan man bagefter lave formateringen mm på alle fanerne)..

Obs filen skal hedde Master.xls , ellers skal koden rettes


Option Explicit
Public Type BROWSEINFO
    hOwner As Long
    pidlRoot As Long
    pszDisplayName As String
    lpszTitle As String
    ulFlags As Long
    lpfn As Long
    lParam As Long
    iImage As Long
End Type

'32-bit API declarations
Declare Function SHGetPathFromIDList Lib "shell32.dll" _
  Alias "SHGetPathFromIDListA" (ByVal pidl As Long, ByVal pszPath As String) _
  As Long

Declare Function SHBrowseForFolder Lib "shell32.dll" _
Alias "SHBrowseForFolderA" (lpBrowseInfo As BROWSEINFO) As Long


Function GetDirectory(Optional msg) As String
    'fra http://www_j-walk.com/ss/excel/tips/tip29.htm
   
    Dim bInfo As BROWSEINFO
    Dim path As String
    Dim r As Long, x As Long, pos As Integer

'  Root folder = Desktop
    bInfo.pidlRoot = 0&

'  Title in the dialog
    If IsMissing(msg) Then
        bInfo.lpszTitle = "Select a folder."
    Else
        bInfo.lpszTitle = msg
    End If
   
'  Type of directory to return
    bInfo.ulFlags = &H1

'  Display the dialog
    x = SHBrowseForFolder(bInfo)
   
'  Parse the result
    path = Space$(512)
    r = SHGetPathFromIDList(ByVal x, ByVal path)
    If r Then
        pos = InStr(path, Chr$(0))
        GetDirectory = Left(path, pos - 1)
    Else
        GetDirectory = ""
    End If
End Function


Sub Combine()
    'inspireret af http://www_ozgrid.com/forum/showthread.php?t=16343&s=bfb6951e1c9bd645f541835938440347&p=83045#post83045
   
    'Definerer variabler
    Dim fPath, fName, Master, fNamemaster, msg, filepth, FaneNavnFindes As String
    Dim oprAntalFaner As Integer
   
  On Error GoTo fejl
   
    oprAntalFaner = Sheets.Count 'tæller antal faner før koden kører
   
    msg = "Vælg Mappen med filerne"
     
   
    fPath = GetDirectory(msg) & "\" ' alternativt skriv stien til fx  "C:\tester\"  for at undgå popup
    fName = Dir(filepth & "*.xls")
    Master = "Master.xls" 'det som din "samlefil hedder af navn - se i toppen når den er åben"
   
   
    Do While fName <> ""
        Workbooks.Open fPath & fName
        Sheets(1).Copy After:=Workbooks(Master).Sheets(Workbooks(Master).Sheets.Count)
        Workbooks(fName).Close SaveChanges:=False
       
        FaneNavnFindes = findesFane(fName)
        fNamemaster = fName
        If FaneNavnFindes = 1 Then 'findes i forvejen - burde IKKE være et problem
        fNamemaster = Replace(fName, ".xls", Replace(TimeValue(Now()), ":", "") & ".xls")
        End If
       
        Workbooks(Master).Activate 'så er vi sikker på at vi tager det rigtige ark
       
        ActiveSheet.Name = Replace(fNamemaster, ".xls", "") 'omdøber fanen til filnavnet uden .xls
        fName = Dir
    Loop
   
    MsgBox Sheets.Count - oprAntalFaner & " faner er importeret :)"
   
    Exit Sub
   
fejl:
  MsgBox "der er sket en fejl"
   
   
   
End Sub


Function findesFane(ByVal fName As String) As String
Dim i As Integer
Dim aktivFane As String
findesFane = 0 '0 er findes ikke
aktivFane = ActiveSheet.Name 'så ender vi hvor vi startet egentlig spildkode og just in case

For i = 1 To Sheets.Count 'kører igenmnem alle faner..
Sheets(i).Select
    If ActiveSheet.Name & ".xls" = fName Then
    findesFane = 1
    End If
Next

Sheets(aktivFane).Select

End Function
Avatar billede komputerdk Mester
04. august 2011 - 08:42 #5
obs, det er kun første fane som hentes

Do While fName <> ""
        Workbooks.Open fPath & fName
        Sheets(1).Copy After:=Workbooks(Master).Sheets(Workbooks(Master).Sheets.Count)
        Workbooks(fName).Close SaveChanges:=False

(1) betyder første fane, 2 anden etc.. hvis navnet er det samme kan du skrive det "navn"
Avatar billede komputerdk Mester
04. august 2011 - 09:56 #6
hvis du optager en makro der gør det rigtige, så kan du bruge følgende kode.. makro 3 har jeg optaget (har dog lige ændret med kommentarer og hvordan du kan skrive en formel.

Men optag  og pas på med at vælge andre faner imens (så skriver den sheets(xxxx).select eller activate



Sub Makro3()
'
' Makro3 Makro
' Makro indspillet 04-08-2011
'

'
    ActiveWindow.SmallScroll Down:=-12 ' er fyld da jeg scrollede
    Range("A1").Select  'her vælger celle A1
    ActiveCell.FormulaR1C1 = "IO" 'her skriver vi i feltet
    Range("B1").Select 'næste overskrift
    ActiveCell.FormulaR1C1 = "Dadf"
    Columns("E:E").Select  'her vælges kolonne e
    Selection.Delete Shift:=xlToLeft 'her slettes kolonne e
    Range("F2").Select
    ActiveCell.Formula = "=A2-5" 'OBS brug formula og ikke formulaR1c1 hvis du skal henvise til celle
   
End Sub



Sub lav_format()
Dim i As Integer

For i = 2 To Sheets.Count - 1 'i = 2, da ark1 ikke skal formateres.. ellers ændre det til 1 og fjern -1

Sheets(i).Select

Makro3 'eller hvad din makro nu hedder så køres den

Next 'går til næste fane


End Sub
Avatar billede Oscar560 Novice
04. august 2011 - 23:31 #7
det ser godt ud, jeg prøvede idag med at lave en makro som gør det hele som jeg skal gøre 23 gange, og så tænke jeg at jeg bare kunne skifte sti navn i makro koden, men det lykkedes ikke, den blev ved med at kopiere den samme fl som jeg lavede makro efter selv om jeg skifter sti navn, mystisk.

Men jeg kan ikke få den VBA kode til at virke, det køre åbenbart den første del fint hvor jeg skal vælge mappen hvor filerne er, så trykker jeg ok og så siger den der er sket en fejl, kan ikke lige se hvor det går galt. PS. jeg bruger excel 2010 ved ikke om det tilfeldigt har noget med fejlen at gøre
Avatar billede komputerdk Mester
05. august 2011 - 05:22 #8
Undskyld , jeg har kun 2003 og der hedder Excelfiler .xls..... da du har 2010 skal du skifte .xls ud med .xlsx i koden.
Avatar billede Oscar560 Novice
05. august 2011 - 12:11 #9
det har jeg prøvet uden held.
Avatar billede Oscar560 Novice
05. august 2011 - 12:16 #10
selve filer de 23 filer er xls, men hovedarket er xlsx.
Avatar billede komputerdk Mester
06. august 2011 - 23:13 #11
hmm, prøv at ændre master.xls i koden til master.xlsx

og resten af koden med .xls

prøv evt. at sætte koden ind her , eller smid lige filen på peece eller lign.. (jeg har desværre ikke 2007 / 2010)
Avatar billede Oscar560 Novice
20. oktober 2011 - 16:39 #12
smid svar komputerdk
Avatar billede komputerdk Mester
20. oktober 2011 - 18:31 #13
virkede det? ellers ingen point..
Avatar billede Oscar560 Novice
20. oktober 2011 - 18:59 #14
ja det virkede, men jeg lavede en andet løsning senere, men du skal have point for det gode hjælp
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