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

Excel loopt vast door macro's

Status
Niet open voor verdere reacties.

Ron321

Gebruiker
Lid geworden
15 jul 2005
Berichten
555
Ik heb een behoorlijk uitgebreid rapport gemaakt mbv dit prachtige forum.
Er zitten verschillende macro's in. Nu doet zich het volgende probleem voor:
Met knippen en plakken via de muis loopt excel vast, je kan dan alleen nog afsluiten en dan vraagt ie of je het op wil slaan.
Kopieeren en plakken via het klembord is geen probleem en als de macro's uitgeschakeld zijn is het ook geen probleem!
Iemand een idee?

PS. het rapport is te groot om bij te voegen.
 
Ron321 zei:
Ik heb een behoorlijk uitgebreid rapport gemaakt mbv dit prachtige forum.
Er zitten verschillende macro's in. Nu doet zich het volgende probleem voor:
Met knippen en plakken via de muis loopt excel vast, je kan dan alleen nog afsluiten en dan vraagt ie of je het op wil slaan.
Kopieeren en plakken via het klembord is geen probleem en als de macro's uitgeschakeld zijn is het ook geen probleem!
Iemand een idee?

PS. het rapport is te groot om bij te voegen.


Hmm. Heb je het al geprobeerd met onderbrekingspunten ?
 
Ron321 zei:
Wat bedoel je daarmee?

Dat zijn de rode bolletjes die je in de kantlijn van de code kunt zetten. De macro stopt op dat punt en je kan bijvoorbeeld via F8 de macro stap voor stap doorlopen.
 
Dit is de macro waar het fout gaat ook al knip en plak ik in een ander blad.
Deze macro gebruik ik om handtekeningen te plakken.
Voorheen deed ik dit dmv een cel waarin de nummers stonden die achter de namen staan.
Nu doe ik dit door rechtstreeks de naam te kiezen.

Private Sub Worksheet_Change(ByVal Target As Range)
Application.ScreenUpdating = False
If Target.Address = "$C$16" Then
Range("L2").ClearContents
If Range("C16") = "J.H. Walbeek" Then Range("L2") = 13
If Range("C16") = "M.L. Assen" Then Range("L2") = 14
If Range("C16") = "R. van Leeuwen" Then Range("L2") = 15
If Range("C16") = "P. Barendrecht" Then Range("L2") = 16
If Range("C16") = "B. Vroemen" Then Range("L2") = 17
If Range("C16") = "G.J. van Hest" Then Range("L2") = 11
If Range("C16") = "F. Stuijver" Then Range("L2") = 12
If Range("C16") = "T. Jaspers" Then Range("L2") = 10
Dim iPic As Integer
Dim Sh As String
Dim nr As Integer
nr = Range("L2").Value
Dim Afb As String

On Error GoTo Verder1
Afb = "Figuur "
GoTo Go

Verder1:
On Error GoTo verder2
Afb = "Afbeelding "
GoTo Go

verder2:
Afb = "Picture "
Go:

' Aanpassen van de ondetekening op 5 tabbladen

If nr = 13 Then
Sheets("Schema's").Select
ActiveSheet.Shapes("John").Select
Selection.Copy
Sheets("eindblad").Select
ActiveSheet.Paste
Sheets("stookruimte").Select
ActiveSheet.Paste
Selection.ShapeRange.IncrementLeft -33
Sheets("afvoer").Select
ActiveSheet.Paste
Selection.ShapeRange.IncrementLeft -33
Sheets("certificaat ebi pi").Select
ActiveSheet.Paste
Sheets("ibs po").Select
ActiveSheet.Paste
Sheets("certificaat po").Select
ActiveSheet.Paste
Selection.ShapeRange.IncrementLeft -33
Sheets("voorblad").Select
End If
If nr = 14 Then
Sheets("Schema's").Select
ActiveSheet.Shapes("Martijn").Select
Selection.Copy
Sheets("eindblad").Select
ActiveSheet.Paste
Sheets("stookruimte").Select
ActiveSheet.Paste
Sheets("afvoer").Select
ActiveSheet.Paste
Sheets("certificaat ebi pi").Select
ActiveSheet.Paste
Sheets("ibs po").Select
ActiveSheet.Paste
Sheets("certificaat po").Select
ActiveSheet.Paste
Sheets("voorblad").Select
End If
If nr = 15 Then
Sheets("Schema's").Select
ActiveSheet.Shapes("Ronald").Select
Selection.Copy
Sheets("eindblad").Select
ActiveSheet.Paste
Sheets("stookruimte").Select
ActiveSheet.Paste
Sheets("afvoer").Select
ActiveSheet.Paste
Sheets("certificaat ebi pi").Select
ActiveSheet.Paste
Sheets("ibs po").Select
ActiveSheet.Paste
Selection.ShapeRange.IncrementTop -1
Sheets("certificaat po").Select
ActiveSheet.Paste
Selection.ShapeRange.IncrementTop -3
Sheets("voorblad").Select
End If
If nr = 16 Then
Sheets("Schema's").Select
ActiveSheet.Shapes("Peter").Select
Selection.Copy
Sheets("eindblad").Select
ActiveSheet.Paste
Sheets("stookruimte").Select
ActiveSheet.Paste
Sheets("afvoer").Select
ActiveSheet.Paste
Sheets("certificaat ebi pi").Select
ActiveSheet.Paste
Sheets("ibs po").Select
ActiveSheet.Paste
Sheets("certificaat po").Select
ActiveSheet.Paste
Sheets("voorblad").Select
End If
If nr = 17 Then
Sheets("Schema's").Select
ActiveSheet.Shapes("Bart").Select
Selection.Copy
Sheets("eindblad").Select
ActiveSheet.Paste
Sheets("stookruimte").Select
ActiveSheet.Paste
Sheets("afvoer").Select
ActiveSheet.Paste
Sheets("certificaat ebi pi").Select
ActiveSheet.Paste
Sheets("ibs po").Select
ActiveSheet.Paste
Sheets("certificaat po").Select
ActiveSheet.Paste
Sheets("voorblad").Select
End If
If nr = 11 Then
Sheets("Schema's").Select
ActiveSheet.Shapes("Geertjan").Select
Selection.Copy
Sheets("eindblad").Select
ActiveSheet.Paste
Sheets("stookruimte").Select
ActiveSheet.Paste
Selection.ShapeRange.IncrementLeft -40
Sheets("afvoer").Select
ActiveSheet.Paste
Selection.ShapeRange.IncrementLeft -40
Sheets("certificaat ebi pi").Select
ActiveSheet.Paste
Sheets("ibs po").Select
ActiveSheet.Paste
Sheets("certificaat po").Select
ActiveSheet.Paste
Selection.ShapeRange.IncrementLeft -40
Sheets("voorblad").Select
End If
If nr = 12 Then
Sheets("Schema's").Select
ActiveSheet.Shapes("Folkert").Select
Selection.Copy
Sheets("eindblad").Select
ActiveSheet.Paste
Sheets("stookruimte").Select
ActiveSheet.Paste
Sheets("afvoer").Select
ActiveSheet.Paste
Sheets("certificaat ebi pi").Select
ActiveSheet.Paste
Sheets("ibs po").Select
ActiveSheet.Paste
Sheets("certificaat po").Select
ActiveSheet.Paste
Selection.ShapeRange.IncrementLeft -40
Sheets("voorblad").Select
End If
If nr = 10 Then
Sheets("Schema's").Select
ActiveSheet.Shapes("Thijs").Select
Selection.Copy
Sheets("eindblad").Select
ActiveSheet.Paste
Sheets("stookruimte").Select
ActiveSheet.Paste
Selection.ShapeRange.IncrementLeft -40
Sheets("afvoer").Select
ActiveSheet.Paste
Selection.ShapeRange.IncrementLeft -40
Sheets("certificaat ebi pi").Select
ActiveSheet.Paste
Sheets("ibs po").Select
ActiveSheet.Paste
Sheets("certificaat po").Select
ActiveSheet.Paste
Selection.ShapeRange.IncrementLeft -33
Sheets("voorblad").Select
End If
End If
End Sub
 
Wat mij opvalt is er in de code nergens de handtekeningen worden verwijderd. Doe je dat handmatig.

Het bestand zal mede door de handtekeningen die er al inzitten zeer groot worden. Mijn idee is (omdat ik aanneem dat de bestanden ergens op de computer staan), de handtekeningen op te halen uit de directory waar ze staan als er een naam wordt geselecteerd en ze in het bestand te plaatsen. Zodra je het bestand heeft afgesloten zou het een optie kunnen zijn om de handtekeningen te verwijderen indien deze veel ruimte innemen.

Zo te zien heb je de code ook gemaakt via knippen en plakken omdat bijvoorbeeld de DIM-statements middenin de code staan ipv bovenaan.
 
Het is een rapport dat door verschillende mensen word gebruikt.
Standaard staat er geen handtekening in, de desbetreffende word geplakt op het moment dat degene zijn naam kiest.
Naderhand word er via een andere macro nog een andere afbeelding geplakt en daarna worden alle overbodige handtekeningen en afbeeldingen automatisch verwijderd.
En idd ik heb de macro samengesteld uit verschillende macro's en voorbeelden van dit forum.
 
Ron321 zei:
Het is een rapport dat door verschillende mensen word gebruikt.
Standaard staat er geen handtekening in, de desbetreffende word geplakt op het moment dat degene zijn naam kiest.
Naderhand word er via een andere macro nog een andere afbeelding geplakt en daarna worden alle overbodige handtekeningen en afbeeldingen automatisch verwijderd.
En idd ik heb de macro samengesteld uit verschillende macro's en voorbeelden van dit forum.

Ik neem aan dat de handtekeningen ergens centraal staan.
Vandaar dat ik ook de opmerking plaatste om de handtekeningen in te laden.
Voorbeeld:

IF [C16] = "Jansen" then
naam = "Jan"
ElseIf [C16] = "Pieterse" then
naam = "Piet"
End If

ActiveSheet.Pictures.Insert("C:\" & naam & "JPG").Select
 
Roncancio zei:
Ik neem aan dat de handtekeningen ergens centraal staan.

De handtekeningen zitten in het rapport zelf omdat dit rapport op allemaal verschillende laptops in het veld gebruikt wordt.
 
Ron321 zei:
Ik heb een behoorlijk uitgebreid rapport gemaakt mbv dit prachtige forum.
Er zitten verschillende macro's in. Nu doet zich het volgende probleem voor:
Met knippen en plakken via de muis loopt excel vast, je kan dan alleen nog afsluiten en dan vraagt ie of je het op wil slaan.
Kopieeren en plakken via het klembord is geen probleem en als de macro's uitgeschakeld zijn is het ook geen probleem!
Iemand een idee?

PS. het rapport is te groot om bij te voegen.

Ik heb eens zitten denken (dat doe ik soms nog wel eens) aan het feit dat het met knippen en plakken via het klembord wel lukt maar niet via de macro's.

Ik heb dit wel eens vaker gezien en vaak was dit op te lossen door wanneer je naar het doelwerkblad gaat de cel te selecteren waar de handtekening behoort te staan. Dus:

- Kopieren
- Naar werkblad X
- Cel selecteren
- Plakken

Wellicht een overweging waard.
 
Overigens kan je via ctrl pause/break voorkomen dat excel vast loopt, je stopt dan de macro.
 
Roncancio zei:
Ik heb eens zitten denken (dat doe ik soms nog wel eens) aan het feit dat het met knippen en plakken via het klembord wel lukt maar niet via de macro's.

Ik denk dat er een misverstand is!
Deze macro doet precies wat hij moet doen, dat is geen probleem.
Alleen als ik andere dingen (zoals adresgegevens) wil knippen en plakken via de muis ergens anders in het rapport dan loopt excel vast.
 
snabbi zei:
Overigens kan je via ctrl pause/break voorkomen dat excel vast loopt, je stopt dan de macro.

Dat helpt niet. (Ik neem tenminste aan dat je dit indrukt op het moment dat hij vastloopt?)
 
Ik heb je macro gekopieerd en ik kreeg steeds hetzelfde probleem.
Daardoor heb ik de macro ontleed en gezien waar het fout gaat.

Bovenaan de macro staat:

Application.ScreenUpdating = False

Wanneer je deze uitschakelt, loopt de macro niet meer vast maar het nadeel is wel dat Excel heen en weer springt tussen je werkbladen.
Wat je het beste kunt doen is onder aan je macro (vlak boven End Sub) de volgende regel toe te voegen:

Application.ScreenUpdating = True
 
Dat is opmerkelijk.
Onderstaande code is exact identiek aan de code die je reeds gestuurd heb. Ook bij mij liep de computer vast. Echter doordat ik onderaan de code Application.ScreenUpdating=True heb toegevoegd, loopt de macro nu goed.

Private Sub Worksheet_Change(ByVal Target As Range)
Application.ScreenUpdating = False
If Target.Address = "$C$16" Then
Range("L2").ClearContents
If Range("C16") = "J.H. Walbeek" Then Range("L2") = 13
If Range("C16") = "M.L. Assen" Then Range("L2") = 14
If Range("C16") = "R. van Leeuwen" Then Range("L2") = 15
If Range("C16") = "P. Barendrecht" Then Range("L2") = 16
If Range("C16") = "B. Vroemen" Then Range("L2") = 17
If Range("C16") = "G.J. van Hest" Then Range("L2") = 11
If Range("C16") = "F. Stuijver" Then Range("L2") = 12
If Range("C16") = "T. Jaspers" Then Range("L2") = 10
Dim iPic As Integer
Dim Sh As String
Dim nr As Integer
nr = Range("L2").Value
Dim Afb As String

On Error GoTo Verder1
Afb = "Figuur "
GoTo Go

Verder1:
On Error GoTo verder2
Afb = "Afbeelding "
GoTo Go

verder2:
Afb = "Picture "
Go:

' Aanpassen van de ondetekening op 5 tabbladen

If nr = 13 Then
Sheets("Schema's").Select
ActiveSheet.Shapes("John").Select
Selection.Copy
Sheets("eindblad").Select
ActiveSheet.Paste
Sheets("stookruimte").Select
ActiveSheet.Paste
Selection.ShapeRange.IncrementLeft -33
Sheets("afvoer").Select
ActiveSheet.Paste
Selection.ShapeRange.IncrementLeft -33
Sheets("certificaat ebi pi").Select
ActiveSheet.Paste
Sheets("ibs po").Select
ActiveSheet.Paste
Sheets("certificaat po").Select
ActiveSheet.Paste
Selection.ShapeRange.IncrementLeft -33
Sheets("voorblad").Select
End If
If nr = 14 Then
Sheets("Schema's").Select
ActiveSheet.Shapes("Martijn").Select
Selection.Copy
Sheets("eindblad").Select
ActiveSheet.Paste
Sheets("stookruimte").Select
ActiveSheet.Paste
Sheets("afvoer").Select
ActiveSheet.Paste
Sheets("certificaat ebi pi").Select
ActiveSheet.Paste
Sheets("ibs po").Select
ActiveSheet.Paste
Sheets("certificaat po").Select
ActiveSheet.Paste
Sheets("voorblad").Select
End If
If nr = 15 Then
Sheets("Schema's").Select
ActiveSheet.Shapes("Ronald").Select
Selection.Copy
Sheets("eindblad").Select
ActiveSheet.Paste
Sheets("stookruimte").Select
ActiveSheet.Paste
Sheets("afvoer").Select
ActiveSheet.Paste
Sheets("certificaat ebi pi").Select
ActiveSheet.Paste
Sheets("ibs po").Select
ActiveSheet.Paste
Selection.ShapeRange.IncrementTop -1
Sheets("certificaat po").Select
ActiveSheet.Paste
Selection.ShapeRange.IncrementTop -3
Sheets("voorblad").Select
End If
If nr = 16 Then
Sheets("Schema's").Select
ActiveSheet.Shapes("Peter").Select
Selection.Copy
Sheets("eindblad").Select
ActiveSheet.Paste
Sheets("stookruimte").Select
ActiveSheet.Paste
Sheets("afvoer").Select
ActiveSheet.Paste
Sheets("certificaat ebi pi").Select
ActiveSheet.Paste
Sheets("ibs po").Select
ActiveSheet.Paste
Sheets("certificaat po").Select
ActiveSheet.Paste
Sheets("voorblad").Select
End If
If nr = 17 Then
Sheets("Schema's").Select
ActiveSheet.Shapes("Bart").Select
Selection.Copy
Sheets("eindblad").Select
ActiveSheet.Paste
Sheets("stookruimte").Select
ActiveSheet.Paste
Sheets("afvoer").Select
ActiveSheet.Paste
Sheets("certificaat ebi pi").Select
ActiveSheet.Paste
Sheets("ibs po").Select
ActiveSheet.Paste
Sheets("certificaat po").Select
ActiveSheet.Paste
Sheets("voorblad").Select
End If
If nr = 11 Then
Sheets("Schema's").Select
ActiveSheet.Shapes("Geertjan").Select
Selection.Copy
Sheets("eindblad").Select
ActiveSheet.Paste
Sheets("stookruimte").Select
ActiveSheet.Paste
Selection.ShapeRange.IncrementLeft -40
Sheets("afvoer").Select
ActiveSheet.Paste
Selection.ShapeRange.IncrementLeft -40
Sheets("certificaat ebi pi").Select
ActiveSheet.Paste
Sheets("ibs po").Select
ActiveSheet.Paste
Sheets("certificaat po").Select
ActiveSheet.Paste
Selection.ShapeRange.IncrementLeft -40
Sheets("voorblad").Select
End If
If nr = 12 Then
Sheets("Schema's").Select
ActiveSheet.Shapes("Folkert").Select
Selection.Copy
Sheets("eindblad").Select
ActiveSheet.Paste
Sheets("stookruimte").Select
ActiveSheet.Paste
Sheets("afvoer").Select
ActiveSheet.Paste
Sheets("certificaat ebi pi").Select
ActiveSheet.Paste
Sheets("ibs po").Select
ActiveSheet.Paste
Sheets("certificaat po").Select
ActiveSheet.Paste
Selection.ShapeRange.IncrementLeft -40
Sheets("voorblad").Select
End If
If nr = 10 Then
Sheets("Schema's").Select
ActiveSheet.Shapes("Thijs").Select
Selection.Copy
Sheets("eindblad").Select
ActiveSheet.Paste
Sheets("stookruimte").Select
ActiveSheet.Paste
Selection.ShapeRange.IncrementLeft -40
Sheets("afvoer").Select
ActiveSheet.Paste
Selection.ShapeRange.IncrementLeft -40
Sheets("certificaat ebi pi").Select
ActiveSheet.Paste
Sheets("ibs po").Select
ActiveSheet.Paste
Sheets("certificaat po").Select
ActiveSheet.Paste
Selection.ShapeRange.IncrementLeft -33
Sheets("voorblad").Select
End If
End If
Application.ScreenUpdating = True

End Sub
 
Je weet zeker dat het door deze macro komt ?
Je zou kunnen proberen om een of meerdere onderbrekingspunten (rode bolletjes in de kantlijn van de macro) te plaatsen zodat je via F8 de macro stap voor stap kunt doorlopen. Zo kan je zien waar het probleem zich voordoet.
 
Ik ben bezig geweest met die rode bolletjes maar het is mij niet helemaal duidelijk hoe je ze moet gebruiken en interpreteren.
 
Ron321 zei:
Ik ben bezig geweest met die rode bolletjes maar het is mij niet helemaal duidelijk hoe je ze moet gebruiken en interpreteren.

Met de rode bolletjes stopt de macro op het punt waar een rood bolletje staat. De betreffende regel is geel gekleurd.
Vervolgens kan je door steeds op F8 te drukken de macro stap voor stap doorlopen.
Zo kan je zien vanaf welke regel de macro vastloopt.

Aan de hand van die bevindingen kunnen we de macro aanpassen, als het goed is.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan