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

VBA: waarde invullen in één kolom als andere kolom niet leeg is

Status
Niet open voor verdere reacties.

tomswaelen

Gebruiker
Lid geworden
8 dec 2004
Berichten
349
Ik heb een Excel waarbij in cel E2 het getal 1 moet worden ingevuld als cel B2 niet leeg is.

Ik zou denken dat het zoiets is:

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
 
If Range("B2") <> "" Then
Range("E2") = "1"
Else: Range("E2") = ""
End If

End Sub

Maar dat werkt niet. Hoe zou dit moeten zijn?

Dit zou ook moeten gelden voor de rijen tot en met rij 31. Ik kan natuurijk de code doen voor elke rij, maar ik vermoed dat er iets bestaat waarmee je dit kunt loopen. Ik heb hier echter totaal geen ervaring mee. Wie kan mij hiermee helpen? :-)
 
Zoiets:
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Row < 32 Then
        Application.EnableEvents = False
        Range("E2") = IIf(Range("B2") <> "", 1, "")
        Application.EnableEvents = True
    End If
End Sub

Maar rij 2 kan dus rij 2 t/m 31 zijn?
 
Laatst bewerkt:
waarom niet met een gewone formule?

In E2
Code:
=IF(B2<>"";1;"")
 
waarom niet met een gewone formule?

In E2
Code:
=IF(B2<>"";1;"")

Gaat niet, omdat de cel ook overschreven moet kunnen worden. De formule gaat dan verloren. De standaardwaarde voor die cel gaat meestal 1 zijn, maar niet altijd.
 
Zoiets:
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Row < 32 Then
        Application.EnableEvents = False
        Range("E2") = IIf(Range("B2") <> "", 1, "")
        Application.EnableEvents = True
    End If
End Sub

Maar rij 2 kan dus rij 2 t/m 31 zijn?

Mijn excuses, ik heb me verkeerd uitgedrukt. Wat ik wil bekomen, is dit:

Als B2 niet leeg is, moet E2 1 worden,
Als B3 niet leeg is, moet E3 1 worden,
enzovoort tot en met B31.

Dit zal allemaal wel rij per rij te coderen zijn, maar ik vermoed dat er een meer eenvoudige manier is.
 
Dan maak je er dit van:
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Row < 32 Then
        Application.EnableEvents = False
        Range("E" & Target.Row) = IIf(Range("B" & Target.Row) <> "", 1, "")
        Application.EnableEvents = True
    End If
End Sub
 
Dat werkt, dankjewel :-)

Vraagje nog: deze code overschrijft nu alles, dus als ik E2 op 2 zet terwijl het volgens de code 1 moet zijn, verandert hij dat terug naar 1.

Hoe maak ik het dat de code eigenlijk maar één keer per lijn werkt, en dat cel E2 nadien aangepast kan worden in eender welke waarde?
 
Zo?
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Row < 32 Then
        Application.EnableEvents = False
        If Range("E" & Target.Row) = "" then
            Range("E" & Target.Row) = IIf(Range("B" & Target.Row) <> "", 1, "")
        End If
        Application.EnableEvents = True
    End If
End Sub
 
Het duurde even voor ik doorhad waarom dit werkte, maar nu begrijp ik het :)

Tot slot: ik heb zo nog een tweede functionaliteit, waarbij H2 leeg moet zijn als C2 leeg is. Ik heb dat geprobeerd met geneste Iif's, maar dat lijkt niet te werken. Wat doe ik fout?

Code:
    If Target.Row < 32 Then
        Application.EnableEvents = False
        If Range("H" & Target.Row) = "" Then
        Range("H" & Target.Row) = Iif(Range("C" & Target.Row) = "", "", IIf(Range("B" & Target.Row) = "Zichtrekening", "02: Transactioneel", "01: Raadpleegbaar"))
        End If
        Application.EnableEvents = True
    End If
 
Plaats eens een voorbeeldbestand. Wat is nu waar van afhankelijk? De invoer in B2:B31 of nog ergens anders? Het volledig quoten van berichten kan je voor de leesbaarheid net zo goed niet doen.
 
Laatst bewerkt:
Voorbeeldbestand kan ik wegens vertrouwelijkheid niet doen (financiële informatie).

Mijn laatste vraag stond hierboven al:

Ik heb zo nog een tweede functionaliteit, waarbij H2 leeg moet zijn als C2 leeg is. Ik heb dat geprobeerd met geneste Iif's, maar dat lijkt niet te werken. Wat doe ik fout?

Code:
    If Target.Row < 32 Then
        Application.EnableEvents = False
        If Range("H" & Target.Row) = "" Then
        Range("H" & Target.Row) = Iif(Range("C" & Target.Row) = "", "", IIf(Range("B" & Target.Row) = "Zichtrekening", "02: Transactioneel", "01: Raadpleegbaar"))
        End If
        Application.EnableEvents = True
    End If
 
Wat jij wil. Als het al te moeilijk is om er een voorbeeld van te maken dan zal elke oplossing ook wel te moeilijk worden. Het herhalen van de vraag heeft geen toegevoegde waarde.
 
Je Iif constructie is niets mis mee.

Zet een onderbrekingspunt met F9 op:
Code:
If Range("H" & Target.Row) = "" Then
En dan vooral doen als range("H" & target.row) niet leeg is.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan