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.
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.
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
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
Kyllähän tämä tästä pikkuhiljaa valmiiksi tulee, kun neuvojat osaavat opastaa hyvin :o)
Kiitokset vielä!