vba activeren bij het openen van een ander worksheet

Status
Niet open voor verdere reacties.

Robert Smidt

Gebruiker
Lid geworden
26 mei 2009
Berichten
901
Beste Helpmij'ers,

Ik heb een code die informatie overbrengt (kopieert) naar een ander werkblad, vervolgens moet deze vanaf de naastliggende cellen een berekening maken. Dat werkt alleen wanneer ik op de betreffende regel bijvoorbeeld een klik geef, echter dient dit automatisch te gaan nadat de gegevens gekopieerd zijn.

De formule om de gegevens te transporteren (kopiëren) is:

Code:
     Sheets("Afschrijving").Range("A" & Rows.Count).End(xlUp).Offset(1).Resize(, 4).Value = Array _
                (Range("C" & ActiveCell.Row), Range("D" & ActiveCell.Row), Range("F" & ActiveCell.Row), Range("M" & ActiveCell.Row))
                Application.Goto Sheets("Afschrijving").[a1].End(xlDown).Offset(0, 3) 'plaats cursor

De formule in het betreffende werkblad (Afschrijving) is:
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False

If Range("D" & Target.Row) <> "" And Range("E" & Target.Row) = "" And Range("C" & Target.Row) <> "Gebouwen" Then Range("E" & Target.Row) = Range("D" & Target.Row) * 0.1
If Range("D" & Target.Row) <> "" And Range("G" & Target.Row) = "" And Range("C" & Target.Row) <> "Gebouwen" Then Range("G" & Target.Row) = 5

Application.EnableEvents = True

End Sub

Ik zoek dus een vervanger voor:
Code:
Private Sub Worksheet_Change(ByVal Target As Range)

Het is dus de bedoeling dat de code wordt geactiveerd nadat de gegevens zijn gekopieerd.

Een reactie zie ik met veel belangstelling tegemoet.

Robert
 
Volgens mij kan dat er direct achteraan. Alleen even de juiste waarde voor Regel bepalen:
Code:
    regel = 1
    With Sheets("Afschrijving")
        If .Range("D" & regel) <> "" And .Range("E" & regel) = "" And .Range("G" & regel) = "" Then
            If .Range("C" & regel) <> "Gebouwen" Then
                .Range("E" & regel) = .Range("D" & regel) * 0.1
                .Range("G" & regel) = 5
            End If
        End If
    End With
 
Laatst bewerkt:
Helaas werkt de code niet, wanneer ik "stop" in de code zet en handmatig met F8 verder ga zie ik dat hij onderstaande code skipt.
Code:
If .Range("D" & regel) <> "" And .Range("E" & regel) = "" And .Range("G" & regel) = "" Then

m.a.w. vba ziet deze regel niet als een actieve regel.
 
Met alleen een stukje code en zonder een voorbeeld document krijg je nooit een direct werkend antwoord.
 
Klopt, het betreft ook een heel groot bestand en heb gehoopt dat het antwoord vrij eenvoudig was. Ik heb wel de indruk dat jij precies weet wat de bedoeling is. Ik zal proberen een voorbeeld te maken.
 
Daar zijn ze weer: samengevoegde cellen.
Excel is een rekenprogramma, geen DTP-programma.
 
Laatst bewerkt:
Oplossing

Na avonden er mee te hebben geëxperimenteerd, heb ik de oplossing. Voor de liefhebbers.

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False

If Range("Q" & Target.Row) = "" Then Range("Q" & Target.Row) = "Afschrijving geboekt"
    Sheets("Afschrijving").Range("A" & Rows.Count).End(xlUp).Offset(1).Resize(, 7).Value = Array _
    (Range("C" & ActiveCell.Row), Range("D" & ActiveCell.Row), Range("F" & ActiveCell.Row), Range("M" & ActiveCell.Row), Range("M" & ActiveCell.Row) * 0.1, , "5")
    Application.Goto Sheets("Afschrijving").[a1].End(xlDown).Offset(0, 4) 'plaats cursor      
Application.EnableEvents = True
End Sub

Iedereen die mee heeft gedacht, heel hartelijk dank.
 
Waarom gebruik je Activecell ?
 
Ook is dat niet het openen van een werkblad maar een wijziging op het werkblad.
 
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
  Application.EnableEvents = False

  cells(Target.Row,17) = "Afschrijving geboekt"
  with Sheets("Afschrijving").cells(Rows.Count,1).End(xlUp)
    .Offset(1).Resize(, 7).Value = Array(cells(target.Row,3), cells(target.row,4), cells(target.Row,6), cells(target.Row,12), cells(target.Row,12) * 0.1, , "5")
    Application.Goto .Offset
  end with 
    
  Application.EnableEvents = True
End Sub

Zoals HSV als zei: studeer nog eens op de betekenis van Target.
 
Laatst bewerkt:
Ik heb ooit die code gekregen waar activecell gebruikt werd en omdat dat functioneerde heb ik het nu weer gebruikt en laat het in de nieuwe situatie ook werken :).

Ik sla alle codes die ik hier krijg op in een Worddocument, dit doe ik om te voorkomen dat ik voor de tweede keer dezelfde vraag stel.

Het klopt dat ik er nu ook wat raar tegen aan keek, normaal gebruik ik altijd "target".

Ik moet zeggen dat de laatste oplossing weer een verrijking van mijn kennis is. Allen heel erg bedankt...heb overigens inmiddels weer een vraag, ben ECHT blij met jullie...:thumb:
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan