Opgelost grafiek maken met VBA in Excel

  • Onderwerp starter Onderwerp starter LRR
  • Startdatum Startdatum
Dit topic is als opgelost gemarkeerd
Status
Niet open voor verdere reacties.

LRR

Gebruiker
Lid geworden
27 jul 2023
Berichten
35
Hallo Forum lezers,

Ik ben nieuw op dit forum en de reden dat ik nu gebruik maak van dit forum is omdat ik na weken proberen met Excel en VBA een programma niet werkend krijg. Tot nu toe had ik wel ervaring met Excel maar dan meer het “gewone” gebruik van cellen en deze weergeven in grafieken.
Ik gebruik Microsoft office Professioneel plus 2021

Als eerste beschrijf ik wat het programma moet doen:
Twee meetinstrumenten via een HPIB interface bus aansturen. De HPIB interface zelf is via een USB verbonden met de computer en Gebruikt de COM port3.
Via een menu (Macro TEST) kan je de start en stop waarde van een stroombron instellen.
Via datzelfde menu kan je ook de stap grote instellen, de maximale spanning, de X-as met de stroomsterkte logaritmisch of lineair, en de Y-as grafiek in ohm of spanning weergeven.
De resultaten van de stroom instelling komen in de A-kolom cellen en de meetresultaten van de voltmeter komen in de B-kolom.
De grafiek heeft dynamische assen en worden dus aangepast aan de hand van het aantal stappen op de horizontale as en de gevonden spanning waarde op de verticale as. Verder worden in de kolom C,D en E nog wat status gegevens van de meetapparatuur bijgehouden.
Delen van dit programma, vooral de delen die de grafiek maken heb ik niet zelf geschreven.
Oorspronkelijk werkte dit programma zonder problemen. Echter de data voor de horizontale as
(A-kolom) was niet het getal dat in de cel stond maar het kolom getal.
Dus stel je hebt een begin waarde van 10 en een eindwaarde van 200 en een stap waarde van 10.
Dan was A2 =10 en A12=20 en A22=30 en zo verder. De tussen liggende cellen werden dan niet beschreven. Maar de grafiek werd wel goed beschreven omdat de horizontale as startte met 10 en aan het eind 200 was.
In het voorbeeld wat ik meestuur is door mij een wijziging uitgevoerd zodat de data begint bij A2=10 en A3=20 en A4=30 en zo verder. Het data wegschrijven begint bij A2 omdat in cel A1 de koptekst staat.
Ik dacht dat ik met de Excel functie “Gegevens selecteren voor grafiek” de data die staat in de kolommen A en B goed zou kunnen weergeven. Maar dat is me tot nu toe niet gelukt.
De eerste zaak wat me niet lukt is de ingestelde gegevens bij “Gegevens selecteren voor grafiek” te laten staan. Bij elke start komen de oude gegevens terug bijvoorbeeld de “reeks naam” die staat nu op kolom B2 dit is dus een data veld als ik deze verplaatst naar B1 dan zie bij de grafiek dat het ook boven in staat. Maar bij start verdwijnt deze weer en komt de oude instelling B2 weer terug. Vaak komt er ook een blank vlak op de plaats waar de grafiek moet staan.

De tweede zaak wat me niet lukt is hoe kan ik de data op de X-as nu op de juiste manier plaatsen.
De situatie nu is dus dat in het voorbeeld van start 10 en stop 200 en sap grote 10 er 20 stappen gemaakt worden en op de X-as ook 20 wordt weergegeven op de as van 10 tot 200. En dat is dus fout hij had moeten staan op 200.

Het probleem is dus eenvoudig te omschrijven:
Eerst wat goed is :
De communicatie met de meetinstrumenten
De data voor de horizontale X-as in kolom A en de data voor de verticale as in kolom B
De schalen voor horizontaal en verticaal van de grafiek mits deze aanwezig is.
De data op de grafiek voor de verticale as is juist

Wat niet goed is:
Instellingen gemaakt met “Gegevens selecteren voor grafiek” blijven niet staan.
Weergave horizontaal is niet juist.
Ik hoop dat je na dit lezen niet bent afgehaakt het is een lang verhaal maar volgens mij is het probleem terug te brengen naar de VBA codering van de grafiek. Ik kom er niet uit omdat ik eigenlijk niet begrijp wat al deze codering betekent. Wie kan mij helpen?
Hierna het programma,




Met vriendelijke groet,
Loek
 

Bijlagen

Hallo Marco,
Bedankt voor je reactie. Als je de meetdata in kolom A en B in een draaitabel zou zetten dan is de grafiek juist.
Dat heb ik ook uitgeprobeerd na een volledige meting. De data in de kolom A en B heb ik met de functie “Gegevens selecteren voor grafiek” aangebracht.
Ook met dezelfde functie de reeks naam ingevoerd en deze verschijnt dan boven de grafiek. In dit geval was dat de tekst die staat in kolom B1 met de tekst Y-as in uV
Hierna verschijnt de goede grafiek en ik denk dat dit dan ook met een draaitabel zou gebeuren.

Het probleem is nu dat wanneer ik een nieuwe meting start weer de foute grafiek verschijnt. En ook de reeks naam weer de verkeerde is namelijk de data van kolom B2 en dat is in dit geval meetdata welke nu ook boven aan de grafiek komt te staan.

Het lijkt er dus op dat er ergens gegevens zijn opgeslagen die met de functie “Gegevens selecteren voor grafiek” niet te wijzigen zijn. Ergens in de documentatie van Windows staat iets over het mogelijk verbreken van het verband tussen de grafiek en de nieuwe waarde maar er staat niet bij hoe je dit kan oplossen.

Verder weet ik nog niet zo veel over het gebruik van draaitabellen maar ik denk dat je pas na ophalen van de gegevens een draaitabel kan maken.
De methode die ik wou gebruiken maakt de grafiek tijdens het meten De weergave van de Y-as gaat goed deze schaal wordt ook tijdens de meting aangepast. Dus stel dat de eerste metingen 100 zijn dan is de onderkant van de Y-as 0 en de bovenkant is 100. Komen er nu waarde van bijvoorbeeld 2000 dan wordt de bovenkant van de Y-as 2000 en de hele grafiek die tot dat moment geschreven was wordt opnieuw geschreven. Dit alles gebeurt met de code die met VBA gemaakt is. Voor de horizontale as werkt het anders daar is vooraf bekend wat de start en stop waarde is. Deze komen op de X-as als tekst. Nu moet met de VBA code per kolom a cel de data die in die cel komt overeen komen met een punt op de X-as. En dat gaat fout en door kennis gebrek van mij weet ik niet in welk stuk van de VBA code dit veranderd moet worden. Er zijn dus twee problemen de eerste is dat steeds oude waarde van de grafiek instellingen blijven terug komen. En de tweede probleem is dus dat met VBA code niet de juiste X-as waarde geschreven worden. Er wordt niet gebruik gemaakt van de waarde die in de kolom A,cel staat maar de kolom ,cel nummer wordt nu gebruikt. dus stel er staat in A,7 de waarde 500 dan wordt op de grafiek op de X-as op plaats 7 geschreven met op de Y-as de goede waarde. Dit is dus fout er zou op de X-as bij punt 500 met de juiste Y-as waarde geschreven moeten worden.
Met vriendelijke groet,
Loek
 
Laatst bewerkt:
Er staat helemaal geen VBA code in om een grafiek te maken.
 
Hallo alphamax,
Bedankt voor je reactie . Op onderstaande stukje code in VBA kan je zien dat er een grafiek wordt gevuld met data.
De grafiek zelf en de presentatie wordt in Excel zelf gemaakt.

Als ik het mis heb dan hoor ik het wel
Met vriendelijke groet,

Loek



Code:
RG = "B2:B" & Format(Pnts)

