Avatar billede cbkc Nybegynder
24. oktober 2006 - 21:11 Der er 10 kommentarer og
1 løsning

Auto generere kode i et modul fra et andet modul

Hvordan indsætter man automatisk kode i et modul, eller Excel object?

.. altså hvis man feks afhængigt af brugerens valg får brug for at indsætte kode, eller ændre kode i et modul bag et ark.

.. det skal altså køre fra koden i et andet modul


.. alternativt skal jeg arbejde med en del skjulte ark, som jeg så kopiere ud, afhængigt af bruger
Avatar billede gider_ikke_mere Nybegynder
24. oktober 2006 - 21:55 #1
Hvorfor dog gøre det? Den kode du indsætter i et arks modul kan kun køres fra dette. Hvis indsætter et modul i "Modules", kan koden afvikles fra alle ark.

I modulet for ark1

sub test
kørkode
end sub

I Module1

sub kørkode()
'noget kode her.
End Sub
Avatar billede learningvba Nybegynder
25. oktober 2006 - 08:02 #2
Kig på denne side:
http://www.cpearson.com/excel/vbe.htm

Vær opmærksom på at makro-sikkerheden skal justeres, så der bliver givet adgang til Visual Basic-project.
Avatar billede gider_ikke_mere Nybegynder
25. oktober 2006 - 08:29 #3
Ja, det kan lade sig gøre, men skal vi ikke lige finde ud af hvorfor han vil gøre det. Måske skyldes det en manglende forståelse for mulighederne i VBA.
Avatar billede cbkc Nybegynder
25. oktober 2006 - 10:38 #4
Ja, ja - har ikke set på http://www.cpearson.com/excel/vbe.htm endnu - men den umiddelbare årsag er at jeg gern evil undgå at have en masse skjulte ark liggende i en Excel til distribution

Funktionaliteten i nogle ark, medfører at når brugeren klikker på bestemete celler med indhold, så skal der vises nogle informationer, altså at en macro skal aktiveres. Problemet er bare at arket/arkene først oprettes under brug - og det er ikke videre smart at bede brugeren om at kopiere kode rundt i VBE'en.

Min umiddelbare mulighed, er at oprette alle eventualiteter på forhånd, og placere dem i hvert sit skjulte ark, som så kopieres ud under brug. Det mener jeg bare ikke er en særlig fed løsning, da en serie af skjulte ark på et tidspunkt kan give problemer enten med vedligeholdelse, eller hvis en bruger pludselig "finder" disse ark. Derfor søger jeg en løsning, hvor jeg fra kode kan oprette kode.

... ellers takker jeg for den hurtige respoins :-)
Avatar billede cbkc Nybegynder
25. oktober 2006 - 11:55 #5
learningvba - tak for linket, alt hvad jeg behøver -hvis du poster et svar, så acceptere jeg.

Takker for interessen

Mvh.
Chr.
Avatar billede gider_ikke_mere Nybegynder
25. oktober 2006 - 17:33 #6
Jamen, så har du ikke forstået hvad jeg skrev. Du kan sagtens have makroer liggende som fungerer, både i gamle og nye ark!!
Avatar billede cbkc Nybegynder
25. oktober 2006 - 18:20 #7
akyhne - det ændre ikke på, at jeg skal arbejde med skjulte ark. Med mulighed for at skrive kode direkte i et ark's modul, får jeg større fleksibilitet. Selvfølgelig har du en pointe i, at hvis det er den samme sekvens, der skal afvikles fra flere ark, så er det mere korrekt at ligge den i et modul - og så kalde den fra arket, hvorved man kan nøjes med at kopiere et enkelt ark ud. Det er bare ikke tilfældet - og så ønsker jeg stadig at undgå at kopiere ark rundt.

Bare lige for at understrege - så var det metoden fra linket jeg søgte.

Men for det tilfælde at jeg stadig misser noget genialt - så vil jeg smide koden ind, så i kan se den, Men det bliver først når jeg er tilbage på min arbejspc :-)
Avatar billede gider_ikke_mere Nybegynder
25. oktober 2006 - 18:29 #8
Det er helt ok. Det er bare tit folk forespørger noget, hvor de er ved at bevæge sig ud på dybt vand, fordi de ikke ved hvad de laver. Det er nogen gange svært at opfatte hvor meget kendskab folk selv har, til et aktuelt problem.
Avatar billede cbkc Nybegynder
25. oktober 2006 - 18:53 #9
Helt rigtigt :-) Det er måske også lidt overkill, det jeg har gang i - men giver brugerne nogle ret fede fordele.
Avatar billede learningvba Nybegynder
26. oktober 2006 - 08:24 #10
Jeg er glad for at du kunne bruge siden/linket, selv har jeg haft stor hjælp fra den side.

Jeg er dog lidt enig med akyhne om at det ikke er specielt god skik :-), at lade kode rette kode, og en mulighed kunne måske være at benytte AddIns, som så ligger et centralt sted ?
Avatar billede cbkc Nybegynder
26. oktober 2006 - 11:28 #11
Sub AddProcedure_TextBox(sSheetName As String, rRange As String)

Dim VBCodeMod As CodeModule
Dim LineNum As Long

Set VBCodeMod = ThisWorkbook.VBProject.VBComponents(sSheetName).CodeModule
With VBCodeMod
    LineNum = .CountOfLines + 1
    .InsertLines LineNum, _
"Private Sub Worksheet_SelectionChange(ByVal Target As Range)" & Chr(13) & _
" If Not Intersect(Target, Range(""" & rRange & """)) Is Nothing Then " & _
" Call  DisplayContent " & Chr(13) & _
"End Sub"
End With


End Sub

Sub DisplayContent()
    With Selection.Validation
        .Delete
        .Add Type:=xlValidateInputOnly, AlertStyle:=xlValidAlertStop, Operator:=xlBetween
        .IgnoreBlank = True
        .InCellDropdown = True
        .InputTitle = "Deadline: " & Selection.Offset(0, 1).Value
        .ErrorTitle = ""
        .InputMessage = Selection.Value
        .ErrorMessage = ""
        .ShowInput = True
        .ShowError = True
    End With
End Sub



Selvfølgelig kan man også bare justere bredde og wrappe teksten....
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





White paper
Tidsbegrænset kampagne: Overvejer du at udskifte eller tilføje printere i din forretning? Vi kan tilbyde én eller flere maskiner gratis