• 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.

Private sub verwijderen in VBA

Status
Niet open voor verdere reacties.

oceanrace

Gebruiker
Lid geworden
14 mei 2008
Berichten
198
Beste forummers,

Wie kan me helpen om de volgende private sub in Blad1 te verwijderen door een toevoeging in de code opslaanzonderformules...

Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)
If Not Application.Intersect(Target, Range("A68:A83")) Is Nothing Then
Call copycel
End If
End Sub

Onderstaande code gebruik ik voor opslaan als, zonder formules en macro's maar de private sub in Blad1 blijft bestaan, dit geeft problemen.

Code:
Sub Opslaanzonderformules()
  Dim strFileName As Variant, strPath As String
  Dim VBProj As VBIDE.VBProject, VBComp As VBIDE.VBComponent, CodeMod As VBIDE.CodeModule
  Dim astrLinks As Variant
  strFileName = Application.GetSaveAsFilename(InitialFileName:=strPath & [AG2], _
                                              FileFilter:="Excel Files (*.xls), *.xls, Excel 2007 Files (*.xlsm), *.xslm", _
                                              FilterIndex:=1, _
                                              Title:="Opslaan als excel document (alleen werkblad kaart zonder formules)")
  If strFileName = False Then

    MsgBox "De kaart is niet opgeslagen!", vbInformation + vbOKOnly, "Er is iets misgegaan..."
  Else
      ActiveSheet.Copy
      With ActiveWorkbook
      With .Sheets("TK")
        .Unprotect
        .UsedRange.Value = .UsedRange.Value
        Union(.Range(.Cells(65, 1), .Cells(.Rows.Count, .Columns.Count)), _
            .Range(.Cells(1, 65), .Cells(65, .Columns.Count))).Clear
            ActiveSheet.Cells.ClearComments
            ActiveSheet.DrawingObjects.Visible = True
            ActiveSheet.DrawingObjects.Delete
        .Protect
      End With
      
    ' Define variable as an Excel link type.
    astrLinks = ActiveWorkbook.LinkSources(Type:=xlLinkTypeExcelLinks)

    ' Break the first link in the active workbook.
    For i = 1 To UBound(astrLinks)

    
    ActiveWorkbook.BreakLink _
        Name:=astrLinks(i), _
        Type:=xlLinkTypeExcelLinks
     Next i
     Set VBProj = .VBProject
     For Each VBComp In VBProj.VBComponents
            If VBComp.Type = vbext_ct_Document Then
                Set CodeMod = VBComp.CodeModule
                With CodeMod
                    .DeleteLines 1, .CountOfLines
                End With
            Else
                VBProj.VBComponents.Remove VBComp
            End If
        Next VBComp
    .SaveAs Filename:=strFileName

      End With
      A = MsgBox("Wil je de kaart printen? Maak een keuze, de opgeslagen kaart wordt vervolgens afgesloten om terug te gaan naar het origineel. ", vbQuestion + vbYesNo, "Gelukt, de kaart is opgeslagen!")

      If A = vbYes Then
    
          Application.Dialogs(xlDialogPrint).Show
      End If
      ActiveWorkbook.Close Savechanges:=False
  End If
End Sub

Excel 2003 geeft geen problemen maar in 2007 loopt de zaak vast omdat volgens mij de private sub in blad1 niet verwijderd wordt.
 
in de VBA-editor>extra>verwijzingen moet je een vinkje plaatsen voor
Code:
Microsoft Visual Basic For Applications Extensibility 5.3
en het dan nog een keer proberen.
 
Maar wat ik graag wil is dat hij verwijderd wordt met opslaan naar nieuw blad, de verwijzing staat wel aan..
 
zals je vermoedelijk wel weet, mag je niet in die werkmap wissen waar de macro gestart is. Nu kan ik de programmalijn niet volledig volgen, maar ik denk dat je dat wel doet. Dus je moet uit workbook A de macro start, om de macros in workbook B de macros te wissen en ik vrees dat excel daar niet volledig zeker van is. Ik krijg hem anders wel aan de praat in een 2007 vanuit test1.xlsm met deze verkorte versie
Code:
Sub Opslaanzonderformules()
  Dim strFileName As Variant, strPath As String
  Dim VBProj As VBIDE.VBProject, VBComp As VBIDE.VBComponent, CodeMod As VBIDE.CodeModule
  Dim astrLinks As Variant

  With Workbooks("test2.xlsm")

    Set VBProj = .VBProject
    For Each VBComp In VBProj.VBComponents
      If VBComp.Type = vbext_ct_Document Then
        Set CodeMod = VBComp.CodeModule
        With CodeMod
          .DeleteLines 1, .CountOfLines
        End With
      Else
        VBProj.VBComponents.Remove VBComp
      End If
    Next VBComp
  End With
End Sub
 
Het vreemde is dat ik in Excel 2003 geen problemen heb (afgezien van dat ik een melding "onvoldoende bronnen beschikbaar" krijg.
Maar in Excel 2007 loopt hij volledig vast.
 
krijg je mijn verkorte versie aan de praat met 2 bestanden test1 en test2.xlsm ?
Bij mij werkt het wel in 2007, dus kan kan er 1 en ander uitgesloten worden ?
 
Als ik het goed begrijp kun je dus wel alle macro's verwijderen, maar niet de private sub?
 
mijns inziens wel, alleen kan je de tak niet doorzagen waarop je zit. Dus je kan dat niet doen in d map waar je aan het opruimen bent.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan