Avatar billede espersen Novice
15. juli 2004 - 08:50 Der er 26 kommentarer og
1 løsning

Ændre data i ark via UserForm (VB)

Jeg har siddet og kæmpet med diverse knapper på en UserForm, hvor ønsket er at man ved klik og/eller indtastning af tal kan ændre data i regnearket

Kampen står lige nu 2-0 til koden

Min userform er klar ; den viser et par grafer + henter lidt tekst fra regnearket.

Hvordan får jeg den til at ændre data i regnearket via min UserForm ?
Avatar billede asol Nybegynder
15. juli 2004 - 09:32 #1
Et lille eksempel. Du har en userform, der hedder UserForm1, med een knap (cbKnap) og een textbox (tbTal). Hvis du dobbelt klikker på knappen og indsætter følgende vil userformen indsætte værdien 1000 i celle A1 i ark 'Ark1' og den indtastede værdi i celle A2

Private Sub cbKnap_Click()

ActiveWorkbook.Sheets("Ark1").Cells(1, 1).Value = 1000
ActiveWorkbook.Sheets("Ark1").Cells(1, 1).Value = UserForm1.tbTal.Value

End Sub
Avatar billede asol Nybegynder
15. juli 2004 - 09:35 #2
Ok. Det var ikke lige den bedste forklaring så spørg hvis du ikke forstår det!
Avatar billede espersen Novice
15. juli 2004 - 09:51 #3
øøhhh  jo ; det virker - men jeg forstår ikke helt hvorfor. Men jeg er da på vej ind i kampen igen.. ;o)

Jeg kan ikke helt følge hvad linie 1 skal bruges til.
Linie2 forstår jeg således; værdien i tekstboks skal kastes ned i celle 1,1

cbKnap_Click; ved klik udføre den disse to liniers kode.
Avatar billede espersen Novice
15. juli 2004 - 09:54 #4
(den kaster "kun" tekstboksens værdi ind /rettere sagt den skriver nok først 1000 ; dernæst smider den tbTal-værdien ind i cellen 1,1
Avatar billede asol Nybegynder
15. juli 2004 - 09:58 #5
Min fejl! Linie 2 skal være:
ActiveWorkbook.Sheets("Ark1").Cells(2, 1).Value = UserForm1.tbTal.Value
Avatar billede asol Nybegynder
15. juli 2004 - 10:10 #6
I forbindelse med userforms er der en masse events, der giver muligheden for at køre forskellige små stykker kode alt efter hvilken handling, der fortages. I ovenstående eksempel brugte vi click-eventet ifm. en knap, hvilket medfører at der kører en lille kode, når vi trykker på knappen. Det kunne ligeså have været noget kode der sender en mail, opdaterer en datebase etc.
Alle indtastninger og valg i en userform kan hentes over i regnearket, en variabel
eller lignende ved at tildele en celle, variabel eller hvad de nu måtte være værdien fra userformen efter følgende princip:

Variabel = Userformnavn.Kontrolnavn.Value
Cellereference = Userformnavn.Kontrolnavn.Value

Det var den korte og bestemt ikke-udfyldende forklaring...
Avatar billede espersen Novice
15. juli 2004 - 10:29 #7
dejligt - er ved at fatte det...  ;o)

Hvad med OptionButton1 ?  hvor den har sammenhæng med en celle 5,5
Værdien i OptionButton1 skal afspejle den nuværende værdi i celle 5,5 når UserForm åbnes. Og ved klik i på OptionButton1 skal værdien kunne ændres.

(baggrund; lad os antage at en graf laves ud fra værdierne i celle 5,5 + 5;6 + 5,7 - og for at kunne simulere tilvag og fravalg vil det være lækkert hvis man kan klikke på OptionButton1 ; der så ved aktiveret (med prik i) medtager celle 5,5 - og ved ikke-aktiveret sætter celle 5,5 til fx værdien 0)
Avatar billede espersen Novice
15. juli 2004 - 10:36 #8
(det er kun det med at hente samt ændre værdien i celle 5,5 der driller) Grafen som vises er på plads)
Avatar billede asol Nybegynder
15. juli 2004 - 10:59 #9
Jeg er ikke helt med... Så du får lige det generelle i første omgang :-)

Når OptionButton1 ikke er markeret har den 'værdien': OptionButton1.Value = False. Når OptionButton1 modsat er markeret har den 'værdien': OptionButton1.Value = False


Hvis du laver det som en checkbox i stedet så kan du fjerne markeringen igen...

Private Sub CheckBox1_Click()

Dim rngChartData As Range

'Checkbox1 ikke markeret
If CheckBox1.Value = False Then
    ActiveWorkbook.Sheets("Ark1").Activate
    Set rngChartData = Range(Cells(5, 6), Cells(5, 7))
Else
    ActiveWorkbook.Sheets("Ark1").Activate
    Set rngChartData = Range(Cells(5, 5), Cells(5, 7))
End If

ActiveWorkbook.Charts("Diagram1").SeriesCollection(1).Values = rngChartData

End Sub

I ovenstående kode er referencen til regnearket celle (5,5) til (5,7) hvis checkboxen er markeret og celle (5,6) til (5,7) hvis checkboxen ikke er markeret.

Husk at rette Ark1 og Diagram1 ovenfor...
Avatar billede asol Nybegynder
15. juli 2004 - 11:00 #10
Fejl i linie 4: OptionButton1.Value = True
Avatar billede espersen Novice
15. juli 2004 - 11:12 #11
kanon ; stillingen må være 2-1 nu

Jeg har ændret dit forslag til dette:

Private Sub CheckBox1_Click()

'Checkbox1 ikke markeret
If CheckBox1.Value = False Then
    ActiveWorkbook.Sheets("Ark1").Cells(21, 2).Value = "Nej"
Else
    ActiveWorkbook.Sheets("Ark1").Cells(21, 2).Value = "Ja"
End If

End Sub

(årsag: hvis 21,2 er "JA" så medtages beløbet ; "Nej" så er det ikke med - efter dette så skal jeg bare have den til at opdatere chartet (som iøvrigt vises som en gif-billede)
Avatar billede espersen Novice
15. juli 2004 - 11:58 #12
det kører for mig nu ;o)   

det er en kanon hjælp du har givet !! (point er sat lidt op)
Avatar billede asol Nybegynder
15. juli 2004 - 12:46 #13
Der vat godt.

Så tillader jeg mig at smide et svar :-)
Avatar billede espersen Novice
15. juli 2004 - 13:44 #14
;o) 
lige et tillægs-spørgsmål:

kan fx. CheckBox1 være Checked/Unchecked når UserForm loades - alt afhængig af hvad der står i Celle 21,2 ("Ja" eller "Nej")
Når der er valgt "JA" så skal beløbet jo medtages - og så ser det lidt dumt ud at CheckBox1 ikke er markeret (det er dog medregnet!)

Men det skal vel ikke styres under ovenstående SUB ?
Avatar billede espersen Novice
15. juli 2004 - 14:47 #15
i stil med dette:

If ActiveWorkbook.Sheets("Ark1").Cells(41, 2).Value = "Ja" Then
CheckBox1.Value = True
Else: CheckBox1.Value = False
End If
Avatar billede asol Nybegynder
15. juli 2004 - 15:10 #16
Hvad er navnet på din userform?
Avatar billede asol Nybegynder
15. juli 2004 - 15:14 #17
Dobbeltklik er vilkårligt sted i din userform og indsæt følgende:

Private Sub UserForm_Initialize()

If ActiveWorkbook.Sheets("Ark1").Cells(41, 2).Value = "Ja" Then
    Me.CheckBox1.Value = True
Else
    Me.CheckBox1.Value = False
End If

End Sub
Avatar billede espersen Novice
15. juli 2004 - 15:36 #18
nice ; du har hjulpet mig langt i dag !
Avatar billede espersen Novice
15. juli 2004 - 15:58 #19
den sidste del driller lidt : Me ; hvorfor står det der ?

Min userform hedder UserForm1
Avatar billede espersen Novice
15. juli 2004 - 16:28 #20
hmm... det var bare mig der copy/pastede for vildt uden at rette nummeret i 'Me.CheckBox1.Value = True"' for hver enkelt IF -

det virker selvfølgeligt med en korrekt kode.. ;-)
Avatar billede asol Nybegynder
15. juli 2004 - 16:59 #21
Me er et shortcut for den aktuelle userform. Det kan i denne forbindelse sagtens udelades...
Avatar billede espersen Novice
15. juli 2004 - 17:06 #22
det griber lidt om sig : jeg har ved hjælp af ovenstående kode sat yderligere 3 CheckBoxe's ind ; hvor der dog er en lille ting ;

Hvis man vælger nr. 1 så skal de andre 2 være UnChecked - osv. Kan det ikke sættes ind under If - koden ? (og hvordan ser det ud)
Avatar billede asol Nybegynder
15. juli 2004 - 17:10 #23
Et eksempel for CheckBox1. Så skal du lave noget tilsvarende for CheckBox2...

Private Sub CheckBox1_Click()

If CheckBox1.Value = False Then
    Checkbox2.Value = true
Else
    Checkbox2.Value = false
End If

End Sub
Avatar billede espersen Novice
15. juli 2004 - 17:13 #24
aaahhh  selvfølgelig ;o)
Avatar billede kabbak Professor
15. juli 2004 - 17:15 #25
hvis du brugte OptionButtons i stedet for  CheckBox, ville du kun kunne have 1 makeret af gangen, de skifter automatisk
Avatar billede espersen Novice
15. juli 2004 - 17:23 #26
ååhh ja ; kunne da lige overvejes ;o)  thx
Avatar billede espersen Novice
16. juli 2004 - 15:59 #27
jeg kæmper videre med det kære VB : http://www.eksperten.dk/spm/520474
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Excel kurser for alle niveauer og behov – find det kursus, der passer til dig

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester