26. januar 2015 - 00:02Der er
36 kommentarer og 1 løsning
Visual basic i outlook 2013 exel
ang. Excel 2013: Jeg vil gerne bruge markeringen til/fra ved hjælp af "Flueben" i en makro. jeg kan vælge "flueben" under Udvikler/indsæt - men hvordan kommer fluebenet i forbindelse med mit program?
IT-GuFFE Ja, jeg tror at det er noget i den retning
Når jeg indsætter dit forslag i mit program så får jeg fejlmeddelelsen: Compile error: Expected End Sub
det forstår jeg ikke? der er jo et End Sub i dit forslag=
Når jeg indsætter fluebenet på min side får jeg ingen oplysning om hvad det hedder programmeringsmæssigt kun at det hedder "Afkrydsningsfelt" et navn jeg kan ændre?
Du må vist starte helt forfra med at forklare de enkleste grundregler - suk.
Fint, det nærmer sig. Nu har jeg fundet Checkbox under Declarations Jeg har indsat din kode i mit program. Men der sker ikke andet end at jeg stadig får fejlmeddelelsen: Compile error: Expected End Sub Noget gør jeg galt. Hvad er det?
Så kan jeg ikke se CheckBox under "Generelle". Nedenstående er min makro med din programstump indsat og her kan jeg se CheckBox under "Generelle" Jeg håber du kan finde hoved og hale i det ;-)
Sub Oversigt() ' ' Oversigt Makro ' aflæser det aktuelle område i start linje og slut linje 'at forstå således at startlinjens pålydende skal tillægges dybden 'og dette sker automatisk. '
'
buk = Worksheets("tal").Cells(6, 9) 'start linie byk = Worksheets("tal").Cells(6, 11) 'slut linie bik = Worksheets("tal").Cells(2, 12) 'Dybde sva = (bik * 4) + 17 svb = 0: udvekst = 0 bumsk = buk + bik en = 0: tox = 0: tre = 0: fire = 0: fem = 0: seks = 0: syv = 0
Private Sub CheckBox1_Change() 'din programstump If CheckBox1.Value = True Then MsgBox ("Valgt") Else MsgBox ("Ikke valgt") End If End Sub
For svb = bumsk To byk 'på sigt skal CheckBox slå noget af nedenstående fra og til For udvekst = 11 To sva If Worksheets("tal").Cells(svb, udvekst) = 1 Then en = en + 1 If Worksheets("tal").Cells(svb, udvekst) = 2 Then tox = tox + 1 If Worksheets("tal").Cells(svb, udvekst) = 3 Then tre = tre + 1 If Worksheets("tal").Cells(svb, udvekst) = 4 Then fire = fire + 1 If Worksheets("tal").Cells(svb, udvekst) = 5 Then fem = fem + 1 If Worksheets("tal").Cells(svb, udvekst) = 6 Then seks = seks + 1 If Worksheets("tal").Cells(svb, udvekst) = 7 Then syv = syv + 1
Next udvekst Worksheets("tal").Cells(svb, udvekst + 1) = en Worksheets("tal").Cells(svb, udvekst + 2) = tox Worksheets("tal").Cells(svb, udvekst + 3) = tre Worksheets("tal").Cells(svb, udvekst + 4) = fire Worksheets("tal").Cells(svb, udvekst + 5) = fem Worksheets("tal").Cells(svb, udvekst + 6) = seks Worksheets("tal").Cells(svb, udvekst + 7) = syv
en = 0: tox = 0: tre = 0: fire = 0: fem = 0: seks = 0: syv = 0 'Stop Next svb
Ahhh det giver mere mening så, du kan ikke oprette en sub inde i en sub.
Det bedste er nu også hvis du kunne finde checkboxen oppe i (General) og så vælge change i boksen til højre fordi så ved du at du får den rigtige checkbox..
Men var det ikke meningen, du ville have den til at gøre noget når din checkbox bliver skiftet? Sådan som jeg ser din kode, så ser det mere ud til at du er ved at aflæse om den er afkrydset eller ej? i så fald har du ikke brug for mere end
If CheckBox1.Value = True Then MsgBox ("Valgt") Else MsgBox ("Ikke valgt") End If
Mystikken breder sig. Når jeg indskriver dit sidste forslag (uden sub) i min kode sker der ikke noget. Når jeg så tjekker i "Declarations" så kan jeg IKKE se min checkbox? Det er noget helt elementært forkert. Jeg fatter ikke en dyt.
Når du er inde i dit VBA - er din VBA kode så under det Ark, hvor du har oprettet din Checkbox?
Du kan kun se Checkboxen i Deleration fordi du har indsat den som en Sub, hvis du IKKE kan se Checkboxen i (General) menuen, så får du det ikke til at virke på denne måde.
Det er vigtigt at det er under arket du kigger i VBA, ellers så vil du ikke kunne finde din Checkbox under (General).
Det er også vigtigt at din Checkbox er oprettet som et ActiveX object, ellers så vil du heller ikke kunne finde den.
Det giver rigtig god mening :-) Mit program ligger i et modul, ikke under noget ark Ceckboxen er anbragt på et ark og den er ikke aktiveX men "det andet format" der ligger lige over aktive X. Skal jeg skrive hele programmet om, dvs anbringe det under et specifikt ark? Det vil jeg helst ikke, da det vil give en masse redigering i en større sag programmet er en del af. Suk støn Forslag ?
Altså Checkboxen skal ihver fald laves om ;) - men VBA koden må gerne ligge i et modul for sig selv, men du kan ikke styre Checkbox Change i et modul, så vidt jeg ved. Men du kan jo godt få fat i værdien fra den, så skal du bare indtaste navnet på arket.
Sub Test() MsgBox (Sheets("Ark1").CheckBox21.Value) End Sub
Du kan jo også kalde en sub fra din checkbox_Change
Private Sub CheckBox21_Change() Module1.Test End Sub
Jeg undres. Når jeg gør som du siger og forsøger at indsætte en ChedkBox i mit ark mislykkes det. Jeg gør følgende: klikker på Udvikler. Klikker på Indsæt og klikker på ActiveX Checkboksen...... jeg får et curser+ og når jeg klikker for at indsætte får jeg fejlmeddelelsen: "kan ikke indsætte objektet" i formellinjen står: =INTEGRER("Forms.CheckBox.1";"") Ovenstående forsvinder når jeg klikker på fejlboksens ok Hvad er galt?
"From other forums, I have learned that it is due to the MS Update and that a good fix is to simply delete the file MSForms.exd from any Temp subfolder in the user's profile. For instance:
Jeg har geninstalleret hele Outlook og oprettet et helt tomt ark i en ny fil, og jeg får samme svar. Jeg har også slettet de filer du har anbefalet - og det virker nu. Jeg kan indsætte en ActiveX box. Nu mangler jeg bare at få det til at fungere i mit ark. Desværre er det sådan at når jeg indsætter din programstump:
If CheckBox1.Value = True Then MsgBox ("Valgt") Else MsgBox ("Ikke valgt") End If Så bilver teksten rød:
MsgBox ("Valgt") Else MsgBox ("Ikke valgt")
Det virker altså ikke. Når jeg kikker under mit nye ark kan jeg ikke se nogen Declarations. Det eneste valg er Click med en hel række muligheder . Den første er: Drag over Dvs. det virker ikke af en eller anden grund så har du nogle forslag til det?
Kan du se Checkbox i den venstre menu nu? Der hvor der står (General) normalt? Det lyder til at du har valgt noget i den venstre menu, ellers ville du ikke få mulighederne click osv.
Hvis du kan se checkboxen, så kan du også se hvad navnet er på den. Det er ikke sikkert den hedder Checkbox1, min kommer til at hedde Checkbox21 som standard, jeg havde bare ændret navnet på den, for at gøre det nemmere.
Mit gæt er at du ikke har en checkbox som hedder CheckBox1.
Jeg har startet et helt nyt regneark med lidt kode for ikke at "forurene" det projekt jeg er i gang med. Min Checkbox starter også ved 21 (underligt). Jeg kan ikke se andet end "Generelt" i venstre vindue, jeg kan altså ikke kludre ved at vælge noget og i højre vindue kan jeg kun se sub-navnet og declaration som af uransagelige grunde dukkede op da jeg skrev lidt anden kode ud over din program stump som jeg så gerne bare vil have til at virke. Men der sker ikke noget når jeg klikker på declaration.
måske skulle jeg starte trin for trin med et helt frisk ark?
Det kunne godt være du skulle prøve et nyt ark :) men når du er inde i selve koden, står du så under "Ark1" eller står du under "Denne_projektmappe" ?? For hvis du har indsat checkboxen i "Ark1" så SKAL det være under Ark1 at du kigger i "Generelt" og der har jeg altså aldrig været ude for at den ikke viser sig :)
Jeg har oprettet en helt frisk jomfruelig fil. Jeg har indsat CheckBox21 et sted i regnearket ARK1 I Visual Basic åbner jeg Ark1. Jeg ser i højre kommandolinje (General) og i venstre (Declarations). Selve kommandovinduet er tomt. klikker på CheckBox21 i venstre kommandolinje (generelt) og teksten Private Sub CheckBox 21_Click() .......End Sub fremkommer . Click ses i højre kommandolinje. Jeg indsætter din kodestump lige under Private Sub CeckBox21_Click: og lige før End Sub.
If CheckBox21.Value = True Then MsgBox ("Valgt") Else MsgBox ("Ikke valgt") End If
Dette resultere i at kodestumpen bliver rød Hvad sker der. Man kan da dårligt komme mere "back to basic" end dette. Jeg vil så gerne have boksen til at virke bare på en eller anden måde ;-)
Private Sub CheckBox21_Click() If CheckBox21.Value = True Then MsgBox ("Valgt") Else MsgBox ("Ikke valgt") End If End Sub
Som gerne skulle ligne din, så virker det uden problemer her hos mig. Har du været ved at ændre på nogen sikkerhedsindstillinger eller andet sjovt i indstillinger? :)
Den skriver ikke hvilken linje den brokker sig over eller noget ?
HURRA. Jeg gik ind i min jomfruelige fil og valgte Visual Basic. Her fjernede jeg omhyggeligt ALT Og indsatte din kodestump med både Private Sub CheckBox21_Click og End Sub Og, OH en lysstråle oplyste mit frustrerede sind - og se. Det virker.
Nu skal festen begynde. Kan jeg få det til at virke i mit eget program. Nu skal festen begynde. Kan jeg få det til at virke i mit eget program. Jeg har indsat en CheckBox21 på min side der hedder "Reducer" (programmet skal ende med at reducere en hel masse)
VB Venstre programlinje hedder (Generel) og højre heder (LoadAlt) - Det hedder min makro og den er i mit modul 11 Indsætter jeg programstumpen farves teksten rød. Sikkert fordi jeg ikke kan finde nogen CheckBox21 noget sted, heller ikke under (declarations) Skriver jeg din programstump af får jeg denne fejlmeddelelse når jeg køre mit program: Runtime error 424 Object Required Og klikker jeg på Debug får jeg en gul linje: If CheckBox21.Value = True Then Hvordan finder vi fejlen?
Når du arbejder i dit modul 11, så bliver du nød til at fortælle hvor din checkbox21 er henne.
Altså ved at skrive f.eks. Sheets("Ark1").CheckBox21.Value - så får du enten true eller false
I dit tilfælde er det jo nok :
Sub TestFangCheckBoxFraModul() MsgBox (Sheets("Reducer").CheckBox21.Value) End Sub
Men du er med på, at hvis din makro skal køre efter man trykker på checkboxen - så skal man bruge et event fra checkboxen til at starte makroen? :) men hvis du bare skal bruge værdien så kan du gøre det sådan som du gør her.
Dybt Frustreret Suk. Jeg er nu vendt tilbage til min jomfruelige fil hvor jeg i "Ark1" har lagt den fungerende kode som nu virker. Jeg har så lavet en Makro1 (modul1) der gerne skulle kunne indeholde og anvende koden Det er sådan ud:
Sub Makro1()
'if Sheets(Ark1").CheckBox21.Value= True Then 'slår jeg linjen til så bliver alt rødt MsgBox ("Valgt af mig") Else MsgBox ("Ikke valgt af mig") End If
Hurra Det virker. :-) :-) :-) og så det lange :-) Hvordan kan jeg erstatte MsgBox ("Valgt af mig") med en variabel f.eks a=1 og MsgBox ("Ikke valgt af mig") med a=2 Det skal styre noget længere nede i programmet.
Og én ting til
"Men du er med på, at hvis din makro skal køre efter man trykker på checkboxen - så skal man bruge et event fra checkboxen til at starte makroen? :)" Hvordan det? Jeg vil gerne have startet et program i et andet modul?
Det giver fin mening. Jeg er helt med på "hovedmakro" skal køre, når man trykker på checkboxen. Men jeg vil også gerne kunne starte afviklingen af en makro altså: "hovedmakro eller anden makro" skal køre, når man trykker på checkboxen. Hvordan kan man det ?
Men det jeg havde tænkt mig fra starten af var, at når jeg loadede projektet var der sat flueben i CheckBox21 i Ark1 og dette udløste et kald til modul3 hvor der ligger et program der gerne skulle køres samtidig med atArk1 køres.
Mig: I VB venstre komandolinje finder jeg Worksheet og under højre komandolinje finder jeg Activate. Jeg indskriver: Private Sub Worksheet_Activate() CheckBox23.Value = True Call Module3.Activate 'problemet er at jeg ikke aner hvor der er en oversigt over funktioner jeg kan skrive her End Sub ovenstående virker naturligvis ikke - hvad kan jeg gøre Jeg går ud fra at jeg ikke kan bruge de funktioner der beskrives i højre komandolinje ?
I VB klikker jeg på Denne_projektmappe Her har jeg det samme problem. Jeg mangler viden om funktioner.
Nu skal du jo lave et call over til den sub/funktion du skal bruge, den skulle du meget gerne vide hvad hedder da ;)
Hvis du har en sub f.eks. så istedet for at kalde den private sub, så prøv og kalde den public sub. Så skulle den gerne komme som forslag når du skriver "Call Modul3."
Helt ned til benet.. det jeg vlle med Call Module3.EnEllerAndenFunktion <- "EnEllerAndenFunktion" skiftes ud med den makro/sub/funktion kald dem hvad du vil, som du har til at ligge i din Modul3 :)
Det virker :-) Men en lille detalje: Jeg har nu lavet forskellige checkbokse og forskellige moduler for at øve de forskellige funktioner på samme projekt. Min CheckBox24 er den boks der aktiveret med flueben skal starte min makro5 der ligger i mit modul5 der skriver en tekst som svar i mit ark1. Men når jeg omhyggeligt har sørget for at ChekBox24 ikke har flueben, og projektet bliver lukket ned, så sker flg. Ved start af projektet aktiveres macro5 og det skal den ikke. Samtidig er checkbox24 forsynet med flueben helt af sig selv? Programmet i projektmappen ser således ud:
Private Sub Workbook_Open() Sheets("Ark1").CheckBox24.Value = True Call Module5.Makro5 End Sub
Det samme problem har jeg i når jeg aktivere ark1. Når jeg på mit Ark1 har fjernet fluebenet i min CheckBox23 går jeg til mit Ark2 der er helt tomt. Når jeg vender tilbage og klikker på Ark1 så dukker mit flueben op helt af sig selv og min makro4 startes.
Hvis du ikke vil have den til at sætte flueben i CheckBox24 eller starte din Module5.Makro5, så skal du nok ikke bruge Workbook_Open ;) den gør jo præcis hvad du har bedt den om, sætte flueben og starte Module5.Makro5 når du åbner projektmappen.
Private Sub Workbook_Open() Sheets("Ark1").CheckBox24.Value = True Call Module5.Makro5 End Sub
Har du brugt Worksheet.Activate på Ark1 og Ark2 ? Det sker jo når du aktivere arket, så kører den makroen.
Hvis ikke du vil have den til det, så skal du have gang i nogen IF'er, for at beskrive hvornår den skal og ikke skal køre ;)
Sådan som du beskriver din kode, ser jeg ingen fejl - den gør jo præcist hvad du har bedt den om ;) men jeg kan ikke se hvad du har gjort med Ark1 & Ark2.
Hvis du ikke vil have den til at sætte flueben i CheckBox24 eller starte din Module5.Makro5, så skal du nok ikke bruge Workbook_Open ;) den gør jo præcis hvad du har bedt den om, sætte flueben og starte Module5.Makro5 når du åbner projektmappen.
Private Sub Workbook_Open() Sheets("Ark1").CheckBox24.Value = True Call Module5.Makro5 End Sub
Har du brugt Worksheet.Activate på Ark1 og Ark2 ? Det sker jo når du aktivere arket, så kører den makroen.
Hvis ikke du vil have den til det, så skal du have gang i nogen IF'er, for at beskrive hvornår den skal og ikke skal køre ;)
Sådan som du beskriver din kode, ser jeg ingen fejl - den gør jo præcist hvad du har bedt den om ;) men jeg kan ikke se hvad du har gjort med Ark1 & Ark2.
Naturligvis :-) hvorfor tænke selv når man kan få andre til at tænke for sig ;-) ;-) Jeg har nu tumlet med diverse if..then..else osv og nu virker alt helt som jeg forventede. Derfor skal du, it-Guffe, have stor tak for din hjælp med denne tour de force i CheckBoxens indre verden. Tak for din meget store tålmodighed. Sender du et svar så overføre jeg straks point. Mange tak.
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.