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

Automatische macro's?

Status
Niet open voor verdere reacties.

the_dannyboy

Gebruiker
Lid geworden
2 jan 2002
Berichten
968
Hallo allemaal !!

Nog ff een probleempje met de macro's bij excel: het is me nu (met hulp van Helpmij.nl ;) ) gelukt om een goede macro te maken voor hetgene dat ik nodig heb.

Nu wil ik deze macro in dezelfde kolommen hebben, maar dan voor 13 pagina's.

Hoe doe ik dit?

Snappie?

Nee?

Kijk dan maar ff naar de bijlage...
 

Bijlagen

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
  If Not Intersect(Target, [D:D]) Is Nothing Then _
    Target.Offset(0, 2) = Target.Offset(0, 2) + Target
  If Not Intersect(Target, [E:E]) Is Nothing Then _
    Target.Offset(0, 1) = Target.Offset(0, 1) - Target
  If Not Intersect(Target, [C:C]) Is Nothing Then _
    Target.Offset(0, 3) = Target
  If Target.Address = "$K$1" Then _
    [C2] = [F2]
End Sub

Welke regel er met het laatste if-statement moet wijzigen begrijp ik niet, maar misschien kan je hier al mee verder.
 
Laatst bewerkt:
Die laatste regel moet de standaard voorraad veranderen in de nieuwe voorraad...

Zet je smilies trouwens ff uit, dan is't wat beter leesbaar ;)
 
Eerst nog de aangepaste code voor het laatste if-statement
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim c As Range
  If Not Intersect(Target, [D:D]) Is Nothing Then _
    Target.Offset(0, 2) = Target.Offset(0, 2) + Target
  If Not Intersect(Target, [E:E]) Is Nothing Then _
    Target.Offset(0, 1) = Target.Offset(0, 1) - Target
  If Not Intersect(Target, [C:C]) Is Nothing Then _
    Target.Offset(0, 3) = Target
  If Target.Address = "$K$1" Then
    Application.EnableEvents = False
    For Each c In Range("C2", [C2].End(xlDown))
      c = c.Offset(0, 3)
    Next c
    Application.EnableEvents = True
  End If
End Sub
En dan nog een woordje uitleg.

Target is de cel waarin de wijziging plaatsvindt.

Met de methode Intersect wordt gecontroleerd of het Target binnen een bepaalde range valt, in dit geval wordt is range telkens een volledige kolom.

Met de eigenschap Offset wordt een cel genomen die x rijen en x kolommen verwijderd is van de Target-cel.

In het laatste If-statement wordt de waarde alle cellen vanaf C2 naar beneden tot voor de eerste lege cel vervangen door de waarde van de cel in dezelfde rij in kolom F. De eigenschap EnableEvents is hier nodig omdat anders de macro zal willen starten bij elke wijziging in kolom C.
 
ok, alles doet het, behalve wanneer je een kolom of 10 hebt, en er vervolgens in het rode vak iets tiept, dan verandert hij er maar een paar goed...
 
Heb je dan blanco cellen staan in kolom C tussen de gevulde cellen, want anders zou de macro alles moeten nemen.
 
In het laatste If-statement wordt de waarde alle cellen vanaf C2 naar beneden tot voor de eerste lege cel vervangen door de waarde van de cel in dezelfde rij in kolom F.
Vervang de For Next instructie door deze regel om voorbij de lege cellen te geraken:
Code:
    For Each c In Range("C2", [C65536].End(xlUp))
 
Ok, en dan nog ff m'n laatste vraagje: dit progje is voor m'n moeder, is er iets om te voorkomen dat als ze iets verkeerds (bijvoorbeeld letters ofzo) intypt, dat er dan een messagebox of iets komt zodat ze niet steeds in vb komt...
 
Voeg volgende code toe in het begin van de macro (net onder de Dim-instructie):
Code:
  If Not Intersect(Target, [C:E]) Is Nothing _
    And Not IsNumeric(Target) Then
    MsgBox "invoer foutief"
    Exit Sub
  End If
 
Ow, ja... nu zie ik de overeenkomst met het stuk vb dat ik al ken...

Maar nu komt m'n moeder net weer met iets aanzetten: op de eerste regel van iedere bladzijde moet tekst komen...

Dit graag steeds zonder het berichtje...

Kun je me nog een laatste keer hulp verlenen??
 
Pas de ranges aan als volgt:
Code:
[C:C] wordt [C2:C65536]
[D:D] wordt [D2:D65536]
[E:E] wordt [E2:E65536]
[C:E] wordt [C2:E65536]
 
ja, ok...

Maar dat is alleen voor het begin van een blad, niet voor het begin van een pagina die je af kunt drukken...
 
Je kan de titels op elke pagina laten herhalen door deze in te stellen in Bestand/Pagina-instelling op het tabblad Blad.
 
ik weet het ik ben erg irritant en ik ben normaal echt nie zo dom, maar 'k kan 't nie vinden...:o
 
ga naar Bestand/Pagina-instelling
selecteer het tabblad Blad
hier staan onder de titel Titels afdrukken de opties Rijen bovenaan op elke pagina en Kolommen links op elke pagina.
Duid hier de rij(en) en/of kolom(men) aan die op elke pagina moeten afgedrukt worden.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan