Juiste waarden zoeken in tabel VBA

Status
Niet open voor verdere reacties.

royb73

Gebruiker
Lid geworden
19 sep 2012
Berichten
228
Beste,

ik heb een tabel met keuzelijst die opgebouwd is vanuit een ander sheet (Infoblad) in Kolom A.
In Kolom B moet de bijbehorende waardes getoond woorden als Keuzelijst op basis van waarde uit kolom A die in sheet "Infoblad" staat.
In kolom C wordt de aantallen ingevuld (handmatig).
In kolom D moet er een berekening gemaakt worden. Op basis van de waarden uit kolom A en B moet in sheet Infoblad gezocht worden naar "Totaal_xx (=variabel)"

Heb een Excel bestand toegevoegd om het een en ander te verduidelijken.

Bekijk bijlage test.xlsm

Mocht de tabellen in Infoblad anders opgebouwd moeten worden, dan is dat geen probleem.

Alvast bedankt.

Groeten,

Roy
 
Haal de samenvoegingen van jouw cellen af op jouw infoblad

In bijgaand bestandje zonder VBA middels een formule
 

Bijlagen

  • test.xlsx
    21,2 KB · Weergaven: 91
Beste Eric,

Bedankt voor je reactie.

Dit is ongeveer wat ik zocht.

Alleen de cel in kolom B moet bij het wijzigen van de waarde in (kolom A) leeg worden. Nu blijft de waarde van de vorige verlichting staan in kolom B.

Mvg

roy
 
Dan heb je idd vba nodig
Zoek even naar 1 van de laatst geplaatste draadjes van snb, precies wat je zoekt
 
Tis gelukt met volgende code om kolom B te legen op basis van wijziging van kolom A.

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
If Target.Column = 1 Then
  If Target.Validation.Type = 3 Then
   Application.EnableEvents = False
   Target.Offset(0, 1).ClearContents
  End If
End If

exitHandler:
  Application.EnableEvents = True
  Exit Sub

End Sub
 
In je bijlage in je openingspost staat nergens in kolom A een validatielijst.
De 'on error resume next' gaat echt niet bij een fout naar de 'exitHandler'.
Zou die naar de 'exitHandler' gaan, ga je sowieso naar 'End Sub' dus 'Exit Sub' is ook overbodig.

Al met al een zeer slechte code.
 
Beste HSV,

Ik had de Excellijst inmiddels aangepast met een validatielijst in kolom A.

Code had ik trouwens gevonden op internet ;).

Maar in ieder geval bedankt voor jouw reactie.

Groeten,

Roy
 
Beste Roy,

Onderstaande code lijkt mij wel voldoende.
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
 If Not Intersect(Target, ListObjects(1).DataBodyRange.Columns(1)) Is Nothing Then Target.Offset(, 1).ClearContents
End Sub
 
Beste,

Het is mij aardig gelukt.

Ik wil nog alleen mbv een VBA code de Bijbehorende VSA waarde tonen uit sheet Infoblad.
De criteria/voorwaarde is als volgt:
1. Waarde uit kolom A (verlichting)
2. Waarde uit kolom B (Type Verlichting).

Hieruit volgt dan de waarde zoals ingevuld in het voorbeeld.

Ik kan dit met formule wel voor elkaar krijgen met vert.zoeken / index alleen krijg ik dit niet voor elkaar met VBA.

Bekijk bijlage test (2).xlsm
 
Verwijder module1.

In module "Algemeen", en niet weer in module1.

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
With ListObjects(1)
 If Not Intersect(Target, Union(.DataBodyRange.Columns(1), .DataBodyRange.Columns(2))) Is Nothing Then
  Application.EnableEvents = False
   Select Case .ListColumns(Target.Column).Index
    Case 1
      Target.Offset(, 1).Resize(, 4).ClearContents
    Case 2
    Set c = Blad4.ListObjects(1).ListColumns("vermogen_" & Target.Offset(, -1)).DataBodyRange.Find(Target, , , 1)
      If Not c Is Nothing Then Target.Offset(, 3) = c.Offset(, 1)
   End Select
   Application.EnableEvents = True
 End If
End With
End Sub
 
Laatst bewerkt:
Dank voor je bericht Harry.

Ik stuur jou mijn originele bestand. Heb hier een formulier gemaakt (is nog niet klaar).

Het is mij helaas niet gelukt. Het gaat om het formulier en TbxEVSA1, 2 en 3 (textboxes) waar de waarde getoond dient te worden (deze moet alleen read-only zijn in het formulier).

Heb nog wat vragen in het bestand gezet, wellicht kun je hiernaar kijken als je tijd hebt aub.

Mvg

Roy
Bekijk bijlage TestTemplate.xlsm
 
Beste Roy,

Het is geen wonder dat het je niet lukt als je niet weet waar je de codes moet plaatsen.
Onderstaande code zoals jij het hebt geschreven hoort niet in module Algemeen maar in het Userform.
Code:
Private Sub CbxSoort1_Change(ByVal Target As Range)

Maar dat gaat ook niet want het is een combobox, en die heeft geen target.
Dus wordt het zo geschreven.
Code:
Private Sub CbxSoort1_Change()
Maar..... die heb je er al in staan.

Het wordt een hele puzzel om dat op orde te brengen, en ik heb zo'n vermoeden dat iemand anders dat moet oplossen.
Je hebt leuke vragen, maar je vervolgvragen zijn niet te overzien.

Ik wens je er veel succes mee.
 
Ik heb krijg de melding Sub of function is niet gedefinieerd bij Listobjects.

Code:
Private Sub CbxSoort1_Change()

With listobjects(1)
 If Not Intersect(Target, Union(.DataBodyRange.Columns(1), .DataBodyRange.Columns(2))) Is Nothing Then
 
  Application.EnableEvents = False
   Select Case .ListColumns(Target.Column).index
    Case 1
      Target.Offset(, 1).Resize(, 4).ClearContents
    Case 2
    Set c = Blad4.listobjects(1).ListColumns("vermogen_" & Target.Offset(, -1)).DataBodyRange.Find(Target, , , 1)
      If Not c Is Nothing Then Target.Offset(, 3) = c.Offset(, 1)
   End Select
   Application.EnableEvents = True
 End If
End With
End Sub

Ik gebruik sheet verlichting als data voor de verlichting waar de gegevens eruit gehaald moeten worden (zie Excel bestand in mijn vorige post).
 
Code:
With [COLOR=#0000ff]sheets("verlichting")[/COLOR].listobjects(1)

Maar de rest van de code gaat ook fout straks.
Je hebt geen target in de combobox_change.

Die code is geschreven voor een change_event in een werkblad.
 
Oke ik ga ermee stoeien. Kijken wat er uit komt. Mijn kennis van VBA is helaas beperkt.
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan