Soluissa on päivämääriä ja kellonaikoja ( esim. 955536:00:00 ). Muotoiluna on "aika", muodossa TT:MM. Solu siis näyttää ajan muodossa tunnit ja minuutit, eli tässä tapauksessa näkyy 00:00
Ongelma: Tuollaisia soluja on n.700, ja nyt pitäisi saada sellainen toiminto, joka näyttäisi solun sisällön toisessa muodossa silloin, kun kohdistin on päivämäärän ruudussa. eli KOHDISTIMEN (=aktiivinen) ollessa ruudessa "955536:00:00" pitäisi saada näkyviin päivämäärä "01.01.2009".
Onko ohjelmassa jotakin funkiota tms, johon voisi laittaa "=aktiivinen solu"
Ehdotuksia?
Aktiivisolun näyttö
7
577
Vastaukset
- ...
global lastCol as long
global lastRow as Long
global actCol as long
global actRow as Long
global cellfmt as Long
global timefmt as Long
global datefmt as Long
Global oSheet
Global oRange
Global oContr
Global oDatChangeListener
Global oSelChangeListener
Sub SetListeners()
oSelChangeListener = createUnoListener("O1_","com.sun.star.view.XSelectionChangeListener")
oSheet = ThisComponent.Sheets.getByName( "Taulukko1" )
oContr = ThisComponent.CurrentController
oRange = oSheet.getCellRangeByPosition(0,0,0,65535)
timefmt = FindCreateNumberFormatStyle ("TT:MM")
datefmt = FindCreateNumberFormatStyle ("PP.KK.VV")
lastRow = 0
lastCol = 0
cellfmt = 0
oContr.addSelectionChangeListener(oSelChangeListener)
End Sub
Sub RemoveListener
oContr.removeSelectionChangeListener(oSelChangeListener)
End Sub
Sub O1_selectionChanged(aEvent as com.sun.star.lang.EventObject)
oSel = aEvent.Source.Selection
if HasUnoInterfaces(oSel, "com.sun.star.sheet.XCellAddressable") then
oCA = oSel.CellAddress
actCol = lastCol
actRow = lastRow
lastCol = oCA.Column
lastRow = oCA.Row
if cellfmt = timefmt then osheet.getCellbyposition(actcol,actrow).NumberFormat = timefmt
ocel = osheet.getCellbyposition(lastcol,lastrow)
cellfmt=ocel.NumberFormat
if cellfmt = timefmt then
ocel.NumberFormat = datefmt
end if
endif
end sub
Function FindCreateNumberFormatStyle (sFormat As String, Optional doc, Optional locale)
Dim oDocument As Object
Dim aLocale as new com.sun.star.lang.Locale
Dim oFormats As Object
oDocument = IIf(IsMissing(doc), ThisComponent, doc)
oFormats = oDocument.getNumberFormats()
If ( Not IsMissing(locale) ) Then aLocale = locale
formatNum = oFormats.queryKey (sFormat, aLocale, TRUE)
If (formatNum = -1) Then
formatNum = oFormats.addNew(sFormat, aLocale)
If (formatNum = -1) Then formatNum = 0
End If
FindCreateNumberFormatStyle = formatNum
End Function
---------------------------------------------------------
Aluksi täytyy ajaa makro SetListeners ja taulukkoa suljettaessa RemoveListener.
Makrot voi lisätä Työkalut-Mukauta-Tapahtumat- kohtiin Avaa asiakirja ja sulje asiakirja, jolloin ne suoritetaan automaagisesti.- aktiivisolu
Niin, mihin tuo "helppo" juttu laitetaan? Mistä nuo makrot "SetListeners" löytyvät, ovatko niiden nimet suomenielisessä jotkin muita?
Mieluummin käyttäis jotain muuta kuin makroa, mutta kokeilisin tuotakin, jos osaisin? Olihan toi niin hieno! aktiivisolu kirjoitti:
Niin, mihin tuo "helppo" juttu laitetaan? Mistä nuo makrot "SetListeners" löytyvät, ovatko niiden nimet suomenielisessä jotkin muita?
Mieluummin käyttäis jotain muuta kuin makroa, mutta kokeilisin tuotakin, jos osaisin? Olihan toi niin hieno!Ainahan joku keksii jotain ihmeellistä, mutta kyllä minusta tuo mitä vaadit on Calcissa vain makrolla sujuvasti toteutettavissa. Se vaatimushan on tavallaan ehdollinen muotoilu, mutta ehtosi täyttyy tietystä tapahtumasta (hiiri solussa tai kohdistus solussa). Normaali ehdollinen muotoilu perustuu ehtoon, jossa verrataan kahta arvoa ja toiminta ratkeaa sitten vertailun tuloksesta (pienempi kuin nolla, nolla, suurempi kuin nolla) tms.
Käsityönähän tuon saisi tietenkin huomautusputkahdukseen, joka näkyy kun hiiri on solun päällä, jos solulle on määritelty huomautus. Mutta jotta kaikkiin soluihin saisi senhetkisestä arvostaan tulevan huomautuksen, niin kyllähän se käytännössä makroa vaatisi. Eikä tämäkään olisi ihan sitä, mitä pyydät, koska tässä itse soluun jäisi alkuperäinen arvo ja toisin muotoiltu arvo näkyisi samaan aikaan huomautuksena.
Calcin/OpenOfficen ohjeissa on tietoja makroistakin.- aktiivisolu
tuttumies kirjoitti:
Ainahan joku keksii jotain ihmeellistä, mutta kyllä minusta tuo mitä vaadit on Calcissa vain makrolla sujuvasti toteutettavissa. Se vaatimushan on tavallaan ehdollinen muotoilu, mutta ehtosi täyttyy tietystä tapahtumasta (hiiri solussa tai kohdistus solussa). Normaali ehdollinen muotoilu perustuu ehtoon, jossa verrataan kahta arvoa ja toiminta ratkeaa sitten vertailun tuloksesta (pienempi kuin nolla, nolla, suurempi kuin nolla) tms.
Käsityönähän tuon saisi tietenkin huomautusputkahdukseen, joka näkyy kun hiiri on solun päällä, jos solulle on määritelty huomautus. Mutta jotta kaikkiin soluihin saisi senhetkisestä arvostaan tulevan huomautuksen, niin kyllähän se käytännössä makroa vaatisi. Eikä tämäkään olisi ihan sitä, mitä pyydät, koska tässä itse soluun jäisi alkuperäinen arvo ja toisin muotoiltu arvo näkyisi samaan aikaan huomautuksena.
Calcin/OpenOfficen ohjeissa on tietoja makroistakin.Taulukossa on käytössä ehdollinen muotoilu solujen paikallistamisessa. Se onnistui helposti, kun tarvitsi verrata vain yhtä arvoa muihin soluihin. Nyt tuossa ei ole vertailupohjaa, vaan pitäisi näyttää vain käyttäjän valitseman solun tiedot. Ehkä OO:n kehittäjät laittavat vielä funtion aktiivisen solun sisällönnäyttöön?
Huomautukset toimisivat varmaan, mutta tähän tulisi 370 huomautusta...käsin laitettavaksi, joten ei vastaa hyötyä.
Muuten, toinenkin ongelmaa on MUOTOILUSSA. Soluihin ei nimittäin saa REUNOJA, sillä jokin muotoilu tms. estää sen. Tyhjään taulukkoon reunat onnistuvat, mutta ei valmiiseen taulukkoon! Siis, estääkö jokin muotoiluasetus tms.solujen reunustamisen? Kokeilin useita vaihtoehtoja, mutta niissä oli aina jokin virhe. - ...
aktiivisolu kirjoitti:
Niin, mihin tuo "helppo" juttu laitetaan? Mistä nuo makrot "SetListeners" löytyvät, ovatko niiden nimet suomenielisessä jotkin muita?
Mieluummin käyttäis jotain muuta kuin makroa, mutta kokeilisin tuotakin, jos osaisin? Olihan toi niin hieno!Työkalut-Makrot-Makrojen hallinta-Oo Basic (huoh)
Tiedoston nimi-Uusi-
Oo-basic ikkunaan liitetään tuo koodi.
Rivillä oSheet = ThisComponent.Sheets.getByName( "Taulukko1" ) arkin nimi pitää muuttaa tarvittaessa.
Siirretään kursori Sub SetListeners()-rivin jälkeiseen paikkaan ja painetaan F5. Homman pitäisi nyt toimia.
Noin äkkipäätä katsottuna numerosarjasta 955536:00:00 Calc tulkitsee :00:00 osan minuuteiksi ja sekunneiksi? Voin olla väärässäkin, eikä se välttämättä aiheutaisi virhettä, jos niillä ei arvoilla lasketa, siis ne vain syötetään ja muotoillaan.
- aktiivisolu
Kiitos havainnosta!
Jostain syystä tuolla käyttämälläni tavalla laskut menevät oikein. Vaikuttanee se, ettei aika ole "puhdasta" aikalaskua, vaan tahdistettu kalenteriin. Nyt päiväämäärät eivät sekoita eri päivien laskuja. Kokeilin tehdä muutoksia tuohon antamaani lukuun, mutta siinä ohjelma tulkitsi tuntimäärät olevan kellonaikoja, jolloin koko lasku meni metsään.
Kuitenkin muotoilu näyttää pitävän huolen, että minuutit ovat minuutteja...ainakin toistaiseksi.
Kiitos havainnosta!
Ketjusta on poistettu 0 sääntöjenvastaista viestiä.
Luetuimmat keskustelut
Rasismia kaikkialla näkevät ovat Suomen tyhmimpiä ihmisiä
ja monillahan kuluu myös mielialalääkkeitä, eli päässä on ongelmia. Mutta he eivät tajua kuinka paljon ja ihan todellis4297401Ei kahta sanaa etteikö Petteri Orpo hyväksy rasismia
Koska jatkaa hallituksessa rasistisen perussuomalaisiksi itseään kutsuvan puolueen kanssa. Se on Petteri Orpon arvomaai926136Mitkäs nuorisoporukat ovat toisia nuoria ryöstelleet (selvää rassismia)
No poliisi kertoo, että maahanmuuttajataustaisia ovat, ja isot porukat sillä yhden suomalaisen uhrin kimpussa on ollut j2075622Nasima löi Jussille luun kurkkuun
Nasima kertoi ettei Jussi sovi puhemieheksi, koska sallii rasismin. Mihin toimiin perussuomalaiset ryhtyvät? Kuka nouse1194581Pitkän linjan yritysjohtaja: Suomen tapahtumat eivät ole Aasian kärkiuutinen
Viimeaikaista kohua on käytetty sisäpoliittisena lyömäaseena, Thomas Zilliacus sanoo. – Koska asiaa kuitenkin kommentoi894349Razmyar on säälittävä - puhemiehellä ei ole mitään syytä ottaa kantaa tähän "silmäkohuun"
jonka toimittajat sai aikaan. Asia ei kuulu puhemiehelle millään lailla. Razmyar haluaa taas vaan huomiota. Mutta jos r294289Juuri Suomen valtamedian toimittajat teki "silmävääntelystä" sen kohun
ja ilmeisesti ottivat yhteyttä myös ulkomaisiin medioihin, että katsokaas tätä. Mutta Japanin medioissa on asiaan suhta1163580Demarit ovat oikeasti törppöjä eli heikkoälyisiä
ja todistavat sitä päivittäin täällä lapsellisilla jutuillaan. Kauheasti on hehkuttaneet kuinka demarien kannatus vaan673578HS 12/25 kysely: persut romahti, demarit raketoi
Kyyti on kylmää persuleirissä, saattaa vetää siellä silmätkin viirulleen. Sen sijaan SDP:n puoluetoimistolla voidaan pok833514Perussuomalaiset eivät harrasta maalittamista kuten vasemmisto
Huomaa tässä keinotekoisessa "rasismi"-kohussakin kuinka vasemmistolaiset maalittavat Perussuomalaisia. Me emme vastaava233488