ActiveSheet.ChartObjects("Diagram 1").Activate
ActiveChart.SeriesCollection(1).Select
ActiveChart.SetSourceData Source:=Sheets("Blad1").Range(RG), PlotBy:= _
        xlColumns

        
        'horizontale as van de grafiek dynamisch bepalen aan de hand van begin-eind
ActiveChart.Axes(xlCategory).Select
  With ActiveChart.Axes(xlCategory)
      .MinimumScale = StartValue
      .MaximumScale = StopValue
      .MinorUnitIsAuto = True
      .MajorUnitIsAuto = True
      .Crosses = xlAutomatic
      .ReversePlotOrder = False
      If log = 0 Then
      .ScaleType = xlLiniair
      Else
      .ScaleType = xlLogarithmic
      End If
      .DisplayUnit = xlNone
  End With
 
Ik snap er niets van, te veel info.
Dus ik heb een voorbeeldje gemaakt, van wat als basis kan dienen voor wat ik denk dat jij bedoelt.
 

Bijlagen

Laatst bewerkt:
Hallo alphamax,

Bedankt voor je reactie.

Ik maak kennelijk niet duidelijk wat het probleem is. Het voorbeeld dat jij gemaakt heb is het maken van een grafiek met de standaard Excel functies. Dat lukt mij ook om dat te maken.
Maar stel nu dat in het voorbeeld van jou de data in de twee kolommen die voor de X-as en Y-as nog niet bekend is . Deze data wordt met het User-formulier ingegeven met de start data en eind data en de stap grote . Hierna start de meting en worden de kolommen gevuld. Nu is de bedoeling dat je zonder verdere handelingen een grafiek krijgt die stap voor stap wordt ingevuld aan de hand van de meetresultaten. In het voorbeeld dat jij geeft kan je later als de meting gereed is via de Excel functies wel makkelijk een grafiek maken maar dat is niet de bedoeling.

Het originele programma doet dit wel maar er zijn dus twee problemen die ik al eerder beschreven heb. Door kennis gebrek bij mij , van VBA in relatie met grafieken, kan ik nog steeds niet begrijpen wat er nu precies fout gaat. Ik zoek iemand die meer detaillistische kennis heeft van VBA.

Hier zijn wat vragen waarop ik geen antwoord weet:

1e
In het huidige programma wordt met VBA voor zowel de horizontale als verticale as data verzameld.
Mijn vraag hierbij is: Moet de opbouw van de grafiek zelf wel met de functies Excel gemaakt worden?

2e
Als je bij het oorspronkelijke programma in het grafiek gebied kist voor de Excel functie “Gegevens selecteren voor grafiek” dan kan je kiezen in welke kolommen de data staat voor de X en Y as.
Mijn vraag hierbij is: Moet je deze keuze mogelijkheid wel maken omdat je via VBA ook al met dezelfde gegevens werkt?

3e
In het stukje code van het VBA programma dat ik eerder verstuurd heb staat :" ActiveSheet.ChartObjects("Diagram 1").Activate"
Mijn vraag is hierbij: Waar komt die naam "Diagram 1" vandaan? Is dit de verwijzing naar de grafiek en zo ja Hoe kan ik zien of deze grafiek werkelijk zo heet?

4e
Als ik met de Excel functie “Gegevens selecteren voor grafiek” de cellen selecteer waar de data staat (dus kolom A en B) en ik kies ook voor de reeks naam dan verschijnt er een grafiek zoals verwacht en ook al eerder hier beschreven is. Maar als ik nu nieuwe invoer maak met het User-formulier dus start-stop en step gegevens dan wordt vaak het hele grafiek scherm wit. Ga je dan op dit witte vlak staan en je kiest weer voor “Gegevens selecteren voor grafiek” dan zijn alle eerder ingevoerde waarde verdwenen.
Mijn vraag is hierbij : Wat doe ik fout het lijkt er op dat de acties in VBA deze instellingen verwijderd?

Samengevat : Op de standaard manier met de EXCEL functies een grafiek maken is geen probleem. Er moet toch iemand zijn op dit forum die specifieke kennis heeft van VBA om mij te helpen met deze problemen. Al was het maar dat uitgelegd wordt wat dat stukje code precies doet. Ik heb deze code niet zelf geschreven .

Met vriendelijke groet,

Loek
 
Laatst bewerkt:
Heb je enkele enkele regels met data toegevoegd of verwijders en op de knop "AutoChart" geklikt?
Dan wordt met VBA de grafiek aangepast.
 
Laatst bewerkt:
Het voorbeeld dat jij gemaakt heb is het maken van een grafiek met de standaard Excel functies. Dat lukt mij ook om dat te maken.
Het is een grafiek gemaakt de de standaard functies van excel, met VBA code die door te klikken op de knop de assen van de grafiek aanpast
Maar stel nu dat in het voorbeeld van jou de data in de twee kolommen die voor de X-as en Y-as nog niet bekend is . Deze data wordt met het User-formulier ingegeven met de start data en eind data en de stap grote . Hierna start de meting en worden de kolommen gevuld. Nu is de bedoeling dat je zonder verdere handelingen een grafiek krijgt die stap voor stap wordt ingevuld aan de hand van de meetresultaten. In het voorbeeld dat jij geeft kan je later als de meting gereed is via de Excel functies wel makkelijk een grafiek maken maar dat is niet de bedoeling.
Dus de assen van grafiek moeten dus bij elke nieuwe regel aanpast worden?
Code:
Ik zoek iemand die meer detaillistische kennis heeft van VBA.
Zegt iemand die 4 berichten heeft gestuurd tegen iemand die 2.617 berichte heeft gestuurd :shocked:
 
Laatst bewerkt:
Hallo alphamax,

Bedankt voor je reactie,

Ik vind het jammer dat je zo reageert over mijn vraag dat ik iemand zoek die mij uitleg kan geven over het gebruik van VBA in relatie met grafieken. Jij zelf gaf in een eerder bericht aan dat je met VBA geen grafieken kon maken. En deze opmerking was dus niet juist en voor mij was dit de aanleiding om te veronderstellen dat jij over dat gebied misschien minder kennis heb. Deze indruk wordt versterkt omdat tot nu toe geen reacties zijn gekomen op mijn specifieke VBA vragen.
Ik bedoelde met mijn opmerking niets persoonlijk het is niet erg als je van een onderwerp minder af weet. Zelf heb ik al meerdere keren aangegeven dat bij mij de kennis ontbreekt maar ik wil wel graag leren hoe het nu echt werkt.
Ik ben 75 jaar en nog steeds bezig om te leren het project waar ik nu vragen over stel is een combinatie van meetapparatuur (die ik zelf repareer) , de HPIB interface (die ik zelf gebouwd heb), de communicatie via EXCEL en VBA met de HPIB interface (waar ik zelf het grootste deel van de VBA code heb gemaakt). En dat alles puur voor de hobby en dus eerst veel moeten leren.
Als je echt niet kan omgaan met zulke vragen die ik heb stop dan maar met reageren nogmaals het is voor mij een hobby en geen wedstrijd die het beste is of de meeste reacties op een forum heeft gegeven.

Met vriendelijke groet,

Loek
 
Kijk een poosje op het forum rond.
Dan zie je wat VBA wel en niet kan, ik heb het idee dat je daar een verkeerde voorstelling van hebt.
Dan zie je ook wie de helpers met kennis van zaken zijn, misschien dat een van hen dan wel reageert.
Maar schrijf dan kortere berichten met simple vragen, en plaats een voorbeeld bestandje.
En beantwoord de vragen die de helpers stellen en schrijf er niet langs af.
Dat verhoogt je kans op succes.

Ben benieuwd.
 
Laatst bewerkt:
Hallo,

Daar heb je een punt @alphamax,

Misschien een beetje lui van mijn kant, maar bij zo'n lange vraagstelling klik ik 99 van de 100 gevallen direct verder.
Het blijft hobbywerk en die moet leuk blijven.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan