Avatar billede bastrup Nybegynder
25. september 2000 - 11:58 Der er 17 kommentarer og
1 løsning

Makro/VB/Excel

Er begynder i visual basic

Jeg forsøger at skrive en makro i Excel, som registrerer hvilken af 25 knapper, brugeren af regnearket trykker på. Når programmet har registreret, hvilken knap, der er trykket på, skal den returnere en tilhørende tekst. De 25 knapper har jeg døbt \"knap1\" til \"knap25\", og forklaringerne har jeg placeret et andet sted i regnearket. Hvordan gøres det smart i én simpel makro.

Venlig hilsen

Bastrup
Avatar billede powell Nybegynder
25. september 2000 - 12:01 #1
Skriver du koden i Excell? eller ønsker du når en bruger trykker på en knap i excell skal den i et VB script, fortælle hvilken knap der er trykket på?
Avatar billede bastrup Nybegynder
25. september 2000 - 12:06 #2
Jeg skriver koden i Visual Basic. Jeg ønsker, præcis som du skriver, at brugeren har mulighed for at trykke på X antal knapper i Excel.

Knapperne har jeg smidt i et factsheet, hvor en lang række nummeriske og grafiske resultater af en analyse er præsenteret. Når der er noget brugeren ikke forstår, skal vedkommende få en uddybende forklaring ved at trykke på knappen. Som \"makro-begynder\" havde jeg lavet en makro til hver knap, hvorpå en kollega gjorde opmærksom på, at jeg skulle nøjes med en makro, der allokerede den rette forklaring til hver knap.
Avatar billede powell Nybegynder
25. september 2000 - 12:08 #3
Ja det kan du gøre med If sætninger eller nemmere gør det med Case.
Avatar billede bastrup Nybegynder
25. september 2000 - 12:12 #4
Jeg havde også lurret, at der nok var behov for en if-sætning.

Men hvordan afgør man helt konkret i VB-koden, hvilken knap, brugeren har trykket på.
På nudansk:

If \"brugeren har trykket på knap1\" then
hent forklaring1 og præsenter den pænt
End if
Avatar billede powell Nybegynder
25. september 2000 - 12:44 #5
Sådan her:

If cmdKnap1 = true then msgbox(\"Knap er blev trykket ned!\")

If cmdKnap2 = true then msgbox(\"Pænt af dig at kikke forbi\")

Sådan ville jeg nok lave det!!!
Avatar billede bastrup Nybegynder
25. september 2000 - 12:57 #6
Ok, det virker ikke. Hvis det gjorde, så er næste problem, at msgbox skal vælge den rigtige tekst
Avatar billede powell Nybegynder
25. september 2000 - 12:59 #7
Har du en mail adresse, så vil jeg lige maile et eksempel.
Avatar billede bastrup Nybegynder
25. september 2000 - 13:03 #8
tba@investeringsdata.dk
Avatar billede powell Nybegynder
25. september 2000 - 13:05 #9
Jeg har et andet eksempel her:

Dim Number

\'Numeret skal så ha værdien af knappen.
Select Case Number
Case 1
  debug.print \"Du trykkede 1!\"
Case 2 to 5
  debug.print \"Du trykkede mellem 2 og 5!\"
Case 6,7,8
  debug.print \"Du trykkede 6,7 eller 8!\"
Case Else
  debug.print \"Du trykkede over 8!\"
End Select
Avatar billede bastrup Nybegynder
25. september 2000 - 13:15 #10
Hvad mener du med: Nummeret skal så ha værdien af knappen?
Avatar billede powell Nybegynder
25. september 2000 - 13:53 #11
Det var blot et eksembel.

Når du står i Excel, trykker en knap ned, lad os sige knap 4, så skal du give variablen Number værdien 4, så kan du hoppe til rutinen her over, hvor den så vil sige Case 4 og udføre eksakt hvad der står. Der kan også udføres andre ting end lige tekst.

Variablenm skal du blot navngive i general så du kan bruge den i alle dine program stumper.
Avatar billede bastrup Nybegynder
25. september 2000 - 14:01 #12
Du må meget undskylde. Det er som sagt nyt for mig, og den er stadig ikke feset ind.

Hvor kommer sammenkædningen af knapper og Number ind? -Hvordan får jeg givet værdien 4 til knap4?
Avatar billede powell Nybegynder
25. september 2000 - 14:14 #13
OK - jeg prøver at tage mindre skridt.

Jeg regner med at når du trykker på en knap i Excel så kan du sende en værdi via en variabel til dit VB-program. Det er denne værdi du skal se på...

Giv alle knapperne en værdi de skal sende til VB-programmet, så knappen 1 sender værdien 1, knappen 2 sender værdien 2 o.s.v.

Så er det blot i dit VB program at sige Jeg modtog værdien 4 så skal jeg udføre ordre nummer 4.

Er det nogen af de ting herover du ikke har oppe og køre eller er det noget du ikke har forstået?
Avatar billede bastrup Nybegynder
25. september 2000 - 14:18 #14
Med fare for at lyde komplet åndsvag:
Mit problem er og har hele tiden været, at jeg ikke fatter hvordan VB skal registrere, hvilken knap jeg har trykket på. Dvs. det med at give knapperne en værdi. Resten tror jeg nok, jeg har styr på.

Det er iøvrigt første gang jeg bruger eksperten.dk. Jeg skal vel give dig en hel masse point eller sådan noget - hvorfor h. har de ikke skrevet et par ord om det på siden?
Avatar billede powell Nybegynder
25. september 2000 - 14:21 #15
Tænk ikke på det... Jeg er her for at hjælpe dig med dit problem ikke for at score point...

Ingen spørgsmål er dumme, så jeg vil se hvad jeg lige kan gøre... Vender tilbage lidt senere...
Avatar billede powell Nybegynder
25. september 2000 - 14:41 #16
Jeg ved ikke 100% hvordan du har lavet dit Excell, og kender derfor ikke et konkret svar, men jeg fandt noget kode som sender noget til excel udfører derefter en udregning i excell og hiver beregningerne tilbage igen... Håber det kan hjælpe lidt...

Option Explicit

Private Sub cmdAngle_Click()
  Dim x1 as Object
  \'Brug OLE Automatikken til at kreere et excel objekt
  Set x1 = CreateObject(\"Excel.Sheet\")
  \'Sætter de kendte værdier ind i cellerne
  x1.Range(\"A1\").Value = txtX.Text
  x1.Range(\"A2\").Value = txtY.Text
  \'Beregn tredje celle
  x1.Range(\"A3\").Formula = \"=ATAN2(A1, A2)\"
  x1.Range(\"A4\").Formula = \"=A3*180/PI()\"
  \'Viser resultat i en lbl kontrol
  lblRadians.Caption = x1.Range(\"A3\").Value
  lblDegrees.Caption = x1.Range(\"A4\").Value
  \'Tøm Hukommelse
  Set x1 = Nothing
End Sub
Avatar billede nolle_k Nybegynder
25. september 2000 - 22:52 #17
Lav dog en Gloabl Variabel hvilket jeg normalt er i mod men det virker som den mest enkle metode!!


Men jeg forstår ikke helt hvorfor en ande funktion skal finde ud af hvilken knap, der er trykket på??? Plejer man ikke at håndtere eventet, der hvor eventet sker -> Altså i cmdKnap_Click()!!!

Du kunne for eksempel lave en funktion, der hedder

Public Sub ShowButtonChoice(Number as Integer)
  MsgBox \"Button number \" + CStr(Number) + \" is pushed!\"
End Sub


Når en knap så trykkes på kaldes funktionen ShowButtonChoice med nummeret som parameter!

Måden du gemmer hvilket nummer knappen har kan gøres på flere måder!

Du kunne hardcode det så du ved Knap1 har nummeret 1 og Knap2 har nummeret 2 og så fremdeles! Jeg tror ikke at du kan komme uden om det på anden vis da det ikke kan lade sig gøre at lave Kontrollerede Arrays som det er muligt i VB! Her får du direkte det index knappen har i Arrayet at vide i Event handleren!





Avatar billede cktarget Nybegynder
29. september 2000 - 14:48 #18
Hvad er det helt præcist for nogle knapper det drejer sig om, er det de forud defineret knapper i excel, eller er det nogle knapper du har defineret i vba, på en form?

Mvh Kedde
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
Kurser inden for grundlæggende programmering

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

Seneste spørgsmål Seneste aktivitet
I går 21:00 Libre Office Impress Af Frank i Andre styresystemer
I går 11:47 VB script Af Jenshentze i Word
I går 11:21 Popup ved opstart Af mort1 i Windows
04/0918:50 Slet lokal konto Af ErikHg i Windows
04/0916:05 Ændre tal i en celle Af xvid i Excel