Tallenna nimellä

Huomenia, taas olisi kysyttävää.

Yritän tallentaa taulukkoa nimellä makron avulla ja siihen täytyisi muodostua tallennusnimi soluista B2 C2.

Tässä nykyinen koodi
Sub Tallenna_nimella()
Fname = Application.GetSaveAsFilename
If (Fname False) Then
On Error Resume Next
ActiveWorkbook.SaveAs Filename:=Fname
End If
End Sub

mikä kyllä toimii, mutta nimen joutuu syöttämään itse.

Olen kokeillut laittaa tuohon Filenamen tilalle kaikkea mahdollista, määritellyt muuttujiksi solut B2 ja C2 ja Filenameksi cellsB2 & cellsC2 & "xls" mutta ei tahdo toimia. Olisiko teillä tähän ratkaisua?

Jos tuon saisi onnistumaan jotenkin, voiko myös tallennuksen suorittaa siten, että tallennetaan vain aktiivisen taulukon työkirjasta?
Taulukoita on työkirjassa 3.
4893
Äänestä

Muut lukivat myös

Vastaukset 4

Vanhimmat

Korvaa tuo Fname = Applic... rivillä:

Fname = Range("B2") & Range("C2") & ".xls"

Tuo toimii, kunhan aktiivinen taulukko on laskentataulukko, jossa nuo tiedostonimen sisältävät solut ovat.

Jos B2 ja C2 pitää hakea tietystä taulukosta ("Taul1"), niin sitten esim. muotoon:

Fname = Worksheets("Taul1").Range("B2") & Worksheets("Taul1").Range("C2") & ".xls"

Toinen asia on sitten se, muodostuuko noista kahdesta solusta kelvollinen tiedostonimi. Onko esimerkiksi toisessa hakemistopolku, vai yhdistetäänkö noista pelkästään työkirjan nimi, jolloin se talletetaan nykyiseen hakemistoon?

Jos noista soluista ei muodostu kelvollista nimeä tiedostolle, saattaa mahdollinen virhe tallennustilanteessa jäädä huomioimatta, koska koodissasi on "OnError Resume Next" -rivi.

- Mika

Äänestä
  • Onnistui, käytin tuota jäljempänä tekemääsi kaavaa. Hetken piti miettiä mikä vikana, B2 solun tekstissä oli : (kaksoispiste) perässä ja valitti joka kerta tallennettaessa jotakin. Nyt tallentaa automaattisesti omiin tiedostoihin.

    Poistin tuon rivin OnError Resume Next koska tosiaan virheen sattuessa tiimalasi näkyi hetken eikä tapahtunut mitään sen kummempaa.
    Mitään en laittanut tilalle, mutta ei ainakaan valittanut siitä.

    Kiitti vielä :o)

    Äänestä

  • Justiina35 kirjoitti:

    Onnistui, käytin tuota jäljempänä tekemääsi kaavaa. Hetken piti miettiä mikä vikana, B2 solun tekstissä oli : (kaksoispiste) perässä ja valitti joka kerta tallennettaessa jotakin. Nyt tallentaa automaattisesti omiin tiedostoihin.

    Poistin tuon rivin OnError Resume Next koska tosiaan virheen sattuessa tiimalasi näkyi hetken eikä tapahtunut mitään sen kummempaa.
    Mitään en laittanut tilalle, mutta ei ainakaan valittanut siitä.

    Kiitti vielä :o)

    OnError -rivin poistaminen ei haittaa niin kauan, kuin ei tapahdu virhettä. Jos se kuitenkin jossain vaiheessa tapahtuu, nii silloin ohjelman suoritus keskeytyy.

    "OnError Resume Next" aiheuttaa sen, että virheen jälkeen suoritus jatkuu virheen aiheuttanutta riviä seuraavalta riviltä, ihan kuin virhettä ei olisi tapahtunutkaan. Siksi virhe voi jäädä huomaamatta. Paremman tuosta saisi seuraavalla pikku lisäyksellä:


    Sub Tallenna_nimella()
    Fname = Worksheets("Taul1").Range("B2") & Worksheets("Taul1").Range("C2") & ".xls"
    On Error GoTo Virhe
    ActiveWorkbook.SaveAs FileName:=Fname
    GoTo Loppu

    Virhe:
    MsgBox ("Tallennus ei onnistunut")

    Loppu:
    End Sub


    Näin itse ohjelman suoritus ei katkea virheeseen, mutta yksinkertainen virheilmoitus kuitenkin näytetään.

    Poistin tuosta myös "If (Fname False) Then" ja "End If" -rivit. Ne ovat käytännössä turhia, nyt kun tiedoston nimeä ei enää anneta valintaikkunassa.

    - Mika

    Äänestä

  • M.L. kirjoitti:

    OnError -rivin poistaminen ei haittaa niin kauan, kuin ei tapahdu virhettä. Jos se kuitenkin jossain vaiheessa tapahtuu, nii silloin ohjelman suoritus keskeytyy.

    "OnError Resume Next" aiheuttaa sen, että virheen jälkeen suoritus jatkuu virheen aiheuttanutta riviä seuraavalta riviltä, ihan kuin virhettä ei olisi tapahtunutkaan. Siksi virhe voi jäädä huomaamatta. Paremman tuosta saisi seuraavalla pikku lisäyksellä:


    Sub Tallenna_nimella()
    Fname = Worksheets("Taul1").Range("B2") & Worksheets("Taul1").Range("C2") & ".xls"
    On Error GoTo Virhe
    ActiveWorkbook.SaveAs FileName:=Fname
    GoTo Loppu

    Virhe:
    MsgBox ("Tallennus ei onnistunut")

    Loppu:
    End Sub


    Näin itse ohjelman suoritus ei katkea virheeseen, mutta yksinkertainen virheilmoitus kuitenkin näytetään.

    Poistin tuosta myös "If (Fname False) Then" ja "End If" -rivit. Ne ovat käytännössä turhia, nyt kun tiedoston nimeä ei enää anneta valintaikkunassa.

    - Mika

    Kyllähän tämä tästä pikkuhiljaa valmiiksi tulee, kun neuvojat osaavat opastaa hyvin :o)

    Kiitokset vielä!

    Äänestä

