25. september 2000 - 11:58Der 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.
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.
\'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
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.
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?
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
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!
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
Synes godt om
Ny brugerNybegynder
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.