Ensimmäinen nolla puuttuu solusta tulostettaessa (makro)

Anonyymi

Moi!

Mulla ko laskukaava (makro) Excelissä. Voitteko kertoa miten muutan koodia, että ohjelma tulostaisi D11-solussa myös ensimmäisenä numerona olevan nollan? Nyt ensimmäinen nolla puuttuu...
-----------------------------------------------------
Sub Sarjanumero_tulostus()


' Tulostetaan haluttu määrä sarjanumeroita
' määriteltyyn soluun
' Ohjelma kysyy sarjanumeron mistä tulostus aloitetaan

Dim Arvo, Loppu As String

Dim Alku As Long
Alku = InputBox("Anna sarjanumero mistä aloitetaan")
Arvo = 1
Loppu = InputBox("TULOSTETTAVIEN SARJANUMEROIDEN MÄÄRÄ")

Range("D11").Value = Alku
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True

Do While Arvo <= (Loppu - 1)
'Range("C5").Value = Alku

Range("D11").Value = Arvo Alku
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
Arvo = Arvo 1
On Error GoTo 0
Loop
MsgBox ("Tulostus valmis"), 64, "Huomautus!"

' toimii

End Sub

35

548

    Vastaukset

    Anonyymi (Kirjaudu / Rekisteröidy)
    5000
    • Anonyymi

      Pyytäisin ystävällisesti asiallisia kommentteja/vastauksia/neuvoja...

    • Anonyymi

      Pitäisi olla function eikä sub. Etunollat saa muuttamalla funktion sisältävän solun muotoilua, jos funktio palauttaa soluun numeerisen arvon.

      Muitakin tapoja on riippuen vähän käyttötarkoituksesta. https://excelchamps.com/blog/leading-zeros/

    • Sarja- ja puhelinnumerot, varaosanumerot yms. millä ei lasketa, pitää määrittää tekstiksi, eikä luvuiksi jo solumäärityksissä.

    • Anonyymi

      Itse en osaa, joten voisitko ystävällisesti kertoa miten muutan ko koodia? Kiitos jo etukäteen...

      • Anonyymi

        Opettele. Kaikkea ei maailmassa saa valmiina.


    • Anonyymi

      Jos se Sub()ista tuleva numero on vaikka solussa B3, piilota se tulostuksessa ja kirjoita viereen tulostukseen apusarake kaavalla =TEKSTI(B3;"000000") olettaen että B3:n luvun pituus on 5 merkkiä. Kuusi nollaa merkkaa siis että eteen laitetaan yksi nolla kyseiseen soluun.

    • Anonyymi

      Laskurin kuuluu olla kokonaisluku, sarjanumeron merkkijono.

      Alkunollat poistuvat kun sarjanumeroa käsitellään lukuna. On otettava ylös sarjanumeron pituus ja lisättävä erikseen mahdolliset alkunollat lukuarvon eteen erikseen.

      Tulostusta ym. ei kannata jakaa moneen paikkaan, vaan vain Do-lauseen sisään. Aloita laskuri nollasta ja lopetusehdoksi <= määrä.

    • Anonyymi

      Alkuperäinen kysyjä kysyy. Eli vieläkään en saa onnistumaan, joten olisiko mahdollista että joku osaaja voisi auttaa ja antaa ehjää koodia...

      Olisin todella kiitollinen.

      • Anonyymi

        Oletetaan, että sarjanumero koostuu vain merkeistä 0...9.

        Sub Sarjanumero_tulostus()

        ' Tulostetaan haluttu määrä sarjanumeroita
        ' määriteltyyn soluun
        ' Ohjelma kysyy sarjanumeron mistä tulostus aloitetaan

            Set solu = Range("D11")
            solu.NumberFormat = "@"

            Dim Alku As String
            Alku = InputBox("Anna sarjanumero mistä aloitetaan")
            pituus = Len(Alku)
            Arvo = Val(Alku)
            lkm = InputBox("TULOSTETTAVIEN SARJANUMEROIDEN MÄÄRÄ")

            For i = 0 To lkm - 1
                solu.Value = Right(String(pituus, "0") & Arvo   i, pituus)
                ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
            Next i

            MsgBox ("Tulostus valmis"), 64, "Huomautus!"

        End Sub


      • Anonyymi

        Solun format =text
        Ja tällä tulostus
        Range("D11").Value = WorksheetFunction.Text(Arvo Alku, "000000000000")


    • Anonyymi

      Hei! Testasin tätä koodia ja heti ohjelmaa ajaessa (ctrl Q) ilmoittaa, että soluja ei löytynyt? Mikä on väärin? Apuja tarvitaan, itsellä ei osaamista/taitoa...

      --------------------------------


      Sub Sarjanumero_tulostus()

      ' Tulostetaan haluttu määrä sarjanumeroita
      ' määriteltyyn soluun
      ' Ohjelma kysyy sarjanumeron mistä tulostus aloitetaan

      Set solu = Range("D11")
      solu.NumberFormat = "@"

      Dim Alku As String
      Alku = InputBox("Anna sarjanumero mistä aloitetaan")
      pituus = Len(Alku)
      Arvo = Val(Alku)
      lkm = InputBox("TULOSTETTAVIEN SARJANUMEROIDEN MÄÄRÄ")

      For i = 0 To lkm - 1
      solu.Value = Right(String(pituus, "0") & Arvo i, pituus)
      ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
      Next i

      MsgBox ("Tulostus valmis"), 64, "Huomautus!"

      End Sub

    • Anonyymi

      Korjausta. Siis tuolla edellisellä koodilla toimii, mutta edelleen tulostettaessa solusta D11 puuttuu numerosarjan alusta kaikki nollat (eli jos olen kirjoittanut 00100, niin tulostaa 100).

      • Anonyymi

        Laitaa syöttäessä heittomerkki (') eteen. Silloin Excel pitää luvun merkkijonona.


      • Anonyymi

        Tällainen toimii, kute kerroin jo aikojasitten.
        Solun format =text
        Ja tällä tulostus
        Range("D11").Value = WorksheetFunction.Text(Arvo Alku, "000000000000")


    • Anonyymi

      Ei onistu jos laittaa esim '000123

    • Anonyymi

      Mikähän tässä vielä on väärin?

      ---------------------------------------

      Sub Sarjanumero_tulostus()


      ' Tulostetaan haluttu määrä sarjanumeroita
      ' määriteltyyn soluun
      ' Ohjelma kysyy sarjanumeron mistä tulostus aloitetaan

      Dim Arvo, Loppu As Integer
      Dim Alku As Long
      Alku = InputBox("Anna sarjanumero mistä aloitetaan")
      Arvo = 1
      Loppu = InputBox("TULOSTETTAVIEN SARJANUMEROIDEN MÄÄRÄ")

      Range("D11").Value = WorksheetFunction.Text(Arvo Alku, "000000000000")

      Do While Arvo <= (Loppu - 1)
      'Range("C5").Value = Alku

      Range("D11").Value = Arvo Alku
      ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
      Arvo = Arvo 1
      On Error GoTo 0
      Loop
      MsgBox ("Tulostus valmis"), 64, "Huomautus!"

      ' toimii

      End Sub

      • Anonyymi

        Käytä Copy-pastea


    • Anonyymi

      Jos etunollat jossain vaiheessa katoaa, niin solu on muuttunut numeeriseen muotoon. Tarkasta siis että tulostus on aina teksimuotoista.

    • Anonyymi

      Tuolla alimmalla koodilla ei tulosta ollenkaan ja ohjelma tuo välillä nollia numerosarjan eteen ja välillä taas ei. Mikähän tuossa on vikana?

      • Anonyymi

        Kuten sanottu tuossa edellä, niin solu on silloin numeerisessa muodossa.


      • Anonyymi
        Anonyymi kirjoitti:

        Kuten sanottu tuossa edellä, niin solu on silloin numeerisessa muodossa.

        Soluun ei kirjoiteta mitään, eikä formatoinnista tarvitse välittää. Makro hoitaa nämä.


      • Anonyymi
        Anonyymi kirjoitti:

        Soluun ei kirjoiteta mitään, eikä formatoinnista tarvitse välittää. Makro hoitaa nämä.

        Molemmista listaksistasi puuttuu rivejä. Käytä copy-pastea.


      • Anonyymi
        Anonyymi kirjoitti:

        Molemmista listaksistasi puuttuu rivejä. Käytä copy-pastea.

        Korjaan. Jälkimmäisestä puuttuu rivi
        solu.NumberFormat = "@"


      • Anonyymi
        Anonyymi kirjoitti:

        Soluun ei kirjoiteta mitään, eikä formatoinnista tarvitse välittää. Makro hoitaa nämä.

        Hoitaa kyllä, jos se on tehty oikein. Makron pitää siis muuttaa solut aina oikeaan muotoon. Kiinnitä huomio siis siihen.


    • Anonyymi

      Ei toimi vieläkään tulostus tällä koodilla, jotain on väärin...
      Pyytää kyllä ensin "Anna sarjanumero" ja sen jälkeen pyytää "Anna tulostettavien sarjanumeroiden määrä" ja sitten tulee heti ilmoituslaatikko, että "Huomautus, tulostus valmis" ja tulostimelle ei kumminkaan mene tulostuskäskyä? Ainakaan ei tulosta mitään.

      --------------------------------------

      Sub Sarjanumero_tulostus()


      ' Tulostetaan haluttu määrä sarjanumeroita
      ' määriteltyyn soluun
      ' Ohjelma kysyy sarjanumeron mistä tulostus aloitetaan

      Dim Arvo, Loppu As Integer
      Dim Alku As Long
      Alku = InputBox("Anna sarjanumero mistä aloitetaan")
      Arvo = 1
      Loppu = InputBox("TULOSTETTAVIEN SARJANUMEROIDEN MÄÄRÄ")

      Set solu = Range("D11")
      solu.NumberFormat = "@"

      Range("D11").Value = WorksheetFunction.Text(Arvo Alku, "0000")

      Do While Arvo <= (Loppu - 1)
      'Range("C5").Value = Alku

      Range("D11").Value = Arvo Alku
      ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
      Arvo = Arvo 1
      On Error GoTo 0
      Loop
      MsgBox ("Tulostus valmis"), 64, "Huomautus!"

      ' toimii

      End Sub

      • Anonyymi

        Onko sulla varmasti oikea ikkuna aktiivisena? Kokeile vaihtaa printoutiin sen worksheetin nimi, jossa solukin on. Activesheettiäkin voi tietty kokeilla.


      • Anonyymi

    • Anonyymi

      En saa onnistumaan =(
      Tarvin lisää apuja (valmista koodia)...

      • Anonyymi

        Mitä olet tekemässä? Tarvitset samaan soluun monta lukua, jos oikein ymmärsin? Peräkkäin? Alekkain?


      • Anonyymi

        Jos Pythoni taipuu, niin siinä voi tehdä esim. näin:

        for i in range(0,13000,777):
            print('{0:0{width}}'.format(i, width=5))

        00000
        00777
        01554
        02331
        03108
        03885
        04662
        05439
        06216
        06993
        07770
        08547
        09324
        10101
        10878
        11655
        12432


      • Anonyymi

        Valmis koodi on annettu.

        Laita tulostusrivi kommentiksi:
        ' ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
        Paina seuraavan rivin kohdalla F9 (vasemmalle tulee punainen pallo)

        Kun ohjelma pysähtyy, mitä on solussa D11?
        Jatka kierros kerrallaan painamalla F5.


      • Anonyymi
        Anonyymi kirjoitti:

        Valmis koodi on annettu.

        Laita tulostusrivi kommentiksi:
        ' ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
        Paina seuraavan rivin kohdalla F9 (vasemmalle tulee punainen pallo)

        Kun ohjelma pysähtyy, mitä on solussa D11?
        Jatka kierros kerrallaan painamalla F5.

        ActiveWindow viittaa ehkä väärään ikkunaan. Mitä MsgBox ActiveWindow.Caption näyttää?


    • Anonyymi

      Pythoni ei valitettavasti taivu... =(

    • ei ole virhetarkastelua lisättynä
      inputboxissa on nyt sallittu vain numerot ja sen virhettä vo käsitellä helpostikini
      Sub Tulosta()
      Dim Alku As Long
      Dim Loppu As Long
      Dim i As Long
      Alku = Application.InputBox("Anna sarjanumero mistä aloitetaan", 1)
      Loppu = Application.InputBox("TULOSTETTAVIEN SARJANUMEROIDEN MÄÄRÄ", 1)
      For i = Alku To Alku Loppu
      Range("D11") = Format(i, "0000")
      Range("D11").NumberFormat = "@"
      ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
      Next
      MsgBox ("Tulostus valmis"), 64, "Huomautus!"
      End Sub

    Ketjusta on poistettu 1 sääntöjenvastaista viestiä.

    Luetuimmat keskustelut

    1. Minkähän takia ns. persuille ei tunnu työ maistuvan?

      Vaikuttavat olevan joutoväkeä syystä tai toisesta  – työttömiä tai työeläkeloisia. Muiden rahoilla pötköttelevää väkeä,
      Maailman menoa
      83
      4463
    2. Olit ihan

      Kiihkona silloin. Sen näki ja lähes tunsi. Ei tainnut olla kaukana et olisit vetänyt lähellesi jos siihen olisi hetki tu
      Ikävä
      24
      3228
    3. Miksiköhän vasemmistossa on niin paljon ns. tapatyöttömiä ja muita köyhiä?

      Tokihan Minja Koskela oli sitä mieltä, että ei terveenkään ihmisen ole pakko tehdä töitä, sitä neuvoa moni vassu noudatt
      Maailman menoa
      39
      2894
    4. Trump huonommassa kunnossa kuin Usasta virallisesti sanotaan?

      "Terveys on vakaa mutta ei normaali".Uskallan melkein sanoa,että Trumpin terveydentilaa kaunistellaan.Myös se että se nu
      Maailman menoa
      117
      2697
    5. Kyllä on Vasemmistoliitosta Koskelan johdolla tullut todellinen ääripuolue

      se on niin tulipunainen kuin olla voi, ja selvästi haluaa jatkuvasti eripuraa, ja repiä kansaa kahtia. Siinä on jo vuod
      Maailman menoa
      17
      2539
    6. Kaipaamasi miehen nimi?

      Ja maakunta tai kaupunki?
      Ikävä
      16
      2530
    7. Oletko keskustellut kaivatustasi muiden

      Kanssa lähiaikoina? Jos, onko keskustelu ollut positiivista tai negatiivista? Vaikuttaako keskustelut mielipiteeseesi ka
      Ikävä
      43
      2487
    8. Suomen veroaste 5 %-yks liian matala

      Palauttamalla kokonaisveroaste 1990-luvun tasolle saadaan hyvinvointivaltion palvelut rahoitettua ilman velan ottoa.
      Maailman menoa
      113
      2285
    9. MTV: Harvinainen haastattelu! Vappu Pimiä kommentoi vihdoinkin uutta TTK-juontajaa

      TTK-juontajaspekuloinnit käyvät edelleen kuumana. Kenet sinä haluaisit uudeksi TTK-juontajaksi? Kommentoi alle! Lue,
      Suomalaiset julkkikset
      14
      2075
    10. Yleveron tuotto siirrettävä S-ryhmälle

      Yleisradio on mukana kansanmurhassa. Tuollaista ei voi tukea verovaroin. S-ryhmä on ainoa selkärankainen iso toimija S
      Maailman menoa
      28
      1727
    Aihe