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 Subneau33 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.