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

excel of vba vergelijken 2 rijen op volgorde en waarden

Status
Niet open voor verdere reacties.

laszlon

Gebruiker
Lid geworden
24 aug 2012
Berichten
8
Ik heb al van alles geprobeerd met voorwaardelijke opmaak en met gegevensvalidatie.

gegevens:
Ik heb een excel workbook waarin een tablad (blad2) verborgen zit. In regel1 in dit verborgen blad staan een aantal items A1="Piet" B1="Jan" C1="Kees" etc....
De gebruiker kopieert uit een andere applicatie een regel dmv plakken gescheiden door tabs in blad1 van de worksheet. Als de gebruiker het goed doet dan is hert resultaat A1="Piet" B1="Jan" C1="Kees" etc....

Vraagstelling:
Nu kan het voorkomen dat de instelling van die andere applicatie niet goed is ingesteld waardoor na het plakken A1 bijvoorbeeld "Jan" is of B1 Bijvoorbeeld "Niels" is.
Wat ik graag wil is, wanneer de volgorde of waarden na het plakken van de regel niet gelijk zijn als vastgelegd in Blad 2, dat de gebruiker 1x een waarchuwing krijgt, een notificatie dat de volgorde of invulling niet klopt. De gebruiker moet dan in de bronapplicatie eerst de gegevens juist ordenen volgens een protocol en vervolgens de procedure van plakken opnieuw doen.
Ik had het eerst zo dat de regel rood werd bij fout plakken. Maar dat werd door de gebruikers vaak genegeerd. Dus dat werkt niet zo goed. gegevensvalidatie werkt ook niet want het is plakken in een cel en niet typen in een cel.
Is er wellicht iets mogelijk via VBA? De melding moet wel eenmalig zijn geldend voor de hele regel. Zodat niet bij elke fout achter elkaar meldingen komen.

Alvast iedereen hartelijk dank voor het meedenken!
 
Oke, Ik heb het bestand even bijgesloten. Er staat niet zoveel in maar misschien is het dan duidelijker.
In regel 1 van blad 1 wordt later een regel uit een ander applicatie geplaatst dmv plakken. Deze regel moet hetzelfde zijn als de regel weergegeven in blad 2.
 

Bijlagen

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
  If Target.Row > 1 Then Exit Sub
  b = False
  ar = Cells(1).CurrentRegion.CurrentRegion.Resize(1)
  ar1 = Sheets("Blad2").Cells(1).CurrentRegion.Resize(1)
  c00 = "teveel of te weinig"
  If Not IsArray(ar) Then b = True
  
  If Not b Then
    If UBound(ar, 2) <> UBound(ar1, 2) Then b = True
  End If
  
  If Not b Then
    c00 = ""
    For j = 1 To UBound(ar, 2)
      If ar(1, j) <> ar1(1, j) Then
        b = True
        c00 = c00 & ar(1, j) & " komt niet overeen met " & ar1(1, j) & vbLf
      End If
    Next j
  End If
  If b Then MsgBox c00
End Sub
 
Laatst bewerkt:
Dankjewel werkt geweldig. Maar het regeert ook op de breedte van de cel klopt dat?
Is het mogelijk dat het alleen reageert op de waarden van een cel?
 
Wat bedoel je met de breedte van de cel? Ik zie nergens iets van ColumnWidth
 
Bij het testen geeft ie aan Piet komt niet overeen met Piet. Ik vroeg me af hoe dat kwam gezien volgorde en waarde van de cel gelijk is.
 
Als je in de bron bijvoorbeeld Word bestand de namen Jan Piet Kees Miep achter elkaar zet (gescheiden door een tab) vervolgens kopieert en in A1 plaatst van de excel.
Geeft de code aan bijv Piet komt niet overeen met Piet.
 

Bijlagen

Plaats een voobeeldbestand met hoe je de gegevens in Blad1 hebt staan. Van VBA begrijp je blijkbaar niet zoveel.

Code:
ar = split(Cells(1))
?
 
Als de eerste regel van blad1 altijd gelijk moet zijn aan blad2.

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
 Application.EnableEvents = False
  If Target.Row = 1 Then Sheets(Array("blad1", "blad2")).FillAcrossSheets Sheets("blad2").Rows(1)
Application.EnableEvents = True
End Sub
Of:
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Row = 1 Then
  Application.EnableEvents = False
    rows(1) = Sheets("blad2").Rows(1)
   Application.EnableEvents = True
 End If
End Sub

Zo kan er niets verkeerd gaan tijdens het plakken.
Het maakt niet uit wat iemand doet in de eerste rij van blad1.
 
Als "Piet " in je Word-bestand wordt geschreven met een spatie aan het eind, dan is "Piet" niet "Piet ".
 
-Ja dat was ook mijn eerste gedachte maar dat is het niet.
probeer maar: in blad2 of in een ander werkblad gewoon ergens bijvoorbeeld in cel K20 "Jan" typen, in I20 "Piet", in J20 "Kees" en in K20 "Miep" (zie ook voorbeeldbestand in de bijlage hier)
vervolgens dit rijtje selecteren en kopiëren. (ctrl+C)
vervolgens plakken in blad 1 in regel A1.(ctrl+V)
 

Bijlagen

In je Word-bestand staat een spatie achter Piet.

Kopieer het en plak het in Excel.
Selecteer de cel met Piet en druk F2.
Nu zie je de spatie.
 
Ik kom er net achter ja.
De spatie zat in blad 2. Dom...Dom...Dom... ;)

Dat ander voorstel was ook een mooie inderdaad. Alleen is niet geschikt voor het doel. De eerste regel is namelijk een rij attributen waaronder een heleboel metadata onder gaat hangen. deze data is steeds anders. Alleen de eerste regel blijft altijd hetzelfde. De bron applicatie levert ook steeds de attribuut waarden mee van regel 1. Anders was het inderdaad eenvoudiger op te lossen.

Iedereen heel hartelijk dank voor het meedenken. Ik zal de code proberen te ontwarren zodat ik er zelf ook iets van leer.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan