Aktiivisolun näyttö

aktiivisolu

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?

7

567

    Vastaukset

    Anonyymi (Kirjaudu / Rekisteröidy)
    5000
    • ...

      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

    1. Sanna Marin teki sen, mihin muut eivät pystyneet - sote kerralla maaliin

      Yli 15 vuotta Suomessa vatvottu sote-uudistus meni lopulta läpi Sanna Marinin hallituksen aikana. Edeltävät hallitukset
      Maailman menoa
      84
      10521
    2. Pikkupersu osoitti olevansa hieman yksinkertainen

      "Heikosti älykkyystesteissä pärjänneistä lapsista tulee muita todennäköisemmin ennakkoluuloisia ja konservatiivisia", uu
      Maailman menoa
      141
      8794
    3. Marinin hallitus hyväksyi soten (105-77) vuonna 2021

      vastaan äänesti Kok, persut, KD, Liike Nyt. Nyt on sitten käynyt niin kuin on käynyt. Pääkirjoitus: Sanna Marin jätti
      Maailman menoa
      90
      6077
    4. Jos on heikkolahjainen ja laiska koulupudokas, niin silloin äänestää vasemmistopuolueita

      näin tämä on käytännössä aina mennyt. Jos ei älyä ole paljon suotu, niin ei silloin inssiksi opiskella, vaan päädytään
      Maailman menoa
      60
      4298
    5. Enää viisi yötä Sannan kirjaan

      Ihan täpinöissään tässä odotellaan. Vaikea pysytellä aloillaan, kun koko ajan tekisi mieli jo kirjakauppaan rynnätä, mut
      Maailman menoa
      53
      4237
    6. Kannattaako suomalaisen duunarin enää äänestää vasemmistopuolueita

      sillä eivät ne tunnu kovasti ajavan suomi-duunarin etuja. Jos katsotaan Vasemmistoliittoa, niin sehän on ihan feministi
      Maailman menoa
      80
      4080
    7. Sanna-kulttilaiset hehkuttaa edelleen Marinia, vaikka esim. Sote oli susi jo syntyessään

      mutta kulttilaiset eivät ole järjen jättiläisiä, ja sanoihin Lasse Lehtinenkin, että Suomessa on pohjoismaiden tyhmimmät
      Maailman menoa
      50
      3729
    8. Professori: Maahanmuuttajien rikollisuutta hyssytellään - hävytöntä

      Kriminologi Jukka Savolaisen mukaan ikä ja vaikeat olosuhteet eivät riitä selitykseksi. – Tutkitun tiedon valossa sanoi
      Maailman menoa
      67
      3199
    9. Marin teki sen mihin muut eivät pystyneet, vei susi-Soten maaliin

      ja sitten hävittyjen vaalien jälkeen lähtikin vastuuta pakoon...... "Professori: sote-uudistus on täysi susi. Sosiaali
      Maailman menoa
      7
      3117
    10. IL - 100 000 potentiaalista sotilasta pakeni Ukrainasta!

      "Ukrainasta nuorten miesten joukkopako Liki 100 000 asevelvollisuusikäistä miestä on poistunut Ukrainasta parin viime k
      Maailman menoa
      68
      2969
    Aihe