Kommentoi aloitusta


Justiina35 kirjoitti:

Huomenia, taas olisi kysyttävää.

Yritän tallentaa taulukkoa nimellä makron avulla ja siihen täytyisi muodostua tallennusnimi soluista B2 C2.

Tässä nykyinen koodi
Sub Tallenna_nimella()
Fname = Application.GetSaveAsFilename
If (Fname False) Then
On Error Resume Next
ActiveWorkbook.SaveAs Filename:=Fname
End If
End Sub

mikä kyllä toimii, mutta nimen joutuu syöttämään itse.

Olen kokeillut laittaa tuohon Filenamen tilalle kaikkea mahdollista, määritellyt muuttujiksi solut B2 ja C2 ja Filenameksi cellsB2 & cellsC2 & "xls" mutta ei tahdo toimia. Olisiko teillä tähän ratkaisua?

Jos tuon saisi onnistumaan jotenkin, voiko myös tallennuksen suorittaa siten, että tallennetaan vain aktiivisen taulukon työkirjasta?
Taulukoita on työkirjassa 3.

Anonyymi
5000

Ilmoita asiaton sisältö

  • Sisältää materiaalia, joka on loukkaavaa, herjaavaa, rasistista, uhkailevaa tai ahdistelevaa.

  • Materiaali sisältää nimiä, yhteystietoja tai muita henkilökohtaisia tietoja. Julkisuuden henkilöistä, julkisissa viroissa toimivista ihmisistä sekä yritysten vastuuhenkilöistä saa keskustella työhön liittyen. Myös yksityiselämään liittyvistä asioista voi keskustella siltä osin, kuin niistä on julkisesti kerrottu.

  • Sisältää lapsille haitallista tai heiltä kiellettyä materiaalia. Seksuaalinen sisältö on sallittua aiheeseen tarkoitetuilla palstoilla, joiden ikäraja on 18 vuotta.

  • Lainvastaista sisältöä voi olla mm. yksityiselämää loukkaavan tiedon levitys, kiihottaminen kansanryhmää vastaan, laiton uhkaaminen, alaikäisiin liittyvä seksuaalinen sisältö/grooming, petokset, identiteettivarkaudet, kunnianloukkaukset ja tekijänoikeusrikkomukset.

  • Sisältö ei liity palstan tai keskusteluketjun aiheeseen.

  • Viesti ei ole suomea tai ruotsia (pl. International Forums), se sisältää mainontaa, se sisältää tekijänoikeuksin suojattua materiaalia, se on massapostitus tai jokin muu syy.

Jaa keskustelu