Avatar billede brynil Nybegynder
20. april 2003 - 18:42 Der er 22 kommentarer og
1 løsning

Reference til objekt

Hej!

Hvordan refererer jeg i 2den With sætning til knappen som dannes herunder? Jeg skal skrive kodelinier til knappen!


Dim Line As Integer

Set NyKnap = Sheets("Aktuel").OLEObjects.Add("Forms.commandbutton.1")

With NyKnap
    .Name = "cmdNavn"
End With


With ???????????????

End With
Avatar billede sjap Praktikant
20. april 2003 - 18:50 #1
Det vil sige at

With NyKnap

End With

ikke længere fungere - eller hva'?
Avatar billede brynil Nybegynder
20. april 2003 - 18:54 #2
Jo den er fin nok. Jeg har kun skrevet en enkelt linie der formatterer knappen.

I 2den With linie skal stå noget lignende:

With TempForm.codemodule
    Line = .countoflines
    .insertlines Line + 1, "Sub cmdGemNavn_Click()"
    .insertlines Line + 2, ""

...som er taget fra en anden With. Forskellen er at NyKnap ligger direkte i arket. Det gør den eksemplet her ikke. Det ligger i en uForm og det har jeg ikke haft problemer med.
Avatar billede sjap Praktikant
20. april 2003 - 19:01 #3
Uha der stod jeg godt nok lige af igen. Der er vist kommet ud noget som jeg ikke har prøvet før (jeg har aldrig set ordet "codemodule" før).

Så jeg må nok hellere stå af her, men indtil der dukker andre op kan du eventuelt lige se på:

http://support.microsoft.com/search/default.aspx?Catalog=LCID%3D1033%26CDID%3DEN-US-KB%26PRODLISTSRC%3DON&withinResults=&QuerySource=gASr_Query&Product=xlw&Queryc=codemodule&Query=codemodule&KeywordType=ANY&maxResults=25&Titles=false&numDays=

God fornøjelse. :-)
Avatar billede brynil Nybegynder
20. april 2003 - 19:02 #4
Kigger lige :-)
Avatar billede brynil Nybegynder
20. april 2003 - 19:20 #5
Det er også ret nyt for mig. Der var ikke rigtig noget hos MS som jeg på nuværende stade kan bruge.
Jeg lægger en form under knapperne istedet. Det har jeg da fået til at virke før.
Tak for interessen, superjap!
Avatar billede sjap Praktikant
20. april 2003 - 19:40 #6
Skulle det være en anden gang...  - så prøv med noget jeg kan!  :-)
Avatar billede brynil Nybegynder
20. april 2003 - 19:44 #7
Helt sikkert - jeg fiser så meget rundt, at jeg jævnligt misser det mere grundlæggende. Desværre måske, men ellers synes jeg ikke det er sjovt! :-)
Avatar billede bak Forsker
20. april 2003 - 21:19 #8
brynil -> hvad er det præcis du vil lave ?
Så vidt jeg kan se, er der du er ved at lave, automatisk at generere og indsætte en kode til knappen, hver gang din kodestump køres . Er det virkelig meningen? eller vil du bare lave kode til en knap. Der er stor forskel her.
Avatar billede brynil Nybegynder
20. april 2003 - 23:11 #9
Sorry bak - jeg har været helt væk.
Det jeg er ude efter er at kunne køre en 'installation' af et regneark og i den forbindelse, generere koden til knapper der er placeret på selve arket.

Jeg har ikke haft problemer med v hj af kode at danne forme med listbokse, knapper osv, som kan køres selvstændigt. Så sku jeg til at lave permanente knapper på selve arket, der kan kalde disse, men har ikke været istand til at finde en måde til at skrive kode til andet end et modul.

Fex bruger jeg dette:

Set NewTextBox = TempForm.designer.Controls.Add("forms.textbox.1")
With NewTextBox
    .Top = 10
    .Left = 50
    .Width = 100
    .Height = 20
    .Name = "txtNavn"
End With

With TempForm.codemodule
    Line = .countoflines
    .insertlines Line + 1, "Sub cmdGemNavn_Click()"
    .insertlines Line + 2, ""
    .insertlines Line + 3, "'trim det indtastede til brug i range"
    .insertlines Line + 4, "Dim NytNavn, trimNytNavn, FindHvad As String"
    .insertlines Line + 5, "Dim Placering, i, x As Integer"
    .insertlines Line + 6, ""
.....

Jeg har bare ikke kunnet finde ud af, hvordan jeg gør det samme når jeg skal skrive kode til et element på arket.

Gjordet det dig lidt klogere? - Jeg er efterhånden selv i tvivl om jeg er blevet det.

Det jeg nævnte for superjap om at lave det med en bagvedliggende for gav et andet problem. Så ku jeg ikke tilgå selve arket, medens formen med knapper var fremme. Men det ku måske løses.

superjaps henvisning viste sig ved nærmere eftersyn at indeholde nogle interessante oplysninger om hvordan man kan danne regneark mm fra en tekst-fil. Men er lidt usikker på, om metoden også omfatter knapper o.l. på arket :-)(
Avatar billede brynil Nybegynder
20. april 2003 - 23:41 #10
Hvis der er nogen forslag er de mere end velkomne.  Og hvis der er tale om et større arbejde forøger jeg selvfølgelig points'ne - men først imor'n. 13 timer er squ nok for idag.
Avatar billede bak Forsker
21. april 2003 - 11:07 #11
Her er mit forslag. Det opretter en knap og en tilhørernde kode i Ark1

Sub AddProcedure2()

Dim VBCodeMod As CodeModule
Dim LineNum As Long
Dim line
Dim but As Object
Set but = Sheets("Ark1").OLEObjects.Add(ClassType:="Forms.CommandButton.1", Link:=False _
        , DisplayAsIcon:=False, Left:=183.75, Top:=97.5, Width:=131.25, Height _
        :=27.75)
but.Name = "cmdGemNavn"

Set VBCodeMod = ThisWorkbook.VBProject.VBComponents("Ark1").CodeModule
With VBCodeMod
    line = .CountOfLines
    .InsertLines line + 1, "Sub cmdGemNavn_Click()"
    .InsertLines line + 2, ""
    .InsertLines line + 3, "'trim det indtastede til brug i range"
    .InsertLines line + 4, "Dim NytNavn, trimNytNavn, FindHvad As String"
    .InsertLines line + 5, "msgbox(""test"")"
   
    .InsertLines line + 6, "End Sub"
End With

End Sub
Avatar billede bak Forsker
21. april 2003 - 11:09 #12
Husk lige under VBA - Tools - References at afkrydse "Microsoft Visual Basic For Applications Extensibility 5.3"
Avatar billede brynil Nybegynder
21. april 2003 - 11:11 #13
Jeps - den har jeg. Prøver den lige.
Avatar billede brynil Nybegynder
21. april 2003 - 11:42 #14
Bortset fra at linien:

but.Name = "cmdGemNavn"

..ingen effekt har, så er det lige det jeg har brug for. Takker for det, bak.

Det med navnet har jeg haft problemer med før. Kender du en løsning på det?
Bl.a. er det ikke lykkedes mig at ændre navn på en form v hj af kode. Men det er ikke et væsentligt problem.
At ændre navn på en knap er mere interessant, for at undgå at skulle beregne navnet ud fra kørslen.

Husk et svar til points :-)
Avatar billede bak Forsker
21. april 2003 - 11:50 #15
Jo, det burde have en effekt, for det er det der knytter koden og knappen sammen. Uden den linie ville knappens (interne) navn have været CommanButton1 og så vil den ikke køre en sub der hedder Sub cmdGemNavn_Click.

hvis du mener det der skal stå på knappen, kan jeg ikke lige huske hvordan det sættes på, man det er nok noget med Caption.
Avatar billede brynil Nybegynder
21. april 2003 - 12:00 #16
Hmm - Jeg kører din kode fra et modul og koden oprettes korrekt med cmdGemNavn i Ark1.
Egenskaber siger CommandButton1 og der er ingen reaktion ved klik på knappen.
Avatar billede brynil Nybegynder
21. april 2003 - 12:14 #17
Jeg er nødt til at løbe i et par timer - familiebesøg - så arbejder jeg videre med problemet.
Fortsat go' påske!
Avatar billede bak Forsker
21. april 2003 - 12:16 #18
For at få sat navn på knappen skriv:

but.Object.Caption = "Vis box"
Avatar billede brynil Nybegynder
21. april 2003 - 12:24 #19
Ja - men det er jo Caption. Problemet er Navnet.
Vi snakkes ved. Løber nu!
Avatar billede bak Forsker
21. april 2003 - 13:48 #20
Jeg er ikke helt med nu. Dette fungerer fint for mig.
Navnet bliver cmdGemNavn og teksten på knappen bliver Vis Box.
Makroen lægges også fint ind i Ark1 og knappen kan køre makroen.


Sub AddProcedure2()

Dim VBCodeMod As CodeModule
Dim LineNum As Long
Dim line
Dim but As Object
Set but = Sheets("Ark1").OLEObjects.Add(ClassType:="Forms.CommandButton.1", Link:=False _
        , DisplayAsIcon:=False, Left:=183.75, Top:=97.5, Width:=131.25, Height _
        :=27.75)
but.Name = "cmdGemNavn"
but.Object.Caption = "Vis box"

Set VBCodeMod = ThisWorkbook.VBProject.VBComponents("Ark1").CodeModule
With VBCodeMod
    line = .CountOfLines
    .InsertLines line + 1, "Sub cmdGemNavn_Click()"
    .InsertLines line + 2, ""
    .InsertLines line + 3, "'trim det indtastede til brug i range"
    .InsertLines line + 4, "Dim NytNavn, trimNytNavn, FindHvad As String"
    .InsertLines line + 5, "msgbox(""test"")"
   
    .InsertLines line + 6, "End Sub"
End With

End Sub
Avatar billede brynil Nybegynder
21. april 2003 - 16:18 #21
Hvis du ikke anvender Excel97, så beklager jeg at jeg har forårsaget det ekstra arbejde for dig bak, for jeg kan få den til at køre i XP.

Jeg har ikke været smart nok til at angive, at jeg arbejder i 97, da det er det program vi anvender på arbejdet.

Nå - men det ser ikke ud til at køre i '97. (Håber ikke du kører '97)
Avatar billede bak Forsker
21. april 2003 - 19:27 #22
Denne version kan køre i XL97. Bemærk at hvis din computer er lidt langsom 100mhz eller deromkring kan der godt ses lidt hoppen rundt i skærmbilleder.

Sub AddProcedure97()

Dim VBCodeMod As CodeModule
Dim Line As Long
Dim Knap As OLEObject
Application.ScreenUpdating = False

Set Knap = ThisWorkbook.Sheets("Ark1").OLEObjects.Add(ClassType:="Forms.CommandButton.1", Link:=False _
        , DisplayAsIcon:=False, Left:=183.75, Top:=97.5, Width:=131.25, Height _
        :=27.75)
'Knap.Name = "cmdGemNavn"
Knap.Object.Caption = "Vis box"

Set VBCodeMod = ThisWorkbook.VBProject.VBComponents("Ark1").CodeModule

With VBCodeMod
    Line = .CreateEventProc("Click", Knap.Name)
    .InsertLines Line + 2, " "
    .InsertLines Line + 3, "'trim det indtastede til brug i range"
    .InsertLines Line + 4, "Dim NytNavn, trimNytNavn, FindHvad As String"
    .InsertLines Line + 5, "msgbox(""test"")"
End With
Application.VBE.MainWindow.Visible = False
Application.ScreenUpdating = True
End Sub
Avatar billede brynil Nybegynder
21. april 2003 - 20:00 #23
Ja - men den ku også køre før, når Knap.Name ikke var med. Det er dén linie der giver problemer, også i denne version. ;-)
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