• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

Macro mee kopieren naar nieuw werkblad

Status
Niet open voor verdere reacties.
En met de macro in het nieuwe bestand opgenomen.
 
Yes die staat er ook in! Geprobeerd of ik die van Edmoor nu zelf aan de gang krijg hiermee maar dat lukt helaas niet :(
 
Maak eens deze Sub:
Code:
Sub Test
    MsgBox Environ("Temp")
End Sub

Ga dan op de MsgBox regel staan en druk op F5.
Wat gebeurt er dan?
 
Dan krijg ik een schermpje met daarin: "C:\Users\schep115\AppData\Local\Temp"
 
Ok, dom van mij dus. Ik zie net een foute versie te hebben geplaatst. Dit is de goede:
Code:
Private Sub Beta_Opslaan_Click()
    Const MODULE_NAME    As String = "Module1"                ' Name of the module to transfer
    Dim WBK As Workbook
    Dim TEMPFILE As String

    TEMPFILE = Environ("TEMP") & "\Modul.bas" ' temp textfile
    Sheets(Array("BETA", "BETA_DD")).Select
    Sheets("BETA_DD").Activate
    Sheets(Array("BETA", "BETA_DD")).Copy
    ActiveSheet.Shapes.Range(Array("Beta_Opslaan")).Select
    Selection.Delete
    Sheets("BETA_DD").Select
    ActiveWindow.SelectedSheets.Visible = False
  
    On Error Resume Next
    '**Create new workbook
    Set WBK = Workbooks.Add
   
    '** Export the module to a textfile
    ThisWorkbook.VBProject.VBComponents(MODULE_NAME).Export TEMPFILE
  
    'Import the module to the new workbook
    WBK.VBProject.VBComponents.Import TEMPFILE
  
    'Kill the textfile
    Kill TEMPFILE
End Sub
 
Nu krijg ik geen foutmelding meer op de Environ maar wel weer een leeg blad met de macro's erin en het "BETA" blad zonder macro's :(
 
Ik heb ervan gemaakt:
Code:
Private Sub Beta_Opslaan_Click()
    With ThisWorkbook.VBProject.VBComponents("thisWorkbook").codemodule
        c00 = .Lines(1, .CountOfLines)
    End With
    
    Sheets(Array("BETA", "BETA_DD")).Copy
    
    With ActiveWorkbook
       .VBProject.VBComponents("thisworkbook").codemodule.AddFromString c00
       .SaveAs Environ("temp") & "\test2.xlsb", 50
       .Close 0
    End With
End Sub

Nu slaat hij het bestand "test2" netjes op in de temp maar als ik het daar open krijg ik een foutmelding "compileerfout: sub of function is niet gedefinieerd" Vervolgens is "Private Sub Workbook_open()" gehighlighted.
Ik voeg het voorbeeld bij.Bekijk bijlage voorbeeld forum2.xlsm
 
De link bevat een pagina waarin alles stapsgewijs wordt uitgelegd.
Volgens mij heb je de voorafgaande tekst nog niet helemaal doorgenomen.

Je vergeet te vertellen welke macro gekopieerd moet worden.

Je hebt niet gekeken in het nieuw gecreëerde bestand (met uitgeschakelde macro's) welke code zich daarin bevindt.

En: vermijd altijd samengevoegde cellen als je met VBA wil werken.

Gebruik eens deze code om te zien of de code doet wat je beoogt:

Code:
Private Sub Beta_Opslaan_Click()
    With ThisWorkbook.VBProject.VBComponents("thisWorkbook").codemodule
        c00 = .Lines(1, .CountOfLines)
    End With
    MsgBox c00
End Sub

Ik zou deze code
Code:
Private Sub Workbook_Activate()
Call Mousemenu
End Sub
verwijderen, omdat deze al gedraaid heeft in:

Code:
Private Sub Workbook_open()
Call Mousemenu
End Sub
en die zou ik dan vervangen door:

Code:
Private Sub Workbook_open()
  Application.CommandBars("Cell").Reset
End sub

Ik vind het weinig zinvol 1 regel code 'aan te roepen'; dan kun je hem maar meteen beter schrijven waar ie ook moet worden uitgevoerd.

Ook tref ik te vaak aan:
Code:
For x = Sheets.Count To 1 Step -1
    If Sheets(x).Name = "info" Then
        Application.DisplayAlerts = False
        Sheets(x).Delete
        Application.DisplayAlerts = True
    End If
Next x

dat kan eenvoudiger met
Code:
on error resume next
sheets("info").delete

Maar het gebruik van een 'sjabloon' werkblad voor de aanmaak van werkblad 'info' lijkt me zinvoller dan de hele macro met de naam 'info'.
 
Laatst bewerkt:
Bedankt voor je moeite snb. "Info" en "Mousemenu" (degenen die gekopieerd moeten worden" zijn niet door mijzelf gemaakt en ik weet er te weinig van om helemaal te herschrijven.
Ik ga de website die je hebt gegeven nog eens beter bestuderen en bovenstaande uitleg op mijn gemak verder uitproberen en testen. Het lijkt me zinvol dit draadje te sluiten. Mocht ik uiteindelijk toch nog een vraag hebben dan maak ik een nieuwe vraag met de code die ik dan heb.
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan