Avatar billede mira96ac Novice
24. marts 2007 - 16:40 Der er 23 kommentarer og
1 løsning

Commandbutton+msgbox

Hejsa

Hvordan er koden hvis man har en commandbutton i en userform.
Når man trykker på commandbutton så skal der kommer en msgbox e.l. hvor man kan taste hvilken værdi man vil søge efter i sit excel ark i kolonne B.

Herefter kommer en ny msgbox som spørger hvilken værdi man vil søge efter i kolonne F.

Findes værdierne i kolonne B og F (på samme række), skal den regne summen af kolonne G ud fra de givne rækker som opfylder kriteriet og vise summen i en boks.

Herefter skal man bare kunne trykke ok og komme tilbage til userformen.
Avatar billede mira96ac Novice
24. marts 2007 - 17:23 #1
Jeg mener selvfølgelig af inputene/søgeværdierne skal tastes i en inputboks.

Resultatet skal vises i en msgbox.

Ligeledes skal den returnere en fejlmeddelelse hvis værdierne ikke findes.
Avatar billede excelent Ekspert
24. marts 2007 - 17:45 #2
jo men hvorfra og hvortil skal den summere
Avatar billede mira96ac Novice
24. marts 2007 - 20:01 #3
Værdi nr. 1 den skal søge efter står i kolonne A fra række 11 til uendeligt (der kommer flere og flere rækker til)
Værdi nr. 2 den skal søge efter står i kolonne F fra række 11 til uendeligt (der kommer flere og flere rækker til)


Den skal summere kolonne G fra række 11 til uendeligt

Alle værdier er nummeriske.

Og den skal selvfølgelig kun summere de værdier i kolonne G hvor kriterierne er opfyldt
Avatar billede excelent Ekspert
24. marts 2007 - 20:12 #4
Dobbeltklik på din knap i VBA-editoren
indsæt følgende kode imellem de 2 linie
den kikker i kolonne B og F er det B eller A ?

Dim b, f, bværdi, fværdi, tal, last

last = Cells(65500, 2).End(xlUp).Row
b = InputBox("Værdi i kolonne B ")
f = InputBox("Værdi i kolonne F ")
On Error GoTo ud
bværdi = Application.WorksheetFunction.Match(b, Range("b11:b" & last), 0)
fværdi = Application.WorksheetFunction.Match(f, Range("f11:f" & last), 0)

If bværdi = fværdi Then
tal = Application.WorksheetFunction.Sum(Range("g11:g" & bværdi))
End If
MsgBox ("") & tal

ud:
If bværdi = Empty Then MsgBox ("Ingen match i kolonne B")
If fværdi = Empty Then MsgBox ("Ingen match i kolonne F")
Avatar billede excelent Ekspert
24. marts 2007 - 20:29 #5
skift lige disse ud
bværdi = Application.WorksheetFunction.Match(CDec(b), Range("b11:b" & last), 0)
fværdi = Application.WorksheetFunction.Match(CDec(f), Range("f11:f" & last), 0)
Avatar billede mira96ac Novice
24. marts 2007 - 21:02 #6
Det er mig som skriver lidt ged. Der er kolonne B...

Jeg tester den forventningsfuld senere.

"If bværdi = fværdi " - dette betyder ikke at den mener at værdien i B skal være lig med værdien i F vel ???

De to værdier skal ikke nødvendigvis være ens (faktisk meget sjældent). Men jeg kan ikke helt læse formlen
Avatar billede excelent Ekspert
24. marts 2007 - 21:11 #7
jo - her er hvad du skrev

Findes værdierne i kolonne B og F (på samme række), skal den regne summen af kolonne G ud fra de givne rækker som opfylder kriteriet og vise summen i en boks.
Avatar billede mira96ac Novice
24. marts 2007 - 21:21 #8
Jeg synes ikke rigtigt den matcher værdierne ???

og)
Den må bare meget gerne vise fejlmeddelsen allerede hvis man taster en forkert/manglende værdi i b-kolonnen.

Den meddelelse vises først efter man har tastet i inputboks 2.

Og hvis man trykker annuller skal den ikke vise fejlmeddelelserne. Der skal den bare vende tilbage til userformen.
Avatar billede excelent Ekspert
25. marts 2007 - 09:07 #9
Du skriver at alle værdier er numeriske
jeg går ud fra det også gælder B og F kolonnerne

Dim b, f, bværdi, fværdi, tal, last
Sheets("Ark1").Activate
last = Cells(65500, 2).End(xlUp).Row

On Error GoTo ud
b = InputBox("Værdi i kolonne B ")
bværdi = Application.WorksheetFunction.Match(CDec(b), Range("b11:b" & last), 0)

f = InputBox("Værdi i kolonne F ")
fværdi = Application.WorksheetFunction.Match(CDec(f), Range("f11:f" & last), 0)

If bværdi = fværdi Then
tal = Application.WorksheetFunction.Sum(Range("g11:g" & bværdi + 10))
End If
MsgBox ("") & tal

ud:
If b <> "" And bværdi = Empty Then MsgBox ("Ingen match i kolonne B")
If f <> "" And fværdi = Empty Then MsgBox ("Ingen match i kolonne F")
Avatar billede excelent Ekspert
25. marts 2007 - 09:28 #10
jeg bruger denne linie, skal evt. rettes til dit ark
Sheets("Ark1").Activate

koden summerer kun hvis de 2 værdier du søger findes i samme række
Avatar billede mira96ac Novice
25. marts 2007 - 11:18 #11
De er alle nummeriske.

Jeg har tastet nogle tilfældige tal i kolonnerne B, F, G. Jeg har lavet en userform med en commandbutton.

Jeg står i ark1 og aktiverer min userform med

Sub start()
Load userform1
Userform1.show
End Sub

Men selvom jeg har flere ens værdier i kolonne B og F så tæller den ikke de relative værdier i G synes jeg ????
Avatar billede excelent Ekspert
25. marts 2007 - 11:24 #12
den summerer fra række 11 til den række hvor værdierne du indtaster findes - hvis begge indtastede værdier er i samme række
Avatar billede mira96ac Novice
25. marts 2007 - 11:25 #13
Eks.
A                    F                G
50                    12                10
50                    12                10
50                    13                2
51                    13                25
52                    15                15

Ved søg A=50 og F=12 skrive markroen 10 (resultatet skal være 20)
Ved søg A=50 og F=13 skrive markroen "" (resultatet skal være 2)
Avatar billede mira96ac Novice
25. marts 2007 - 11:26 #14
Den skal summere til række uendeligt.

Der har jeg ikke lige fået forklaret mig godt nok så....
Avatar billede excelent Ekspert
25. marts 2007 - 11:35 #15
nu skriver du A igen !! er det A eller B

koden gør som du efterspørger i dit oprindelige spørgsmål

hvis dette er forkert må du forklare det noget bedre
Avatar billede excelent Ekspert
25. marts 2007 - 11:45 #16
koden tager ikke højde for flere ens værdier i kolonne b og f
kikker på det og vender tilbage
Avatar billede excelent Ekspert
25. marts 2007 - 11:54 #17
prøv lige denne kode i stedet for, så tager vi resten derfra

Dim b, f, tal, last, rk
Sheets("Ark1").Activate
last = Cells(65500, 2).End(xlUp).Row
b = InputBox("Værdi i kolonne B ")
f = InputBox("Værdi i kolonne F ")

For t = 11 To last
If Cells(t, 2) = CDec(b) And Cells(t, 6) = CDec(f) Then rk = t: Exit For
Next

tal = Application.WorksheetFunction.Sum(Range("g11:g" & rk))

MsgBox ("") & tal
Avatar billede mira96ac Novice
25. marts 2007 - 12:34 #18
Undskyld.

Jeg mener selvfølgelig kolonne B (det går lidt for hurtigt nogle gange).

Den virker heller ikke, da den tager værdien i kolonne B som matcher og hvis værdien i kolonne f også matcher så ligger den alle tal sammen i kolonne g fra række 11 til den matchende række.

Altså i ovenstående eksempel hvis man skrive (A)B=52 og F=15 så bliver resultatet
(10+10+2+25+15)=62.

Her skal den kun skrive 15 da det er den eneste linie som opfylder betingelserne.
Avatar billede excelent Ekspert
25. marts 2007 - 12:39 #19
ok så tror jeg den fes ind :-) prøv:

Dim b, f, tal, last, t
Sheets("Ark1").Activate
last = Cells(65500, 2).End(xlUp).Row
b = InputBox("Værdi i kolonne B ")
f = InputBox("Værdi i kolonne F ")

For t = 11 To last
If Cells(t, 2) = CDec(b) And Cells(t, 6) = CDec(f) Then tal = tal + Cells(t, 7)
Next

MsgBox ("") & tal
Avatar billede mira96ac Novice
25. marts 2007 - 12:59 #20
Lige præcis. Perfekt.

Men måske du gider at tilføje så den skriver fejlmeddelelserne. Både efter inputbox 1 og 2. Hvis den ikke finder værdierne i henholdvis kolonne B og F.

Og så skal den ved annuller af både inputbox 1 og to vende tilbage til userformen. Lige nu skriver den en fejlmeddelelse.
Avatar billede excelent Ekspert
25. marts 2007 - 13:22 #21
Dim b, f, tal, last, t
Sheets("Ark1").Activate

last = Cells(65500, 2).End(xlUp).Row
b = InputBox("Værdi i kolonne B ")
f = InputBox("Værdi i kolonne F ")
If b = "" Or f = "" Then Exit Sub
For t = 11 To last
If Cells(t, 2) = CDec(b) And Cells(t, 6) = CDec(f) Then tal = tal + Cells(t, 7)
Next
If tal = 0 Then MsgBox ("Fandt ingen række med valgte værdier"): Exit Sub
MsgBox ("") & tal
Avatar billede excelent Ekspert
25. marts 2007 - 13:28 #22
glemte lige den skulle vende tilbage til formen ved Cansel
efter hvert input

Dim b, f, tal, last, t
Sheets("Ark1").Activate

last = Cells(65500, 2).End(xlUp).Row
b = InputBox("Værdi i kolonne B ")
If b = "" Then Exit Sub
f = InputBox("Værdi i kolonne F ")
If f = "" Then Exit Sub
For t = 11 To last
If Cells(t, 2) = CDec(b) And Cells(t, 6) = CDec(f) Then tal = tal + Cells(t, 7)
Next
If tal = 0 Then MsgBox ("Fandt ingen række med valgte værdier"): Exit Sub
MsgBox ("") & tal
Avatar billede mira96ac Novice
25. marts 2007 - 17:23 #23
Perfekt

Tusind tak for hjælpen...Rigtig godt du kunne løse dette for mig.

Kom med et svar så får du point...

P.S. jeg har et andet spørgsmål igang som du meget gerne må kigge på, hvis du har tid/lyst. (http://www.eksperten.dk/spm/768617). Se kommentarerne 23/03-2007 23:28:29 og 24/03-2007 12:28:10

Jeg ville rigtig meget gerne have løst disse problemer...
Avatar billede excelent Ekspert
25. marts 2007 - 17:43 #24
ok velbekom
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