Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

makro met paste werkt de eerste keer niet en de tweede keer wel

30 views
Skip to first unread message

Jan

unread,
Sep 26, 2009, 11:52:01 AM9/26/09
to
IK heb een makro gemaakt waarmee ik gegevens uit een werkmap naar een andere
werkmap kopieer. Plakken doe ik "als waarden".
Het is heel vreemd, maar als ik de makro de eerste keer opstart, dan loopt
hij vast bij het plakken. Breek ik de makro dan af en start hem nog een keer
op, dan gaat hij wel goed door.

Hoe kan ik dit oplossen?
--
Vriendelijke groet, Jan

Maurrieske

unread,
Sep 26, 2009, 12:22:24 PM9/26/09
to
Jan, ik zou zeggen: zet de code ook even erbij.

Je kunt ook de macro stap voor stap uitvoeren en kijken wat er allemaal op
welk moment gebeurt.

Maurrieske

"Jan" <J...@discussions.microsoft.com> schreef in bericht
news:C7550473-B1FC-4CAC...@microsoft.com...

Jan

unread,
Sep 26, 2009, 2:04:01 PM9/26/09
to
Hallo Maurrieske,

Hieronder de code:
Sub UitslagenPersoonlijkImporteren()
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Dim ronde As String
Dim ImportScherm As String
Dim DamesHeren As String
Dim Importveld As String
Dim Verzamelblad As String
Dim Bestandsnaam As String
Dim Boodschap As String
Verzamelblad = ActiveWorkbook.Name
Application.Dialogs(xlDialogOpen).Show
Bestandsnaam = ActiveWorkbook.Name
If Left(Bestandsnaam, 11) <> "Persoonlijk" Then
MsgBox ("Verkeerde bestand gekozen, kies bestand met PERSOONLIJK in
de naam.")
Workbooks(Bestandsnaam).Close
Exit Sub
End If
ronde = Range("A1").Value
Range("A3").Select
Range(Selection, Selection.End(xlDown)).Select
Range(Selection, Selection.End(xlToRight)).Select
Selection.Copy
Windows(Verzamelblad).Activate
Sheets(ronde).Visible = True
Sheets(ronde).Activate
BeveiligingUit
Range("A1").Select
Range("A1").End(xlDown).Select
ActiveCell.Offset(1, 0).Activate
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone,
SkipBlanks _
:=False, Transpose:=False
Range("A1").Select
BeveiligingAan
Workbooks(Bestandsnaam).Close
Sheets(ronde).Visible = False
Sheets("Voorblad").Activate
Boodschap = "U heeft de uitslagen van " & Bestandsnaam & " goed
geimporteerd."
MsgBox (Boodschap)
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub


--
Vriendelijke groet, Jan

Maurrieske

unread,
Sep 27, 2009, 3:04:02 AM9/27/09
to
Jan, even een gokje van mijn kant.
Zet de beveiliging uit voor dat je de copy opdracht uitvoert. Volgens mij is
dit het verschil tussen de eerste en de tweede keer dat de code uitgevoerd
wordt. Nadat de code vastgelopen is bij de paste is de beveiliging van het
doelblad er af en kun je pasten. De eerste keer is de beveiliging er nog op.

Dus als je de code
BeveiligingUit
zet voor de regel
Application.Dialogs(xlDialogOpen).Show
moet het volgens mij wel goed gaan.


Dan nog een tip:
De macro BeveiligingUit is wellicht ook te starten middels ALT + F8 (ofwel
Extra - Macro - Macro�s) evenals de macro BeveiligingAan. Daarmee kan
iedereen weer de beveiliging van de bladen afhalen en voegt de beveiliging
alleen iets toe voor de gebruikers die geen benul hebben van macro�s.
Indien je echter de code uitbreidt met een parameter (bijvoorbeeld aan of
uit) dan zijn de macro�s niet meer zichtbaar in de lijst met macro�s. De
macro kan immers niet meer zomaar gestart worden zonder parameter.

Stel de code van BeveiligingUit is

Sub BeveiligingUit()
ActiveSheet.Unprotect ("ww")
End Sub

en de code voor BeveiligingAan is

Sub BeveiligingAan()
ActiveSheet.Unprotect ("ww")
End Sub

Dan kun je beiden vervangen door

Sub Beveiliging(OnOff As Boolean)
If OnOff = False Then
ActiveSheet.Unprotect ("ww")
Else
ActiveSheet.Protect ("ww")
End If
End Sub

en die kun je aanroepen door de regel

Beveiliging False
of
Beveiliging True

Op deze manier kun je in de lijst met macro�s niets meer vinden dat duidt op
beveiliging van de bladen.


Groetjes

Maurrieske

"Jan" <J...@discussions.microsoft.com> schreef in bericht

news:0AD032F1-F7BF-4CE1...@microsoft.com...

j van c

unread,
Sep 27, 2009, 3:08:40 AM9/27/09
to

> ronde = Range("A1").Value

er is niet bepaald welke sheet moet genomen worden.

> Sheets(ronde).Visible = True
> Sheets(ronde).Activate

er wordt niet gecheckt of werkblad 'ronde' wel bestaat

> BeveiligingUit
> BeveiligingAan

ik neem aan dat het om externe procedure gaat


Jan

unread,
Sep 27, 2009, 5:43:02 AM9/27/09
to
Hallo Maurrieske,

Jouw tip betreffende de beveiliging uit/aan subs heb ik al over genomen.
Inderdaad is dit beter alhoewel ik over het algemeen geen gebruikers heb die
verder zoeken als nodig is voor het werken met de werkbladen.

Maar het eerder plaatsen van de beveiligingUit sub heeft niet geholpen. Het
werkblad waaruit de gegevens gekopieerd worden is niet beveiligd en de
beveiliging van het doelblad kan pas uitgezet worden na het inlezen van een
aantal gegevens van het bronblad waarmee bepaald wordt in welk tabblad van
het doelblad gekopieerd moet worden.

Ik heb mijn makroinformatie uit deze reply gehaald om het een beetje
leesbaar te houden.

Heb je nog meer tips? Of iemand anders misschien?
--
Vriendelijke groet, Jan


"Maurrieske" wrote:

> >
> >

Jan

unread,
Sep 27, 2009, 5:46:03 AM9/27/09
to
Range("A1") bevat altijd de juiste informatie waardoor de makro weet welke
waarde ronde krijgt.
En tabblad ronde bestaat ook altijd in de doelwerkmap. Daar zit het probleem
niet.
Wat bedoel je met externe procedure?

Jan
--
Vriendelijke groet, Jan

j van c

unread,
Sep 27, 2009, 7:03:23 AM9/27/09
to
>> > BeveiligingUit
>> > BeveiligingAan
>>
>> ik neem aan dat het om externe procedure gaat
>>
>>
>>

> Wat bedoel je met externe procedure?

een private of punblic functie/sub aanroep zoals
private sub BeveiligingUit()

..
end sub

Jan

unread,
Sep 27, 2009, 7:10:03 AM9/27/09
to
Hallo Maurrieske,

Ik heb het toch nog eens geprobeerd zonder beveiliging op het doelblad. En
dan gaat het inderdaad in een keer goed.

Het probleem is hiermee opgelost.

Hartelijk dank voor je bijdrage.

Maurrieske

unread,
Sep 27, 2009, 9:09:17 AM9/27/09
to
Jan, mijn opmerking over het verplaatsten van de beveiliging er af halen was
ook geplaatst voor het openen van een ander bestand. Op die manier was het
doelblad al niet meer beveiligd voordat je het andere bestand opent. Kijk
nog maar eens naar de plek waar ik adviseer om het te plaatsen. Voor de
regel
Application.Dialogs(xlDialogOpen).Show
en niet erna. Dat het bronblad niet beveiligd is maakt dan niet uit. Het
gaat immers om de beveiliging van het doelblad.

Het zou dus ook moeten werken met de beveiliging er wel op. Maar dan altijd
eerst in de code de beveiliging afhalen, daar waar je wil plakken. Daarna
pas de kopieer opdracht regelen. Excel kan helaas niet plakken meer als er
eerst weer beveiliging afgehaald moet worden. Dit werkt trouwens net zo
indien je met de hand wil kopieren en plakken. Je kunt niet eerst een copy
opdracht geven, vervolgens de beveiliging van een blad afhalen en dan pas
pasten. Excel zal dan niets meer hebben om te plakken...

Ik ben in ieder geval blij voor jou dat jouw probleem opgelost is.

Groetjes, en nog veel plezier bij het werken met VBA.

Maurrieske

"Jan" <J...@discussions.microsoft.com> schreef in bericht

news:B7C164E5-31F5-4149...@microsoft.com...

0 new messages