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

algemene macro

Status
Niet open voor verdere reacties.

Peter404

Gebruiker
Lid geworden
5 jun 2007
Berichten
76
Hallo mensen

Ik heb de volgende uitdaging. Ik ben een programmaatje voor interne controles aan het bouwen in excel. Jaarlijks worden in ons bedrijf 85 interne controles uitgevoerd welke ik review. Om efficienter te werken heb ik een formulier gemaakt wat dus dadelijk 85 keer wordt ingevuld. Na de review moeten verschillende rijen naar verschillende bladen worden gekopieerd voor verschillende rapportages. Ik heb een macro kunnen maken die het kopieren mogelijk maakt. Nu wil ik het reviewblad voor elke controle gebruiken, maar de macro (Sign) kopieert alleen de gegevens van het eerste review blad. Ik weet waar de fout zit, maar kan er geen verbetering op verzinnen.

Kunnen jullie mij helpen?

Groeten
Peter
 

Bijlagen

Hallo Peter,

Je kunt toch na de End With
met
Code:
Sheets("Review (2)").Activate
naar het tweede Review blad gaan en daar op dezelfde manier te werk gaan als voor de End With?
 
Hallo Peter,

Je kunt toch na de End With
met
Code:
Sheets("Review (2)").Activate
naar het tweede Review blad gaan en daar op dezelfde manier te werk gaan als voor de End With?

Hallo Thoralf

Dat klopt maar dan moet ik 85 macro's gaan maken toch. Ik zou graag één macro willen maken die alle bladen kan bedienen.

Groeten
Peter
 
Waarom 85 macro's maken? Je kunt toch de reviewbladen schonen nadat je ze hebt weggeschreven? Of is het zo dat je de gegevens per review niet in één keer aangeleverd krijgt? En ook als je de gegevens per review moet bewaren, wat let je dan om van de ingevulde review-bladen een copieblad te maken, met weglating van de opdracht knop, en als je daarbij voor een standaardnaamgeving, gekoppeld aan de review, hanteert kun je ook controleren op het dubbel opnemen van een review.
 
in een loopje alle werkbladen aflopen en enkel diegene die beginnen met "review" worden verder behandeld en dus doorgekopieerd naar je verzamelbladen. Mogelijks heb ik de kopieeropdrachten slecht begrepen, maar het idee blijft overeind.

Code:
Sub Sign()
'
' Sign Macro
' De macro is opgenomen op 1-11-2010 door LOZPWA01.
'

'
  Dim sh       As Worksheet
  For Each sh In Sheets                                    'loop ieder werkblad af
    If LCase(Left(sh.Name, 6)) = "review" Then             '1e 6 karakters zijn "review" (kleine letters)

      With Sheets("Managementrapportage IC")               'in dit werkblad
        .Rows("2:6").Insert Shift:=xlDown                  'vanaf 2e rij zoveel rijen invoegen
        sh.Range("C25:H29").Copy .Range("A2")              'kopieer blok uit een review-blad naar hier
      End With

      With Sheets("Memo Imc")                              'in dit werkblad
        .Rows("2:10").Insert Shift:=xlDown                 'vanaf 2e rij zoveel rijen invoegen
        sh.Range("C32:O40").Copy .Range("A2")              'kopieer blok uit een review-blad naar hier
      End With

      With sh.Range("L2")                                  'op je zoveelste review-blad, cel L2
        .FormulaR1C1 = "a"
        With .Characters(Start:=1, Length:=1).Font
          .Name = "Marlett"
          .FontStyle = "Vet"
          .Size = 10
          .Strikethrough = False
          .Superscript = False
          .Subscript = False
          .OutlineFont = False
          .Shadow = False
          .Underline = xlUnderlineStyleNone
          .ColorIndex = 5
        End With

      End With
    End If
  Next
End Sub
 
Hallo


Op zich een goede oplossing. er zit echter één maar aan. Elke review moet afzonderlijk gekopieerd worden, want de de reviews vinden nooit tegelijk plaats (verspreid over het jaar). Als ik na elke review op Sign klik komen er veel dubbelingen in de rapportages. Ik wil ook graag de inhoud van de reviews bewaren.

Groeten
Peter

in een loopje alle werkbladen aflopen en enkel diegene die beginnen met "review" worden verder behandeld en dus doorgekopieerd naar je verzamelbladen. Mogelijks heb ik de kopieeropdrachten slecht begrepen, maar het idee blijft overeind.

Code:
Sub Sign()
'
' Sign Macro
' De macro is opgenomen op 1-11-2010 door LOZPWA01.
'

'
  Dim sh       As Worksheet
  For Each sh In Sheets                                    'loop ieder werkblad af
    If LCase(Left(sh.Name, 6)) = "review" Then             '1e 6 karakters zijn "review" (kleine letters)

      With Sheets("Managementrapportage IC")               'in dit werkblad
        .Rows("2:6").Insert Shift:=xlDown                  'vanaf 2e rij zoveel rijen invoegen
        sh.Range("C25:H29").Copy .Range("A2")              'kopieer blok uit een review-blad naar hier
      End With

      With Sheets("Memo Imc")                              'in dit werkblad
        .Rows("2:10").Insert Shift:=xlDown                 'vanaf 2e rij zoveel rijen invoegen
        sh.Range("C32:O40").Copy .Range("A2")              'kopieer blok uit een review-blad naar hier
      End With

      With sh.Range("L2")                                  'op je zoveelste review-blad, cel L2
        .FormulaR1C1 = "a"
        With .Characters(Start:=1, Length:=1).Font
          .Name = "Marlett"
          .FontStyle = "Vet"
          .Size = 10
          .Strikethrough = False
          .Superscript = False
          .Subscript = False
          .OutlineFont = False
          .Shadow = False
          .Underline = xlUnderlineStyleNone
          .ColorIndex = 5
        End With

      End With
    End If
  Next
End Sub
 
je schrijft daar nu een "a" weg in L2 van de "review" die je net behandeld hebt. Dus als je daarop zou testen en in de nieuwe "reviews" staat daar geen "a", dan heb je het rond. Desnoods gebruik je een andere cel om te markeren dat hij al weggeschreven is.
 
Hallo cow18

Ik begrijp wat je bedoelt. Hoe zou de macro er dan uit komen te zien? Ik ben niet zo thuis in visual basic.

Groeten
Peter


je schrijft daar nu een "a" weg in L2 van de "review" die je net behandeld hebt. Dus als je daarop zou testen en in de nieuwe "reviews" staat daar geen "a", dan heb je het rond. Desnoods gebruik je een andere cel om te markeren dat hij al weggeschreven is.
 
vooraan je module definieer je welke cel je wilt gebruiken om je tabblad te merken dat die al behandeld is.
Vervolgens vraag je die cel af en later schrijf je er iets naar weg
Code:
Option Explicit

[COLOR="red"]Const MerkerCel As String = "AA1"                          'ergens een vrije cel in elk tabblad "review..." waar je iets mag zetten om aan te geven dat dat tabblad al behandeld is.[/COLOR]
Sub Sign()
'
' Sign Macro
' De macro is opgenomen op 1-11-2010 door LOZPWA01.
'

'
  Dim sh       As Worksheet
  For Each sh In Sheets                                    'loop ieder werkblad af
    If LCase(Left(sh.Name, 6)) = "review" [COLOR="red"]And sh.Range(MerkerCel) <> "Behandeld[/COLOR]" Then  '1e 6 karakters zijn "review" (kleine letters) en blad nog niet behandeld

      With Sheets("Managementrapportage IC")               'in dit werkblad
        .Rows("2:6").Insert Shift:=xlDown                  'vanaf 2e rij zoveel rijen invoegen
        sh.Range("C25:H29").Copy .Range("A2")              'kopieer blok uit een review-blad naar hier
      End With

      With Sheets("Memo Imc")                              'in dit werkblad
        .Rows("2:10").Insert Shift:=xlDown                 'vanaf 2e rij zoveel rijen invoegen
        sh.Range("C32:O40").Copy .Range("A2")              'kopieer blok uit een review-blad naar hier
      End With

      With sh.Range("L2")                                  'op je zoveelste review-blad, cel L2
        .FormulaR1C1 = "a"
        With .Characters(Start:=1, Length:=1).Font
          .Name = "Marlett"
          .FontStyle = "Vet"
          .Size = 10
          .Strikethrough = False
          .Superscript = False
          .Subscript = False
          .OutlineFont = False
          .Shadow = False
          .Underline = xlUnderlineStyleNone
          .ColorIndex = 5
        End With
        [COLOR="red"]sh.Range(MerkerCel) = "Behandeld" 'markeer dat blad, zodat je weet dat die al behandeld is[/COLOR] 
       
      End With
    End If
  Next
End Sub
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan