• 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 suggestie van ingevoerde tekst en waardes

Status
Niet open voor verdere reacties.

mvanbe

Gebruiker
Lid geworden
7 mrt 2018
Berichten
87
Beste Mensen,

Bij deze een kleine vraag waar hopelijk iemand het verlossende antwoord op heeft; voor mij tot nu een grote uitdaging

Ik heb een invoersheet waar ik in een vaste opmaak inventarisaties wegschrijf. Nu komt het regelmatig voor dat er repeterende objecten zijn.
De tabel geeft automatisch in kolom D "Omschrijving" een suggestie van wat reeds is ingevoerd; is het ook mogelijk dat bij deze suggestie ook de kolommen I en J worden gekopieerd?

voorbeeld.PNG
 

Bijlagen

  • Voorbeeld suggestie.xlsx
    11,8 KB · Weergaven: 35
Laatst bewerkt:
Plaats anders even je bestand
 
Je zou het zo kunnen doen. De kolommen R S en T zijn verborgen. Deze worden automatisch gevuld met een macro waarin je vervolgens kunt zoeken vanuit je tabel.
 

Bijlagen

  • Voorbeeld suggestie (Automatisch opgeslagen).xlsm
    16,9 KB · Weergaven: 25
Zonder extra kolommen en de intensieve selectionchange.
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim old, c As Range
With Application
   .EnableEvents = False
 If Not Intersect(Target, ListObjects(1).Range.Columns(3)) Is Nothing Then
   old = Target
   .Undo
 Set c = ListObjects(1).Range.Columns(3).Find(old, , , xlWhole)
  If Not c Is Nothing Then
     Target.Resize(, 7) = Array(old, "", "", "", "", c.Offset(, 5), c.Offset(, 6))
   Else
     .Undo
   End If
  End If
  .EnableEvents = True
 End With
End Sub
 
Hartelijk dank heren! Beide opties werken! Hiervoor mijn dank en compliment.

Heb het nog niet uitgebreid getest maar ik merk bij de eerste optie een lichte vertraging; wellicht een wat zware belasting.

De 2de optie doet het subliem; alleen deze raakt overstuur zodra er regels worden ingevoegd, verwijderd, gekopieerd of geplakt. Is daar misschien een oplossing voor te bedenken?
 
Een intelligente tabel vergt toch een andere benadering dan gedacht.

Test het zo maar eens weer.
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim old, c As Range
With Application
   .EnableEvents = False
 If Not Intersect(Target, ListObjects(1).DataBodyRange.Columns(3)) Is Nothing Then
 If Not Target Is Nothing And Target.Count = 1 Then
   old = Target
   .Undo
 Set c = ListObjects(1).Range.Columns(3).Find(old, , , xlWhole)
  If Not c Is Nothing Then
     Target.Resize(, 7) = Array(old, "", "", "", "", c.Offset(, 5), c.Offset(, 6))
   Else
     .Undo
   End If
  End If
  End If
  .EnableEvents = True
  .CutCopyMode = False
 End With
End Sub
 
Bedankt voor het meedenken! Beide oplossingen werken en de correctie op de laatste werkt perfect. Dank hiervoor
 
Toevoeging; op beide oplossingen werkt de UNDO functie niet meer; verklaarbaar door de VBA functie maar is er misschien een handige oplossing of work-around om dit (tijdelijk) op te lossen?
 
Laat eens aan de hand van je bestand zien met welke handelingen je doet om dat te realiseren.
 
Wellicht was ik wat voorbarig met mijn conclussie; een nieuwe ronde leert dat de UNDO functie gewoon actief blijft. Ik blijf het even actief volgen! Bedankt HSV voor betrokkenheid
 
Je mag er ook dit van maken als je het niet vertrouwd.

Code:
Else
    Target = old
 
@ HSV; Mag ik nog éénmaal een beroep doen op je kennis en kunde?

Ik heb je functie geplaatst op 2 tabbladen; 1 origineel zoals je me hebt geholpen en bij 1 heb ik een kolom (F) toegevoegd. Helaas werkt de functie nu niet meer en kan ik niet ontdekken wat gewijzigd moet worden of wat het verschil is. (Ook niet op goed geluk :) )

Onderstaand je code en een afbeelding van de nieuwe situatie.



Code:
Private Sub Worksheet_Change(ByVal Target As Range)

Dim old, c As Range
With Application
   .EnableEvents = False
 If Not Intersect(Target, ListObjects(1).DataBodyRange.Columns(4)) Is Nothing Then
 If Not Target Is Nothing And Target.Count = 1 Then
   old = Target
   .Undo
 Set c = ListObjects(1).Range.Columns(4).Find(old, , , xlWhole)
  If Not c Is Nothing Then
     Target.Resize(, 7) = Array(old, "", "", "", "", "", c.Offset(, 5), c.Offset(, 6))
   Else
     .Undo
   End If
  End If
  End If
  .EnableEvents = True
  .CutCopyMode = False
 End With

 
End Sub

[ATTACH]347021.vB[/ATTACH]
 

Bijlagen

  • test deelbedrag.PNG
    test deelbedrag.PNG
    19,4 KB · Weergaven: 51
Laatst bewerkt:
Op goed geluk zonder wat de bedoeling is valt vaak tegen.
Ik zie dat je van de 3 een 4 gemaakt hebt.
Wil je daarin typen?

Plaats eens je bestand met de veranderde situatie.
 
Werkt prima toch, of is er iets niet naar je zin?
 
Klopt! Het werkt prima;

Tussen plaatsen en reactie heb ik het met goed geluk toch goed aangepast; Omschrijving inderdaad (kolom 4) en onderstaand. De werking heb ik nog niet kunnen ontdekken maar dit is niveau gevorderden denk ik :)

Target.Resize(, 7) = Array(old, "", "", "", "", "", c.Offset(, 5), c.Offset(, 6))

Bedankt voor je hulp!
 
Zo schrijf je het in een keer weg, maar als er al iets staat in de kolommen F,G,H,I, en J dan worden ze wel leeggemaakt door de "" in de array.

Anders wordt het zoiets.

Code:
Target = old
target.offset(,5) =  c.Offset(, 5)
target.offset(,6) = c.Offset(, 6)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan