Fout -2147417848 (80010108) tijdens uitvoering

Status
Niet open voor verdere reacties.

Joete

Gebruiker
Lid geworden
19 sep 2008
Berichten
87
Ahahah, help!

Ik krijg een hele vage foutmelding. Krijg hem al sinds afgelopen vrijdag, dacht dat ik er toen vanaf was, maar blijkbaar vindt mijn macro dat die dit de ene keer wel en de andere keer niet deze melding moet geven. Meestal werkt het bestand gewoon en doet ie wat ik wil, maar af en toe komt deze melding dus naar voren.

De volledige foutmelding:
Fout -2147417848 (80010108) tijdens uitvoering:
Methode Insert van object Range is mislukt


Het betreft een macro die een "blanco" regel invoegt op het werkblad "raming", deze "blanco" regel wordt gekopieerd vanaf het werkblad "formules".
Regels met " ' ### " bevatten extra info die ik er voor jullie even bij gezet heb.
De code dit er bij hoort (stukjes geknipt):
Code:
Public Sub RamingRegelInvoegen()
    Dim methode As Integer
    methode = 0
    [COLOR="#FFA500"]' ### Hier voer ik enkele controles uit om te zorgen dat de regels op een goede manier ingevoegd worden[/COLOR]
    ' Controle of geen regel niveau 2 of eind regel geselecteerd is
    If Sheets("Raming").Cells(ActiveCell.Row, 15).Value = "" Or Sheets("Raming").Cells(ActiveCell.Row, 15).Value = "end" Then
        MsgBox "Kan op dit niveau geen regel invoegen. Selecteer een regel binnen een paragraaf.", vbOKOnly + vbCritical, "Verkeerde regel"
        Exit Sub
    ' controle of niet een regel van of in een onderbouwing geselecteerd is
    ElseIf Sheets("Raming").Cells(ActiveCell.Row + 1, 17).Value <> "" And Sheets("Raming").Rows(ActiveCell.Row + 1).Hidden = True Then
        MsgBox "Dit is de kop van een ingeklapte onderbouwing, de regels zullen onder de onderbouwing toegevoegd worden.", vbOKOnly + vbCritical, "Onderbouwde regel"
        methode = 1
    ElseIf Sheets("Raming").Cells(ActiveCell.Row + 1, 17).Value <> "" And Sheets("Raming").Rows(ActiveCell.Row + 1).Hidden = False Then
        MsgBox "Dit is de kop van een onderbouwing, de regels zullen in de onderbouwing toegevoegd worden.", vbOKOnly + vbCritical, "Onderbouwde regel"
        methode = 2
    ElseIf Sheets("Raming").Cells(ActiveCell.Row, 17).Value <> "" And Sheets("Raming").Cells(ActiveCell.Row + 1, 17).Value <> "" Then
        MsgBox "Dit betreft een onderbouwing, de regels zullen in de onderbouwing worden toegevoegd", vbOKOnly + vbCritical, "Onderbouwing"
        methode = 3
    End If
    
   [COLOR="#FFA500"] ' ### Hier vraag ik het aantal regels op wat ingevoegd moet worden[/COLOR]
    Dim AantalRegels As String
    AantalRegels = InputBox("Hoeveel regels wil je invoegen?" & Chr(13) & Chr(13) & "(maximaal 15)", "Regels invoegen")
    If Not IsNumeric(AantalRegels) Then
        MsgBox "Er is geen getal ingevoerd. Er worden geen regels toegevoegd.", vbOKOnly + vbExclamation, "Verkeerde invoer"
        Exit Sub
    ElseIf AantalRegels > 15 Then
        MsgBox "De ingevulde waarde is te hoog. Er worden maximaal 15 regels tegelijk toegevoegd.", vbOKOnly + vbExclamation, "Verkeerde invoer"
        AantalRegels = 15
    End If
    
    Application.ScreenUpdating = False
    Application.EnableEvents = False
    
   ' regels toevoegen
    Dim i As Integer
    Sheets("formules").Visible = True
    If methode = 0 Then
        For i = 1 To AantalRegels
            Sheets("formules").Rows("1:1").Copy
            [COLOR="#FF0000"]ActiveCell.Offset(1, 0).EntireRow.Insert shift:=xlDown[/COLOR]
            Application.CutCopyMode = False
            Sheets("Raming").Range(Cells(ActiveCell.Row + 1, 13), Cells(ActiveCell.Row + 1, 15)).Value = Sheets("Raming").Range(Cells(ActiveCell.Row, 13), Cells(ActiveCell.Row, 15)).Value
        Next i
    ElseIf methode = 1 Or methode = 2 Or methode = 3 Then
    [COLOR="#FFA500"]' ### Hier doe ik hetzelfde, maar dan voor methode 1, 2 en 3 (kleine afwijkingen, extra tellingen/controles, enz.. code verwijderd[/COLOR]
    End If
    Sheets("formules").Visible = False
    Cells(ActiveCell.Row + 1, 5).Select
    
    Application.CutCopyMode = False
    
    Application.EnableEvents = True
    Application.ScreenUpdating = True
