Nyt kaivattaisiin apua loopin teossa.
Yritän rakentaa makroa, joka tekee samat muutokset excelissä eri välilehdille. Välilehtien määrä saattaa vaihdella.
Voiko Do Loopille jotenkin kertoa, että kun komento ActiveSheet.Next.Select ei enää löydä välilehteä se osaisi siirtyä eteenpäin?
Yritin tällästä, mutta ei toimi..
Do Until ActiveSheet.Value = ""
Toinen kyssäri olisi, että onko olemassa komentoa jolla pääsee siirtymään excelin ensimmäiseen taulukkoon niin ettei tarvitse tietää taulukon nimeä?
Etukäteen kiittäen =)
Excel VBA Do Loop
7
743
Vastaukset
- tätä
Sub Macro1()
Dim maara, i As Integer
maara = Sheets.Count
For i = 1 To maara
Next
End Subtoi sheet.count, sillä se laskee mukaan myös kaaviosivut- parempi olisi käyttää WorkSheets.Count
vaihtoehtoisesti
Sub a()
Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
ws.Range("A1") = 100
Next
End Sub
looppi ongelma
Sub b()
On Error GoTo virhe
Sheets(1).Select
Do Until ActiveSheet.Name = ""
ActiveSheet.Range("B1") = 100
ActiveSheet.Next.Select
Loop
virhe:
End Sub
ja kakkoskyssäriin
kuten edellä jo mainitsin kandee olla tarkkana Sheet/WorkSheet kanssa. Voit testata asian tekemällä kaavion ja siirtämällä sen ensimmäiseksi taulukonvalitsimessa ja sitten muutat kaavion vaikka viimeiseksi ja testaa uudelleen...
Sub ValitseEkataulukkoTaiKaavio()
' valitsee kaavion tai taulukon eli aina ensimmäisen
Sheets(1).Select
'valitsee ekan taulukon voi olla toinen, kolmas jne
Worksheets(1).Select
'valitsee ekan kaavion voi olla toinen, kolmas jne
Charts(1).Select
End Sub- AMHeikki
kunde kirjoitti:
toi sheet.count, sillä se laskee mukaan myös kaaviosivut- parempi olisi käyttää WorkSheets.Count
vaihtoehtoisesti
Sub a()
Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
ws.Range("A1") = 100
Next
End Sub
looppi ongelma
Sub b()
On Error GoTo virhe
Sheets(1).Select
Do Until ActiveSheet.Name = ""
ActiveSheet.Range("B1") = 100
ActiveSheet.Next.Select
Loop
virhe:
End Sub
ja kakkoskyssäriin
kuten edellä jo mainitsin kandee olla tarkkana Sheet/WorkSheet kanssa. Voit testata asian tekemällä kaavion ja siirtämällä sen ensimmäiseksi taulukonvalitsimessa ja sitten muutat kaavion vaikka viimeiseksi ja testaa uudelleen...
Sub ValitseEkataulukkoTaiKaavio()
' valitsee kaavion tai taulukon eli aina ensimmäisen
Sheets(1).Select
'valitsee ekan taulukon voi olla toinen, kolmas jne
Worksheets(1).Select
'valitsee ekan kaavion voi olla toinen, kolmas jne
Charts(1).Select
End SubVastaan tuli ongelma, että toiminnot täytyykin tehdä yhden kerran vähemmän mitä välilehtiä on, koska viimeinen komento on ActiveSheet.Next.Select ja tämän voi toteuttaa viimeisen kerran toiseksi viimeisessä taulukossa.
Sain kuitenkin teidän avustuksella näin toimimaan:
Sub Muutokset2()
Dim maara, i As Integer
maara = Worksheets.Count - 1
Worksheets(1).Select
For i = 1 To maara
' Tässä komennot mitä välilehdillä tehdään
ActiveSheet.Next.Select
Next
' Tässä uudestaan komennot välilehdille, jotta makro tekee ne viimeisellekin välilehdelle
Worksheets(1).Select
End Sub
En saanut Kunden versioon laitettua tuota -1:stä mitenkään, olisiko se ollut mahdollista? AMHeikki kirjoitti:
Vastaan tuli ongelma, että toiminnot täytyykin tehdä yhden kerran vähemmän mitä välilehtiä on, koska viimeinen komento on ActiveSheet.Next.Select ja tämän voi toteuttaa viimeisen kerran toiseksi viimeisessä taulukossa.
Sain kuitenkin teidän avustuksella näin toimimaan:
Sub Muutokset2()
Dim maara, i As Integer
maara = Worksheets.Count - 1
Worksheets(1).Select
For i = 1 To maara
' Tässä komennot mitä välilehdillä tehdään
ActiveSheet.Next.Select
Next
' Tässä uudestaan komennot välilehdille, jotta makro tekee ne viimeisellekin välilehdelle
Worksheets(1).Select
End Sub
En saanut Kunden versioon laitettua tuota -1:stä mitenkään, olisiko se ollut mahdollista?en nyt ymmrärrä kysymystä. Jos haluat kaikkiin taulukoihin niin allaoleva tekee sen. Toi sun ActiveSheet.Next.Select jutska on ihan hanurista...
Sub a()
Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
ws.Range("A1") = 100
Next
End Sub
jos taas haluata muutokset kaikkiin muihin kuin johonkin tiettyyn tauluun niin allaolevilla onnistuu
ekassa nimellä muihin ja nimettyy taulukkoon ja jälkimmäisessä numeroinnillamuihin ja indeksin mukaan, jos ei tiedetä nimeä
Sub b()
Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
'kaikki muut paitsi yhteenveto taulukko
If Not ws.Name = "yhteenveto" Then
ws.Range("A1") = 100
'yhteenveto taulukko
Else
ws.Range("B1") = 100
End If
Next
End Sub
Sub c()
Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
'kaikki muut paitsi viimeinen taulukko- esim. kun ei tiedetä nimeä
If Not ws.Name = Worksheets(Worksheets.Count).Name Then
ws.Range("A1") = 100
'viimeinen taulukko
Else
ws.Range("B1") = 100
End If
Next
End Sub- AMHeikki
kunde kirjoitti:
en nyt ymmrärrä kysymystä. Jos haluat kaikkiin taulukoihin niin allaoleva tekee sen. Toi sun ActiveSheet.Next.Select jutska on ihan hanurista...
Sub a()
Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
ws.Range("A1") = 100
Next
End Sub
jos taas haluata muutokset kaikkiin muihin kuin johonkin tiettyyn tauluun niin allaolevilla onnistuu
ekassa nimellä muihin ja nimettyy taulukkoon ja jälkimmäisessä numeroinnillamuihin ja indeksin mukaan, jos ei tiedetä nimeä
Sub b()
Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
'kaikki muut paitsi yhteenveto taulukko
If Not ws.Name = "yhteenveto" Then
ws.Range("A1") = 100
'yhteenveto taulukko
Else
ws.Range("B1") = 100
End If
Next
End Sub
Sub c()
Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
'kaikki muut paitsi viimeinen taulukko- esim. kun ei tiedetä nimeä
If Not ws.Name = Worksheets(Worksheets.Count).Name Then
ws.Range("A1") = 100
'viimeinen taulukko
Else
ws.Range("B1") = 100
End If
Next
End SubHeh... yritän päästä tuosta "hanurista" eroon. ;-)
Mulla ei sitten oikein toimi (johtunee osaamisestani, aloittelija meinaan), mutta....
Kun laitan:
Sub Muutokset3()
Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
ws.Range("A1") = 100
' tähän väliin muutokset, jotka haluan välilehdille tehdä
Next
End Sub
Niin makro tekee ensimmäiselle välilehdelle muutokset niin monta kertaa kuin taulukossa on välilehtiä, eikä muutoksia jokaiselle välilehdelle. Siksi yritin tunkea sitä komentoa ActiveSheet.Next.Select väliin. Olisiko mitään vinkkiä mitä teen yhä väärin, kun en saa toimimaan tällä keinolla? AMHeikki kirjoitti:
Heh... yritän päästä tuosta "hanurista" eroon. ;-)
Mulla ei sitten oikein toimi (johtunee osaamisestani, aloittelija meinaan), mutta....
Kun laitan:
Sub Muutokset3()
Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
ws.Range("A1") = 100
' tähän väliin muutokset, jotka haluan välilehdille tehdä
Next
End Sub
Niin makro tekee ensimmäiselle välilehdelle muutokset niin monta kertaa kuin taulukossa on välilehtiä, eikä muutoksia jokaiselle välilehdelle. Siksi yritin tunkea sitä komentoa ActiveSheet.Next.Select väliin. Olisiko mitään vinkkiä mitä teen yhä väärin, kun en saa toimimaan tällä keinolla?Sub Muutokset3()
Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
ws.Range("A1") = 100
' tähän väliin muutokset, jotka haluan välilehdille tehdä
Next
End Sub
koodissa olen viitannut aktiiviseen taulukkoon ws. yhtähyvin sen voi tehdä näin
ws.activate
Range("A1") = 100
tosin aktivointi laukaisee muita tapahtumia ja laskentoja joten toi eka tapa on fiksumpi
sulla on aktiivisena taulukko1 ja et ole koodissa siten mitenkään muuttanut eli loopissa muutokset kohdistuvat vain taulukko 1:seen
laita range objektiin eteen viittaus aktiiviseen taulukkoon ws. tai käytä tota jälkimmäistä tapaa mikä lienee aloittelijalle helpompi ymmärtää...
keep excelling
@Kunde- AMHeikki
kunde kirjoitti:
Sub Muutokset3()
Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
ws.Range("A1") = 100
' tähän väliin muutokset, jotka haluan välilehdille tehdä
Next
End Sub
koodissa olen viitannut aktiiviseen taulukkoon ws. yhtähyvin sen voi tehdä näin
ws.activate
Range("A1") = 100
tosin aktivointi laukaisee muita tapahtumia ja laskentoja joten toi eka tapa on fiksumpi
sulla on aktiivisena taulukko1 ja et ole koodissa siten mitenkään muuttanut eli loopissa muutokset kohdistuvat vain taulukko 1:seen
laita range objektiin eteen viittaus aktiiviseen taulukkoon ws. tai käytä tota jälkimmäistä tapaa mikä lienee aloittelijalle helpompi ymmärtää...
keep excelling
@KundeVau.... ja sehän toimii.
Olit oikeassa toi jälkimmäinen versio oli helpompi keltanokalle. =)
Onnistumisen ilo on mukavaa. Kiitos oikein paljon, että jaksoit minun kanssa vääntää tätä. =)
Ketjusta on poistettu 0 sääntöjenvastaista viestiä.
Luetuimmat keskustelut
Mikä on kaivattusi etunimi?
Otsikossa siis on kysymys eriteltynä. Vain oikeat vastaukset hyväksytään.1613318En kestä katsoa
Sitä miten sinusta on muut kiinnostuneita. Olen kateellinen. Siksi pitäisi lähteä pois971745- 1431687
Peräti 95 % persujen kannattajista rasisteja
Kertoo EVA:n teettämä kysely. Pakollista yhdenvertaisuuskoulutusta tarvitsee siis paljon laajempi joukko kuin pelkästää3921556Kun viimeksi kohtasitte/näitte
Mitä olitte tekemässä? Millainen ympäristö oli? Löydetään toisemme...1251551Olet kyllä vaarallisen himokas
Luova, kaunis, määrätietoinen, pervo, mielenkiintoinen, kovanaama, naisellinen ja erikoinen.991375Anna vielä vähän vihreää valoa
Teen sitten siirtoni, nainen. Tiedän, että olet jo varovaisesti yrittänyt lähestyä, mutta siitä on jo aikaa. Jos tunnet171103- 621029
- 218940
On minulla suunitelma
Siitä ei vain tiedä kukaan muu kuin tällä hetkellä minä. Suunnitelma ja varasuunnitelma. Sinun takiasi nainen. Vain s48922