praegune kellaaeg 20.06.2025 00:28:41
|
Hinnavaatlus
:: Foorum
:: Uudised
:: Ärifoorumid
:: HV F1 ennustusvõistlus
:: Pangalink
:: Telekavad
:: HV toote otsing
|
|
autor |
|
koto
HV vaatleja
liitunud: 28.09.2006
|
10.05.2008 00:17:05
Vba-s veateade. |
|
|
Püüan siin mingitmoodi VBA-d õppida aga isegi raamatus rida ajades tulevad vead ette!
Kas oskab keegi aidata!
Käivitades makro "Prindi" (veel ei prindi siiski ) ja valides suvalise kuu makro käivitumisel viskab ette errori:
Run-time error5:
Invalid procedure call or argument
Siin siis ka näidis harjutus ja wordi dok, milles õpetus.
www.zone.ee/omnibuster
|
|
tagasi üles |
|
 |
infidel
HV kasutaja

liitunud: 31.01.2004
|
10.05.2008 13:17:59
|
|
|
Debugimine on see asi, mis tuleb ära õppida. VBA on selles mõttes üpriski kasutajasõbralik.
Kui programmi käivitad, siis lülita sisse "locals" aken View menüü alt, et saaksid jälgida muutujate hetkeväärtusi.
Vigade otsimisel on kasulik ka käivitada programm sammukaupa kasutades klahvi F8.
Hetkel on viga selles, et funktsioonile KuvaVaade antakse parameetrina MyVaade, mis on tühi. KuvaVaade võtab parameetri ja üritab näidata, aga ei saa sellega hakkama, sest pole midagi näidata.
Kui aga klõpsata mõnel raadionupul, selgub, et programm siiski toimib. Järelikult on probleemi põhjuseks raadionupustiku vaikeväärtuse puudumine.
Lahendused:
1. Anda ühele raadionupule vaikimisi valitud staatus. Siis pole kasutajal enam võimalik tekitada olukorda, kus ükski nupp pole valitud.
Näiteks kirjutad Userform_initialize alla juurde sellise rea optKõik.Value = True
2. Teha "Prindi" nupu alla piirang, mis ei lase tegutseda, kui ükski nupp pole valitud. Sarnane piirang on alguskuupäeva tarbeks juba olemas, tuleb vaid natuke kombineerida.
|
|
Kommentaarid: 36 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
35 |
|
tagasi üles |
|
 |
koto
HV vaatleja
liitunud: 28.09.2006
|
10.05.2008 22:18:57
|
|
|
Tänud infidel.
Makro töötab jah seni kuni on vaadet vaja printida ilma algkuud valimata.
Ma näen ka, et myVaade Value on empty. My Vaade peaks sisaldama ühte kolmest valitud vaatest+valitud kuu aga raamatust ma ei saanud aru millal ja kuidas valitud vaade +valitud kuu seotakse vaateks myVaade( KuvaVaade parameetriks ), mis peaks vist kajastuma protseduuris KuvaVaade.
PS!
Lahendused 1 ja 2 tulevad raamatus hiljem.
Ja minu inglise keele oskus häbeneb seitsmekümnendate aastate klassinurgas.Kahjuks.
Panen ka põhiprotsed-d.
Private Sub btnPrindi_Click()
Dim myvalik As Control
Dim myVaade
Dim myKuu
If ChkKuu.Value = True Then
myKuu = KuuAlgus(TxtKuu.Value)
If myKuu = Empty Then
MsgBox ("Vigane kuupäev, tipi uus")
TxtKuu.SetFocus
TxtKuu.SelStart = 0
TxtKuu.SelLength = 1000
Exit Sub
End If
Else
myKuu = "viga"
End If
For Each myvalik In grpRead.Controls
If myvalik.Value = True Then
myVaade = myvalik.Caption
End If
Next myvalik
KuvaVaade myVaade !!!!!
VarjaKuud myKuu
MsgBox "Prindin"
End Sub
Sub KuvaVaade(Nimi)
ActiveWorkbook.CustomViews(Nimi).Show Siin vist on vaja siduda üks kolmest valitud vaatest+valitud alguskuu!!!!!
End Sub
'KuvaVaade (Kokkuvõte)
'ActiveWorkbook.CustomViews("Kokkuvõte").Show
'KuvaVaade (Detail)
'ActiveWorkbook.CustomViews("Detail").Show
'KuvaVaade (Kõik)
'ActiveWorkbook.CustomViews("Kõik").Show
|
|
tagasi üles |
|
 |
infidel
HV kasutaja

liitunud: 31.01.2004
|
11.05.2008 10:04:51
|
|
|
For Each myvalik In grpRead.Controls '- Võetakse ette raadionupud - tsükkel algab
If myvalik.Value = True Then '- Kui raadionupp on valitud, siis
myVaade = myvalik.Caption '- saab MyVaade väärtuseks raadionupu kõrval olev tekst
End If '- Tingimusliku osa lõpp
Next myvalik '- Tsükkel liigub järgmise raadionupu kallale
|
Vat siin see toimubki. Järjest vaadatakse raadionupud läbi, et näha kas mõni on ka märgitud. Kui on, siis antakse MyVaade väärtuseks raadionupu kõrval olev tekstilõik. Aga kui ükski valitud ei ole, siis ei anta ka väärtust.
KuvaVaade sisaldab ainult üht rida ja mina isiklikult jätaks ta üldse ära. Selle asemel kirjutaks nii:
For Each myvalik In grpRead.Controls '- Võetakse ette raadionupud - tsükkel algab
If myvalik.Value = True Then '- Kui raadionupp on valitud, siis
ActiveWorkbook.CustomViews(myValik.Caption).Show '- avatakse vaade, mis on raadionupuga seotud
End If '- Tingimusliku osa lõpp
Next myvalik '- Tsükkel liigub järgmise raadionupu kallale
|
See võimaldab loobuda ka muutujast MyVaade, mida pole enam lihtsalt vaja.
Valitud kuu võetakse arvesse siis, kui vaade on juba avatud. VarjaKuud peidab pildilt need andmed, mille kuupäev on valitust varasem. Kõik see tegevus on peidus "Prindi" nupu taga.
Kerge selgitus, mis on mis:
Private Sub btnPrindi_Click() 'protseduuri algus
Dim myvalik As Control 'defineeritakse muutujad, myValik on objekt, ülejäänud on lihtsalt olemas
Dim myVaade
Dim myKuu
If ChkKuu.Value = True Then 'Kui alguskuu juures on kastis linnuke, siis
myKuu = KuuAlgus(TxtKuu.Value) 'MyKuu saab väärtuseks tekstikastis oleva kuu järgi arvutatud kuu esimese päeva
If myKuu = Empty Then 'Kui MyKuu ei oma väärtust,
MsgBox ("Vigane kuupäev, tipi uus") 'siis teavitab sellest dialoogiaken
TxtKuu.SetFocus 'kursor viiakse tekstikasti
TxtKuu.SelStart = 0 'kasti sisu tehakse aktiivseks
TxtKuu.SelLength = 1000
Exit Sub 'ja suletakse protseduur
End If 'tingimuste lõpp
Else 'vastasel juhul, st kui linnukest ei ole
myKuu = "viga" 'saab MyKuu väärtuseks "viga"
End If 'tingimuste lõpp
For Each myvalik In grpRead.Controls 'Võetakse ette raadionupud - tsükkel algab
If myvalik.Value = True Then 'Kui raadionupp on valitud, siis
myVaade = myvalik.Caption 'saab MyVaade väärtuseks raadionupu kõrval olev tekst
End If 'Tingimusliku osa lõpp
Next myvalik 'Tsükkel liigub järgmise raadionupu kallale
KuvaVaade myVaade 'MyVaade avatakse
VarjaKuud myKuu 'funktsioonile VarjaKuud antakse alguskuupäev, millest alates varjata
MsgBox "Prindin" 'avatakse aken "Prindin"
End Sub 'lõpp
|
|
|
Kommentaarid: 36 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
35 |
|
tagasi üles |
|
 |
koto
HV vaatleja
liitunud: 28.09.2006
|
12.05.2008 00:11:51
|
|
|
ActiveWorkbook.CustomViews(myValik.Caption).Show !
Kustutasin protseduuri KuvaVaade.
View/CustomViews all on mul salvestatud 3 erinevat vaadet, mis ei sisalda ju muutuva kuu vaadet ja seega annab sama errori:Invalid procedure call or argument!
MyVaade sisaldab valikust lähtuvalt väärtust kas "Alguskuu" või ühte valitud vaadet 3-st, kuid oleks vaja et sisaldaks "Alguskuu"+üks valitud vaade samal ajal!
|
|
tagasi üles |
|
 |
infidel
HV kasutaja

liitunud: 31.01.2004
|
12.05.2008 09:28:35
|
|
|
Tunnistan, et jätsin ühe asja kahe silma vahele. MyVaade peaks omama väärtust, mis on üks kolmest võimalikust vaatest. Vastavalt programmi ülesehitusele, sisaldab ta ka teinekord teksti "Alguskuu". Justnimelt teksti, mitte sellele vastava välja väärtust. Põhjus peitub selles samas eelnevalt mainitud tsüklis, mille parandatus selgitus on selline:
For Each myvalik In grpRead.Controls '- Võetakse ette KÕIK objektid ekraanivormis - tsükkel algab
If myvalik.Value = True Then '- Kui objekti väärtuseks on määratud "True",
myVaade = myvalik.Caption '- saab MyVaade väärtuseks objekti kõrval olev tekst
End If '- Tingimusliku osa lõpp
Next myvalik '- Tsükkel liigub järgmise objekti kallale
|
Objekte, mille väärtuseks sobib loogiline jaatus, on teisigi. Antud juhul on samas ekraanivormis raadionupud ja CheckBox (ei oskagi kohe maakeeles öelda, linnukese-panemise-kastike või midagi). Algse programmi toimimine oli rajatud ekraanivormi kindlale struktuurile ja objektide paigutamise järjekorrale. Objektid loeti järjest ja kasutati viimase objektiga seotud teksti. Kui "Alguskuu" on paigaldatud esimesena, siis programm toimis. Kui ta oleks viimane, siis oleks programm näidanud sama veateadet.
Antud juhul võib olla lahenduseks see, kui piirata tingimusi sellega, et ei lasta läbi objekti "Alguskuu", muutes üht rida niimoodi:
If myvalik.Value = True Then -> If myvalik.Value = True AND myvalik.caption <> "Alguskuu" Then
|
|
Kommentaarid: 36 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
35 |
|
tagasi üles |
|
 |
koto
HV vaatleja
liitunud: 28.09.2006
|
14.05.2008 08:18:55
|
|
|
Tänud infidel!
infidel kirjutas: |
.....If myvalik.Value = True Then -> If myvalik.Value = True AND myvalik.caption <> "Alguskuu" Then |
Kuid AND ega & ei sobi!
Lõpuks sain asja funkama.
For Each myvalik In grpRead.Controls
If myvalik.Value = True Then
myVaade = myvalik.Caption
End If
Next myvalik
ActiveWorkbook.CustomViews(myVaade).Show
VarjaKuud myKuu
MsgBox "Prindin"
Nüüd aga märkkasin huvitavat viga.
Alguskuu valikukasti vaikeväärtus on formaadis: (5.14.2008) kuu, kuupäev, aasta.
Kui nüüd sisestada näiteks 5.6.2008 siis valitakse ja kuvatakse vaade juunikuust ehk: kuupäev, kuu, aasta!
|
|
tagasi üles |
|
 |
infidel
HV kasutaja

liitunud: 31.01.2004
|
14.05.2008 08:30:31
|
|
|
VBA Date funktsioon annab vaikimisi süsteemi kuupäeva formaadis kk-pp-aaaa. Vaikeväärtus määratakse Userform_initialize all just selle funktsiooniga.
Ülejäänud funktsioonid kasutavad aga Windowsis hetkel kasutatavat kuupäevaformaati.
Selliseid anomaaliaid ikka juhtub, mis teha
|
|
Kommentaarid: 36 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
35 |
|
tagasi üles |
|
 |
|
lisa lemmikuks |
|
|
sa ei või postitada uusi teemasid siia foorumisse sa ei või vastata selle foorumi teemadele sa ei või muuta oma postitusi selles foorumis sa ei või kustutada oma postitusi selles foorumis sa ei või vastata küsitlustele selles foorumis sa ei saa lisada manuseid selles foorumis sa võid manuseid alla laadida selles foorumis
|
|
Hinnavaatlus ei vastuta foorumis tehtud postituste eest.
|