Elikkäs mulla on Excel –tiedostossa "tietokanta", joka sisältää kullakin rivillä tietoja: osasto, toiminto, tiedosto jne.
Tämä tietokanta sijaitsee kokonaisuudessaan sheetillä 1. Tarkoituksena olisi tehdä ns. raporttisheettejä tästä tietokannasta. Esim. osasto A:lle tulisi raporttisheet, johon suodatetaan tietokannasta rivit, joilla osasto on A. Tämän lisäksi raporttisheettiin saattaisi tulla kaavioita tms. Kaipaisin ideoita muutamaan asiaan:
1.Tiedon suodattaminen
Mikä on paras keino suodattaa tiedot raporttisheeteille? Tällä hetkellä käytän Advanced Filteriä, joka toimii periaatteessa hyvin. Ongelmaksi koituu päivitys ja hyperlinkit. Tietokannassa on Word –dokumentteihin viittaavia hyperlinkkejä. Nämä eivät pysy hyperlinkkeinä suodatuksen jälkeen, vaan muuttuvat tekstiksi. Ideoita?
2.Tiedon päivitys
Sitten se vaikein asia. Tiedon pitäisi olla päivitettävissä niin itse tietokantasheetiltä, kuin myös kaikilta raporttisheeteiltä. Eli, jos osasto A:n henkilö muokkaa raporttisheetiltä jotain kenttää, pitäisi sen päivittyä tietokantaan. Samoin, jos joku päivittää tietokantasheetiltä osasto A:n kenttää, pitäisi sen päivittyä raporttiin.
Projekti on vasta alkutekijöissä, joten otan mielellään vastaan ideoita, miten tällainen tietokanta ja raportointi kannattaisi Excelillä toteuttaa. Valitettavasti tämä on tehtävä Excelillä, parempia keinoja olisi läjäpäin…
Luultavasti VB:tä tarvitaan, joten postasin tämän tänne.
MOI vzq!
oheisen esimerkin avulla saanet rakenneltua mieleisesi viritelmän...
'Module1 (globaali moduului) Public Sub Update() 'estetetään Exceliä kyselemästä tyhjennetäänkö taulu jos sisältöä... Application.DisplayAlerts = False 'tyhjennetään työkirjan taulut... For Each ws In Worksheets With ws 'mutta suodatetaan Data-taulu pois tyhjennysrutiinista. If .Name <> "Data" Then '...And .Name <> "TaulunNimi" jne. Then .UsedRange.Clear End If End With Next Application.DisplayAlerts = True Dim solu, col 'etsitään Data-taulusta sarake jossa on Osasto-määrite For Each solu In Sheets("Data").UsedRange If InStr(solu.Value, "Osasto") > 0 Then col = solu.Column: Exit For End If Next Dim cntA, cntB 'jne. 'käydään silmukassa läpi Datataulun sarakkeen [l]col[/l] 'solut ensimmäiseltä riviltä käytetyn alueen viimeiselle riville For i = 1 To Sheets("Data").UsedRange.Rows.Count 'poimitaan kulloinekin tapaus solun sisällön mukaan,... Select Case Sheets("Data").Cells(i, col).Value Case "Osasto:A" 'kasvatetaan kulloisenkin rivilaskurin arvoa 1:llä,... cntA = cntA + 1 'ja kopioidaan Data-taulun koko rivi kohdetauluun 'A-sarakkeesta lähtien, rivilaskurin osittamalle riville. Sheets("Data").Cells(i, col).EntireRow.Copy Destination:=Worksheets("OsastoA").Range("A" & CStr(cntA)) Case "Osasto:B" row = Sheets("OsastoB").UsedRange.Rows.Count + 1 cntB = cntB + 1 Sheets("Data").Cells(i, col).EntireRow.Copy Destination:=Worksheets("OsastoB").Range("A" & CStr(cntB)) 'jne. End Select Next End Sub
'Taul1(Data) Private Sub CommandButton1_Click() Update End Sub
'Taul2(OsastoA) Private Sub Worksheet_Activate() Update End Sub
'Taul3(OsastoB) Private Sub Worksheet_Activate() Update End Sub
'ThisWorkbook Private Sub Workbook_BeforeClose(Cancel As Boolean) Sheets("Data").Activate: Update End Sub Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) Update End Sub Private Sub Workbook_Open() Update End Sub
neau33 kirjoitti:
MOI vzq!
oheisen esimerkin avulla saanet rakenneltua mieleisesi viritelmän...
Kiitos! Perehdyn koodiin ja koitan saada jonkinlaista viritelmää aikaan :)
EDIT:
Nopeasti kun vilkaisin niin voi olla, että ymmärsit hiukan väärin rakenteen. Rakenne on seuraavanlainen:
Osasto | Toiminto | Tiedosto | ... ---------------------------------- A | rekry | jtn.doc | ... ---------------------------------- B | maksu | jtn2.doc | ... ---------------------------------- . . .
Annoit kuitenkin ideasi esille, koitan muokata siitä. Voi olla myös, että ymmärsit täysin oikein ja itse luin koodin väärin nopeasti. Joka tapauksessa suurkiitokset :)
MOI taas vzq!
Voihan olla, etten ymmärrä paljon mitään, mutta sen verran kuitenkin, että ajattelen raporttia matemaattisena tulona, jota muuttamalla ei tulon tekijöiden (= DATA-taulun sisältö) pitäisi muuttuman!
Jos kuitenkin lähdetään aivan yleisesti sille linjalle, että ajatteluni on syvältä niin maailman meno tulee muuttumaan taas kerran melko radikaalisti...
Olen kyllä sisäistänyt, että varsinkin hämärissä piireissä & esim. veronkierrossa olisi suurempaakin halukkuutta/tarvetta moiseen 'rukkailuun'...
Heippa taas!
Mikäli jotakuta vielä sattuisi kiinnostamaan Excel-tietokantaviritelmät ja koneella on XP + Office 2003 niin siirtymällä tänne, iskemällä username laatikkoon: admin & password laatikkoon: adminpwd pääsee imuroimaan: OsastoSysteemi_Asennus.zip -paketin (simppeli malli)
kesäterveisin...
Aihe on jo aika vanha, joten et voi enää vastata siihen.