vba code om data toe te voegen in een macro

Status
Niet open voor verdere reacties.

martenbergmans

Gebruiker
Lid geworden
23 nov 2009
Berichten
7
Beste,

Ik werk momenteel met macro's in excel die gemaakt zijn in vba code.

Graag wil ik data uit een excelsheet toevoegen op bepaalde plaatsen in de code van een bestaande macro.

Is dit mogelijk?

Daarnaast zou ik ook graag willen weten of het mogelijk is om middels een inputbox, data (uit de inputbox) toe te voegen op bepaalde plaatsen in de code van een bestaande macro.

Is dit mogelijk?

Mocht mijn vraag niet heel duidelijk zijn, dan hoor ik het graag.

MVG

Marten
 
Ik denk dat u heel moeilijk denkt.

Een macro is op zichzelf een soort van functie.
En functies kun je variabelen meegeven.

dus ik zou het anders doen door een functie te maken waarbij u een of meerdere variabele opgeeft.
Deze waarden worden dan in de functie opgenomen en verwerkt.

Bijvoorbeeld:

Code:
Function dhTekstsamenvoegen(str1 as string, str2 as string)

dhTekstsamenvoegen=str1 & str2

End function

msgbox(dhTekstsamenvoegen("Appel"," en Peer")

Grt,

XLFAC
 
Laatst bewerkt door een moderator:
Beste xlfac,

Bedankt voor je reactie. Echter ik wil graag weten of het mogelijk is en zo ja op welke manier.

De manier die jij aanreikt gaat in mijn situatie niet tot de oplossing leiden die ik voor ogen heb.

Gr. Marten
 
Beste Marten,

U schrijft het o.a. het volgende: "... data (uit de inputbox) toe te voegen op bepaalde plaatsen in de code van een bestaande macro ..."
Hoe moet ik dit zien eigenlijk? Want ik kan dit op twee manieren intepreteren:
1) de waarde wordt letterlijk in de code van de macro verwerkt. Hiermee bedoel ik dat de macrocode heel anders kan worden dan voorheen.
Is het mogelijk? ja , ik denk het wel, omdat je met vba zelf een code kan aanmaken in een module, userform etc.
Voorbeeld hiervan zijn dynamische userforms waarbij knoppen tijdens het opstarten van de userform aangemaakt worden en de daarbij behorende code ook
2) zoals eerder besproken: variabele meegeven aan een functie.

Dus mijn antwoord: Volgens mij kan beide(weet wel zeker).

Grt,

XLFAC
 
Beste XLFAC,

Wat ik inderdaad bedoel heb je omschreven bij punt 1.

Het enige wat mij nog rest te vragen is, hoe ziet de code eruit om die data toe te kunnen voegen in reeds bestaande code/macro.

Alvast bedankt voor de tijd en moeite.

Groeten,

Marten
 
Plaats je code hier en geef aan welk resultaat je wil bereiken.
 
Dat wordt lastig aangezien de code nog gemaakt dient te worden. Ik wil graag eerst weten of het kan en hoe en dan kan ik zelf wel de code aanpassen. Maar we kunnen dit ook fictief doen. Stel ik wil een waarde "55" uit een inputbox toevoegen aan een benaming Toevoeging_1, maar het kan goed zijn dat die waarde 55 de volgende keer 45 wordt. De waarde blijft wel komen uit een inputbox.

Is het duidelijk?
 
Volg deze instructie:
Maak eerst een verwijzing naar: Microsoft Visual Basic Extensibility 5.3
Ga vervolgens naar vetrouwenscentrum (Office knop)
ga naar instellingen voor vetrouwenscentrum
klik op Instellingen voor Macro's
Vink aan: toegang tot objectmodel...

Dan gebruik deze voorbeeldcode: (LET OP!!! Deze code is afkomstig van http://www.cpearson.com/excel/vbe.aspx)

Deze code zou je zelf moeten aanpassen.

Code:
Private Sub CommandButton1_Click()
CreateEventProcedure
AddProcedureToModule
End Sub
    Sub CreateEventProcedure()
        Dim VBProj As VBIDE.VBProject
        Dim VBComp As VBIDE.VBComponent
        Dim CodeMod As VBIDE.CodeModule
        Dim LineNum As Long
        Const DQUOTE = """" ' one " character

        Set VBProj = ActiveWorkbook.VBProject
        Set VBComp = VBProj.VBComponents("ThisWorkbook")
        Set CodeMod = VBComp.CodeModule
        
        With CodeMod
            LineNum = .CreateEventProc("Open", "Workbook")
            LineNum = LineNum + 1
            .InsertLines LineNum, "    MsgBox " & DQUOTE & "Hello World" & DQUOTE
        End With
    End Sub


    Sub AddProcedureToModule()
        Dim VBProj As Object ''VBIDE.VBProject
        Dim VBComp As Object ''VBIDE.VBComponent
        Dim CodeMod As VBIDE.CodeModule
        Dim LineNum As Long
        Const DQUOTE = """" ' one " character

        Set VBProj = ActiveWorkbook.VBProject
        Set VBComp = VBProj.VBComponents("Module1")
        Set CodeMod = VBComp.CodeModule
        
        With CodeMod
            LineNum = .CountOfLines + 1
            .InsertLines LineNum, "Public Sub SayHello()"
            LineNum = LineNum + 1
            .InsertLines LineNum, "    MsgBox " & DQUOTE & "Hello World" & DQUOTE
            LineNum = LineNum + 1
            .InsertLines LineNum, "End Sub"
        End With
    
    End Sub
 
Laatst bewerkt:
De oplossing die ik daarboven heb aangeboden, werkt prima.
Het is nu aan Marten om de code aan te passen.

Grt,

XLFAC
 
Ik denk niet dat jouw code biedt wat hij zoekt en waarvan hij niet weet hoe hij dat duidelijk moet vragen.
 
@snb; zie eerdere reactie van Marten.
Hij geeft wel aan dat de punt die ik beschreven heb in de juiste richting is.
Ik denk persoonlijk dat hij nog nniet precies weet hoe deze code moet customizen tot een code die voor hem bruikbaar is.
Ik maar een voorbeeld gegevens.

Grt

XLFAC
 
Beste XLFAC en snb,

Bedankt voor jullie inbreng. Ik ga deze week een avondje vrijmaken om de code te testen, dan weten we zeker of het werkt zoals ik het bedoel :D.

Tot die tijd zet ik het onderwerp vast op beantwoord, mocht de code niet voldoende zijn dan stel ik mijn vraag gewoon weer opnieuw of gooi ik het slotje eraf (als dat nog kan).

Gr. Marten
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan