Opgelost Excel raakt in de stress bij lege data invoervelden.

  • Onderwerp starter Onderwerp starter LRR
  • Startdatum Startdatum
Dit topic is als opgelost gemarkeerd
Status
Niet open voor verdere reacties.
De hele scanprocedure vereenvoudigd.
Hallo snb,
Ik heb jou versie uitgeprobeerd, maar ik krijg het niet werkend. Bij het opstarten (na verwijderen veiligheid blokkade) verschijnt er een rommelig beeld. Links boven staat wat tekst in cellen rechts boven staan wat kolommen en rechts onder zie ik de kopteksten staan die eerst links boven de grafiek kolommen stond. Als ik probeer via "beeld" een Userform te starten krijg ik lege velden te zien dus ik kan niets opstarten.
Bij de menu's voor ontwikkelaar zie ik wel twee userforms staan met daarin ook code. Maar hoe dit op te starten.

Met vriendelijke groet,

Loek
 
Bij het bepalen van het aantal rijen voor de grafiek krijg je 1048576 als resultaat als er geen data aanwezig is, en een grafiek met 4*10480576 punten vindt Excel niet zo leuk, het opbouwen van de grafiek vraagt dan nogal wat tijd.

Globals kun je alleen gebruiken in Modules, terwijl Publics in modules, classes, controls, forms etc. te gebruiken zijn.
Dus in jouw geval kun je ze beter als Public declareren. Maar de variabele pnts heb je niet meer nodig.

Zie bijlage, je problemen en wensen uit bericht #12 zijn hierin verwerkt.

De code van snb is zeer compact en werkt prima tot je alle data verwijdert. Ik kan me ook voorstellen dat die compacte code voor een wat minder ervaren gebruiker wat minder goed leesbaar is.
Hallo AHulpje,

Ik heb de door jou gemaakte code goed bestudeerd en heb inmiddels de fout die optreed in module2 opgelost door de volgende aanpassing:

" ClearGraph actieve_grafiek + 1, "Grafiek " & actieve_grafiek & ": Ia in mA Ua = " & anodespanning & "V" "

De nummers van de grafieken worden nu op alle plaatsen goed weergegeven. De foutmelding zoals eerder beschreven blijft nog wel. Het is voor mij erg leerzaam als ik zie hoe de oorspronkelijke code door mij gemaakt is en dat dit dan opgelost kan worden door deze enkele code regel.

Met vriendelijke groet,

Loek
 
Ik kan de fout met een lege grafiek 2 en de schuif helemaal naar rechts niet reproduceren, mocht je er prijs op stellen dat ik die fout onderzoek dan zou je de versie waarin de fout optreedt hier kunnen plaatsen, wellicht ligt het aan de grafiekdata, en die heb ik niet.

De ClearGraph fout (kolomnummer=grafieknummer+1) had ik inmiddels ook opgelost. Bijgaand een nieuwe versie waarin nog een paar zaken wat gestroomlijnd zijn.
 

Bijlagen

Hallo AHulpje,

Ik heb ook de laatste versie uitgeprobeerd en ook daar zit de foutmelding in. Je kan dit reproduceren door:
De uitgangspositie is alle grafieken (dus alle kolommen zijn leeg)
invoervelden: van boven naar beneden 20/100/4/-2/1/0
welke grafiek actief: 1
Start de meting
Hierna staat in kolom A de waarde van -2 tot en met +4 in stappen van 1
En in kolom B (dit is 1e grafiek) staat allemaal 0,00

Nu button grafisch
Zorg dat alleen bij grafiek 2 een vinkje staat (dit is eigenlijk onlogisch omdat daar geen data staat maar toch!)
Als je nu de Xmin schuif beweegt via de pijltjes naar volledig rechts dan gaat het goed.
Als je de schuif via de muis naar rechts brengt dan komt de foutmelding (fout 104)
De fout komt uit "function adddserie(k) "
 
In bijgaande versie kan er geen "lege" grafiek meer opgevraagd worden, de checkboxen voor lege grafieken worden uitgeschakeld, fout 1004 komt dan niet meer voor.
Bij het testen werd in sommige gevallen de meting niet gestart omdat de invoerparameters niet juist waren zonder dat daar een melding over verscheen, ook dat heb ik aangepast, zie Function Waarschuwing. Omdat ik een beetje moe werd van het telkens opnieuw intypen van de metingparameters heb ik de vrijheid genomen om ze op te slaan bij het starten van de meting en weer in te lezen als het metingformulier wordt geopend, zie SaveInput en LoadInput in de code van het betreffende formulier.
Om de wachttijd tijdens het testen te bekorten heb ik de For-loop van 1 tot 100.000.000 vervangen door de Sleep functie, zie Function vertraging. De Sleeptime in milliseconden kun je op het metingformulier opgeven. Kijk maar eens of het zo naar wens is.
 

Bijlagen

@LRR
Ik de scanroutine niet testen bij gebrek aan jouw meetapparaat.
Ik hoop niet dat je er een sport van maakt om via exotische akties te testen of je een programma op tilt kunt krijgen. Ga svp uit van verstandig gebruik.
Een basisboek VBA lijkt me ook zeker geen kwaad kunnen.
Bij openen van het bestand wordt het scherm F_grafiek getoond.

In het bestand vind je in de menubalk (het lint) een extra tab met 2 knoppen: scan en grafiek.
Daarmee kun je het scherm F_scan of F_grafiek tonen.

In het scherm F_scan zitten alle controles op geldige parameters in de spinbuttons.
 

Bijlagen

In bijgaande versie kan er geen "lege" grafiek meer opgevraagd worden, de checkboxen voor lege grafieken worden uitgeschakeld, fout 1004 komt dan niet meer voor.
Bij het testen werd in sommige gevallen de meting niet gestart omdat de invoerparameters niet juist waren zonder dat daar een melding over verscheen, ook dat heb ik aangepast, zie Function Waarschuwing. Omdat ik een beetje moe werd van het telkens opnieuw intypen van de metingparameters heb ik de vrijheid genomen om ze op te slaan bij het starten van de meting en weer in te lezen als het metingformulier wordt geopend, zie SaveInput en LoadInput in de code van het betreffende formulier.
Om de wachttijd tijdens het testen te bekorten heb ik de For-loop van 1 tot 100.000.000 vervangen door de Sleep functie, zie Function vertraging. De Sleeptime in milliseconden kun je op het metingformulier opgeven. Kijk maar eens of het zo naar wens is.
Hallo AHulpje,

Dit werkt erg goed. ook de wijziging voor wat betreft de snelheid. Wat mij betreft is dit de definitieve versie. Je zal wel opgemerkt hebben dat de invoer voor de steilheid nog niet in gebruik is. De steilheid van een elektronenbuis wordt door de fabrikant opgegeven bij een bepaalde roosterspanning . De roosterspanning wordt op dat punt met een zo klein mogelijke verandering verlaagd of verhoogd. Hoe klein deze verandering kan zijn wordt bepaalt door de nog te meten wijziging in de anode stroom. Stel dat je de roosterspanning door de fabrikant is opgegeven op 1,3V en dat er dan een stroom moet lopen van 15mA . Als je dan de roosterspanning 0,1V hoger maakt zal bij een ECC88 de anode stroom ongeveer 1,2mA toenemen. De steilheid is dan 12,5 mA/V. Dit alles hangt af van de kwaliteit van de buis dus door veroudering kan deze waarde veranderen. Ook kan de steilheid per anode spanning veranderen. Dit betekent dus dat ik per grafiek nadat deze geschreven is, afhankelijk van het invoerveld bij steilheid , deze meting ga uitvoeren en het resultaat in een aantal cellen ga weergeven. Ik verwacht daar geen moeilijke programmeer problemen mee omdat dit standaard reken sommen zijn.

Bedankt nogmaals voor de enorme hulp ik heb ook veel geleerd van jou oplossingen. Het gaat mij namelijk niet alleen voor een werkbaar programma maar ook om er van te leren zodat ik dit zelf ook maken.

Met vriendelijke groet,

Loek
 
@LRR
Ik de scanroutine niet testen bij gebrek aan jouw meetapparaat.
Ik hoop niet dat je er een sport van maakt om via exotische akties te testen of je een programma op tilt kunt krijgen. Ga svp uit van verstandig gebruik.
Een basisboek VBA lijkt me ook zeker geen kwaad kunnen.
Bij openen van het bestand wordt het scherm F_grafiek getoond.

In het bestand vind je in de menubalk (het lint) een extra tab met 2 knoppen: scan en grafiek.
Daarmee kun je het scherm F_scan of F_grafiek tonen.

In het scherm F_scan zitten alle controles op geldige parameters in de spinbuttons.
Hallo snb,

Bedankt voor je reactie,
Als eerste wil ik reageren op jouw opmerking " ik hoop niet dat je er een sport van maakt om via exotische akties te testen".
Ik vind het testen op ontstaan van foutmeldingen bij gebruiken van invoer bij een "userform" niet exotisch . Een foutmelding betekent simpel dat de ontwerper iets over het hoofd heeft gezien.

Nu over het programma dat jij hebt gemaakt:

Ik krijg het niet aan het werken. Bij de invoer velden van het userform (scan) zijn de velden allemaal zwart. Verder heb je mijn scan routine aangepast en alle vertragingen die ik er tussen had gezet weggehaald. Deze stonden er niet voor niets de reden zijn als eerste de hardware , dus de meetapparatuur heeft een bepaalde tijd nodig om een commando te verwerken. En de tweede reden is dat de te testen elektronenbuis ook tijd nodig heeft om zich in te stellen.

Ik heb nu een goed werkend programma dus ik stel voor om dit onderwerp af te sluiten.

Met vriendelijke groet,

Loek
 
Ik kan je opmerking over het scan userform niet plaatsen.
Bijgaand een schermafdruk (die jij ook had kunnen plaatsen als je het over een weergave hebt).
Zoals je na analyse had kunnen zien, zijn er geen invoervelden, alleen kringvelden (spinbuttons), waarmee slechts geldige waarden kunnen worden geproduceerd.
Daarmee wordt alle achteraf-code om invoer te controleren overbodig.
Toevoegen van Doevents-vertragingen lijkt me geen rocket science.
 

Bijlagen

  • scan.PNG
    scan.PNG
    11,3 KB · Weergaven: 2
@snb:
De backcolor van je kringvelden is "Tekst van actieve titelbalk", en laat die nou net pikzwart zijn bij mij.
En DoEvents wacht niet een vooraf ingestelde tijd, maar met jouw niet te onderschatten kennis weet je dat wel.
 
@AHulpje

Dank voor je info.
Dan converteert jouw Excelversie die achtergrondinstelling; want hier niks nie 'actieve titelbalk'

Kijk eens naar de volgende versie. Daar heb ik expliciet een kleur (wit) gekozen.
Converteert jouw excelversie die ook ?
 

Bijlagen

Met mijn versie van Microsoft Office Professional Plus 2021 (Nederlands) ziet het er zo uit:
1699707026859.png
 
Dat werkt, de achtergrondkleur van de labels is nu wit, de tekstkleur is zwart.
Ben er nog niet achter hoe ik de kleur van de 'Tekst van actieve titelbalk' in Windows kan aanpassen, zal wel een van de key-waarden in de registry Computer\HKEY_CURRENT_USER\Control Panel\Colors zijn.
En het lijkt mij dat 'Tekst van actieve titelbalk' een keurige vertaling is van 'Active title bar text'.
 
Ware het niet dat nieuwere versies van windows blijkbaar niet met de donkerblauwe balk met witte letters zoals in ieder geval vanaf Windows 98 het geval was, werken.
Heerlijk zulke non-compatibility features.
 
Dat werkt, de achtergrondkleur van de labels is nu wit, de tekstkleur is zwart.
Ben er nog niet achter hoe ik de kleur van de 'Tekst van actieve titelbalk' in Windows kan aanpassen, zal wel een van de key-waarden in de registry Computer\HKEY_CURRENT_USER\Control Panel\Colors zijn.
En het lijkt mij dat 'Tekst van actieve titelbalk' een keurige vertaling is van 'Active title bar text'.
Hallo AHulpje,

Ik reageer niet op jullie conversatie over de zwarte velden bij het "userform". Maar ik ben nu een tijdje echt aan het buizen testen maar kom er nu achter dat iets niet klopt bij de invoer van het "userform". Ik geef op een maximale roosterspanning van 10V en een minimale roosterspanning van 5V. Dit zou mogen ook als je kijkt naar de controle die in de private sub "cmdstartMeting click() " wordt uitgevoerd. Daar staat "if min_roostersp >+ max_roostersp ... etc" dan zou er een melding moeten komen. Maar gezien de invoer zou dat dus nu niet mogen immers "min_roostersp" is lager dan "max_roostersp". Toch komt de melding dat "min_roostersp" lager moet zijn dan "max_roostersp" hoe kan dat?. Zelf heb ik diverse testen gedaan tussen deze code regels en uit alles blijkt dat het wel reken variabelen zijn. Voer ik bijvoorbeeld max 10 V in en bij min 1 V dan werkt het wel?
Graag je reactie al vast bedankt met vriendelijke groet,

Loek
 
@AHulpje

Iets eenvoudiger:
Windows // configuratiescherm // Beeldscherm // Vormgeving // Geavanceerd // Actieve werkbalk

@LRR
Het is verstandiger de gebruikers slechts geldige waarden te laten invoeren dan foutieve invoer achteraf te controleren.
 
Laatst bewerkt:
De ingevoerde waarden zijn strings, dus tekst. En voor tekst geldt dat "5" niet kleiner is dan "10".
Je zou textboxen ook niet als rekenvariabelen moeten gebruiken, e.e.a. is aangepast in bijgaande versie.
Wijzigingen:
  • textboxen op frmMeting hernoemd.
  • Nieuwe variabelen gedeclareerd in Sub cmdStartMeting_Click()
  • SaveInput
  • LoadInput
 

Bijlagen

Oeps, toch nog een bugje, bij een grafiek van slechts één punt gaat het nog fout. Daarom
Code:
sbXmin.Max = Range("A2").End(xlDown).row
gewijzigd in
Code:
sbXmin.Max = Range("A1").End(xlDown).row
 

Bijlagen

Hallo AHulpje,

Bedankt voor de aanpassing, het werkt nu goed. Ik had zelf ook het idee dat dit iets te maken had met tekst/string. Maar als ik direct voor het "IF" statement een reken test uitvoerde dus "max waarde" min "minimum waarde" en bekeek het resultaat met "debug print" dan werd de berekening goed uitgevoerd. Dus was mijn constatering dat het toch iets anders moest zijn. Ook had ik in de betrokken sub deze twee variabele met "DIM double" gedefinieerd maar ook dat hielp niet. Maar nu werkt het goed bedankt nogmaals met vriendelijke groet,

Loek
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan