Moi,
Haluaisin "kutsua" toista sub-funktiota, lasku, ja tehdä muutama laskutoimitus siellä erilaisilla määrätyillä arvoilla, tässä esimerkissä 'p_alue' ja 'p_solu', jossa 'p_alue' on dokumentissa nimetty alue ja 'p_solu' nimetty solu.
Miksei alafunktiossa lasku() voi tehdä uutta rangea lausekkeella laskualue = Range("alue")?
(Lauseke toimii kyllä jos käytetään vain pääfunktiota: laskualue = Range("palue"))
Sub keskiArvo()
Call lasku(p_alue, p_solu)
End Sub
Sub lasku(alue, solu)
Set taulukko = Range("alue")
...jatkuu...
End Sub
Vastauksia toivoen,
-Markus
Haluaisin "kutsua" toista sub-funktiota, lasku, ja tehdä muutama laskutoimitus siellä erilaisilla määrätyillä arvoilla, tässä esimerkissä 'p_alue' ja 'p_solu', jossa 'p_alue' on dokumentissa nimetty alue ja 'p_solu' nimetty solu.
Miksei alafunktiossa lasku() voi tehdä uutta rangea lausekkeella laskualue = Range("alue")?
(Lauseke toimii kyllä jos käytetään vain pääfunktiota: laskualue = Range("palue"))
Sub keskiArvo()
Call lasku(p_alue, p_solu)
End Sub
Sub lasku(alue, solu)
Set taulukko = Range("alue")
...jatkuu...
End Sub
Vastauksia toivoen,
-Markus
Vastaukset 2
Vanhimmat
Yksi syy virheeseen on varmaankin se, että aliohjelman argumentin oletetaan jo olevan range-muotoa. Joten 'Range("alue")' pitäisi olla pelkästään 'alue'.
Alla oleva esimerkki laskee alueen A1:B2 keskiarvon ja kertoo sen C1:ssä olevalla arvolla. Tulos ilmoitetaan MsgBoxilla.
Sub keskiArvo()
Dim p_alue As Range, p_solu As Range
Set p_alue = Range("A1:B2")
Set p_solu = Range("C1")
Call lasku(p_alue, p_solu)
End Sub
Sub lasku(alue As Range, solu As Range)
Dim taulukko As Range
Dim summa As Variant
Dim kpl As Integer
Set taulukko = alue
summa = 0
kpl = 0
For Each cell In taulukko
summa = summa cell.Value
kpl = kpl 1
Next
MsgBox "Solujen keskiarvo: " & (summa / kpl) & " ja keskiarvo kerrottuna " & solu.Value & ":lla = " & (summa / kpl) * solu.Value
End Sub
Kiitti!
Niinhän se onkin valmis range.