End Sub

De rode regel geeft de foutmelding. Activecell staat op het werkblad raming, hier zit ook de knop waarmee deze macro geactiveerd wordt, dus dat kan in principe ook geen ander werkblad zijn (tenzij iemand de knop niet gebruikt natuurlijk). De knop is opgebouwd uit een vorm/tekstvak waar ik een macro aan gekoppeld heb. De knoppen wilde ik namelijk duidelijke kleuren mee kunnen geven (rood, groen, blauw, enz..). In de hele code selecteer ik in principe pas een andere cel (de nieuw ingevoegde zodat doorgewerkt kan worden) als de code zo goed als afgelopen is. Tussendoor geen selecties of activaties.

Iemand een idee waar deze melding vandaan kan komen? Ik vermoed iets in de activecell, vanwege de melding range, maar de juiste cel is gewoon actief (lijkt het)...

Hoop dat jullie mij kunnen helpen. Nou ja, hoop, weet wel zo goed als zeker dat jullie dat kunnen :cool:
 
Overzichtelijk zo zonder voorbeeldbestand. :(
 
Die vraag was ik dus al bang voor...was al bezig met het opschonen van het bestand om alle gevoelige info er uit te halen.

Om alvast een antwoord te geven op de volgende vraag die gaat komen: Wanneer doet de foutmelding zich voor? Geen idee... Heb het vermoeden bij het wisselen tussen werkblad "Raming" en "Basisregels", met tussentijds op beide bladen nieuwe regels toegevoegd te hebben. En ook dan, soms wel, soms niet...

Gebruik trouwens office 2010.

Bekijk bijlage voorbeeld bestand.xlsm
In dit bestand krijg je trouwens meteen een foutmelding omdat ik 1 tabblad verwijderd heb en vergeten ben de code hiervoor er uit te halen.
In de grijze kolom worden codes aangemaakt, deze zijn van belang voor de tellingen en het sorteren.
 
Code:
Dim AantalRegels As String
For i = 1 To AantalRegels
lijkt mij niet logisch.
 
Om er wijs uit te kunnen heb ik deze code vereenvoudigd:

Code:
Private Sub worksheet_change(ByVal Target As Range)
  If Target.Count = 1 Then
    Application.ScreenUpdating = False
    Application.EnableEvents = False
        
    If Target.Column = 8 And Target.Row > 8 And Target.Value <> "" Then
      c00 = LCase(Target)
               
      If c00 = "m" Then c00 = "m1"
      For j = 1 To 9
        c00 = Replace(c00, Choose(j, "1", "2", "3", "pm", "bvo", "bbo", "bgo", "bi", "wp"), Choose(j, "¹", "²", "³", "PM", "BVO", "BBO", "BGO", "BI", "Wp"))
      Next
               
      Target = c00
    ElseIf Target.Column = 9 And Target.Row > 7 Then
      Target.Offset(, 10).Value = Date
    End If
          
    Application.EnableEvents = True
    Application.ScreenUpdating = True
  End If
End Sub
 
Code:
Dim AantalRegels As String
For i = 1 To AantalRegels
lijkt mij niet logisch.

Klopt! Het probleem is hier dat de gebruiker iets in moet vullen in een inputbox. Daar kan een stiekeme gebruiker natuurlijk ook tekst invullen. Om direct een vastloper te voorkomen heb ik er een string van gemaakt en controleer ik later of dat getallen zijn of niet, bij geen getal: melding en exit sub.

Maar daarin ligt niet het probleem, met dat stuk code werk ik al een klein jaar en heeft nooit problemen opgeleverd.

Ik snap niet waarom ik ineens geen insert kan gebruiken bij mijn activecell. Wat overigens ook vreemd is, is dat na het vastlopen van het bestand en het opnieuw openen de blanco regel er wel staat, maar dat de regel niet correct is. De formules die gekopieerd worden nadat de rij ingevoegd is (na de rode code regel) staan niet in de nieuw ingevoegde regel.
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan