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

Opgelost Melding bij verwijderen kolommen/rijen die gegevens bevatten

Dit topic is als opgelost gemarkeerd
Status
Niet open voor verdere reacties.

Senso

Inventaris
Lid geworden
13 jun 2016
Berichten
11.209
Besturingssysteem
W10 Pro en W11 Pro
Office versie
Office 2007 H&S en Office 2021 Prof Plus
Bij een document met veel kolommen/rijen is het een risico deze te verwijderen als je denkt dat deze zonder waarden/formules zijn. Waarom is daar geen melding? Hoe maak ik die melding? > Waarschuwing: deze kolom/rij bevat gegevens!
 
Probeer eens:

in een module:
Code:
Public myTargetRowBlanks As Long
Public myTargetColumnBlanks As Long

In het codegedeelte achter de sheet:
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
 With Target
     If .Address = .EntireRow.Address Or .Address = .EntireColumn.Address Then
              If Not Target.Cells.Count = myTargetRowBlanks And Not Target.Cells.Count = myTargetColumnBlanks Then
                If MsgBox("Er staat nog data in de te verwijderen rij(en)/kolom(men), toch verwijderen?", vbYesNo) = vbNo Then
                    Application.EnableEvents = False
                    Application.Undo
                    Application.EnableEvents = True
                End If
            End If
       End If
    End With
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
        myTargetRowBlanks = WorksheetFunction.CountBlank(Target.EntireRow)
        myTargetColumnBlanks = WorksheetFunction.CountBlank(Target.EntireColumn)
End Sub
 
Laatst bewerkt:
Je kunt met voorwaardelijke opmaak de eerste cel van een rij/kolom markeren als die rij/kolom waarden bevat.
 
PHP:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
        myTargetRowBlanks = WorksheetFunction.CountBlank(Target.EntireRow)
        myTargetColumnBlanks = WorksheetFunction.CountBlank(Target.EntireColumn)
End Sub

Bij het selecteren van rij en kolom krijg ik > foutopsporing met verwijzing naar die twee regels fout 6.

Je kunt met voorwaardelijke opmaak de eerste cel van een rij/kolom markeren als die rij/kolom waarden bevat.

Een rij of kolom kan verborgen zijn.
 

Bijlagen

Laatst bewerkt:
Yep, dat moet nog ondervangen worden in de SelectionChange, overigens ook selecteren van meerdere rijen en kolommen. Ik kijk er later vandaag nog even naar als er dan nog geen passende oplossing voor je is.
 
Wijzig dit
Code:
Public myTargetRowBlanks As Long
Public myTargetColumnBlanks As Long
naar
Code:
Public myTargetRowBlanks As Double
Public myTargetColumnBlanks As Double
 
Werkt niet. Alle rijen nog te verwijderen.

Je kunt met voorwaardelijke opmaak de eerste cel van een rij/kolom markeren als die rij/kolom waarden bevat.

Wat is dan de formule?
 
Dan weet ik niet welke speciale versie van XL jij hebt maar in mijn versie werkt dit perfect.
De code werkt alleen als je een gehele rij of kolom selecteert en dan Verwijderen kiest, dus niet enkel de gevulde waarden selecteren.
 
In A1

Voorwaardelijke opmaak:

PHP:
=(counta(index(1:1;1;0))>0)
 
Probeer anders dit eens.
Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)

If Target.Columns.count = Columns.count Then
    teller = Application.WorksheetFunction.CountA(Target.EntireRow)
    If teller > 0 Then
        MsgBox "er staan cellen met gegevens in deze rij/rijen" & Chr(10) & _
               "aantal:  " & teller & Chr(10) & _
               "LET OP MET VERWIJDEREN !"
    End If
End If

If Target.Rows.count = Rows.count Then   
    teller = Application.WorksheetFunction.CountA(Target.EntireColumn)
    If teller > 0 Then
        MsgBox "er staan cellen met gegevens in deze kolom/kolommen" & Chr(10) & _
               "aantal:  " & teller & Chr(10) & _
               "LET OP MET VERWIJDEREN !"
    End If
End If

End Sub
 
Voor wat het waard is: hier, net als TS, ook Office 2021 Prof. Plus, en uiteraard werkt de code van E v R, met uitbreiding van Warme bakkertje, wél.
Enkel de code bekijken zou ons al moeten overtuigen dat het niet bepaald versie-afhankelijk zal zijn.
@ Senso,
Je moet natuurlijk wel "nee" antwoorden op de vraag of je toch wil verwijderen... want die "ja" wil je uiteraard wel behouden, niet?
 
Ik gebruik vrijwel altijd Office 2007 op de oude pc omdat de versie 2021 op mijn nieuwe pc niet om aan te zien is.

PHP:
=(AANTALARG(INDEX(1:1;1;0))>0)

Hoe maak ik die omgekeerd? Als ik de huidige invoer worden alle cellen rood. Ik geef liever de cellen een kleur in de kolom van de rij die ik veilig kan verwijderen.
 
Laatst bewerkt:
de versie 2021 op mijn nieuwe pc niet om aan te zien is.
Dat is een kwestie van wennen en dat geldt ook voor de andere versies t/m 365.
 
@Peter 59
Was dat maar zo. Het heeft met de resolutie te maken. En dat heeft weer met de aansluitingen op de beeldschermen te maken. De oude pc gaat via VGA en de nieuwe via HDMI. De kaart zou de resolutie wel kunnen maar dan krijg je zwarte banden en waarschijnlijk moet je dan via het beeldschermmenu dat aanpassen maar dan klopt het voor de oude pc niet meer. Alles gedaan maar niet gelukt.

Alleen het lint neemt 1/3 van het beeldscherm in beslag.

Ja, sorry, mijn fout de eerst gegeven codes werken wel maar ik heb niet doorgeklikt bij Verwijderen. Het is wel vreemd dan bijvoorbeeld regel 12 de waarden niet in beeld blijven en ik krijg net een melding Autoherstel uitgeschakeld? Nog wat meer oefenen lijkt mij het beste.
 
Laatst bewerkt:
raar maar waar: 'omgekeerd' '=0' ipv '>0'
 
Ja, heel mooi, ga ik proberen en ik zet deze op opgelost.
Bedankt voor alle hulp.👍
 
Het is wel vreemd dan bijvoorbeeld regel 12 de waarden niet in beeld blijven
Toemaatje dus, want dat moet je eigenlijk anders bekijken. De betreffende rij of kolom wordt effectief verwijderd (als je op verwijderen klikt;)), vervolgens wordt het event uitgevoerd en als je daarbij aangeeft niet te willen verwijderen wordt de laatste actie teruggedraaid ('undo'). De kwestie is dus niet dat de waarden niet in beeld blijven maar dat ze tijdelijk echt weg waren.
Altijd leuk om helemaal te begrijpen wat er precies gebeurt, toch?

By the way, de v.o. van snb zal je nog enigszins moeten aanpassen als je het ook voor kolommen wil laten werken, maar dat puzzel je misschien liever zelf uit?
 
Nog even met meerdere bereiken die je wilt/per ongeluk gaat verwijderen
in een module:
Code:
Public myTargetRowBlanks As Double
Public myTargetColumnBlanks As Double

en in het codegedeelte van de sheet:
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
 With Target
     If .Address = .EntireRow.Address Or .Address = .EntireColumn.Address Then
              If Not Target.Cells.Count = myTargetRowBlanks And Not Target.Cells.Count = myTargetColumnBlanks Then
                If MsgBox("Er staat nog data in de te verwijderen rij(en)/kolom(men), toch verwijderen?", vbYesNo) = vbNo Then
                    Application.EnableEvents = False
                    Application.Undo
                    Application.EnableEvents = True
                End If
            End If
       End If
    End With
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim ar As Range, r As Range, c As Range, WholeRow As Boolean, WholeColumn As Boolean
myTargetRowBlanks = 0
myTargetColumnBlanks = 0

For Each ar In Selection.Areas
    If Not WholeRow Then WholeRow = ar.Columns.Count = Columns.Count
    If Not WholeColumn Then WholeColumn = ar.Rows.Count = Rows.Count
Next
For Each ar In Selection.Areas
    For Each r In ar.Rows
    If WholeColumn Then Exit For
      If WholeRow Then
        myTargetRowBlanks = myTargetRowBlanks + WorksheetFunction.CountBlank(r)
        Else
        myTargetRowBlanks = myTargetRowBlanks + WorksheetFunction.CountBlank(r.EntireRow)
        End If
    Next
    For Each c In ar.Columns
      If WholeRow Then Exit For
        If WholeColumn Then
            myTargetColumnBlanks = myTargetColumnBlanks + WorksheetFunction.CountBlank(c)
        Else
            myTargetColumnBlanks = myTargetColumnBlanks + WorksheetFunction.CountBlank(c.EntireColumn)
        End If
    Next
Next

End Sub
 
Bij kolommen kun je veel sneller kijken of er waarden in staan. Met rijen over tig kolommen is dit veel lastiger en tijdrovend.

Ik puzzel, (meer prutsen op goed geluk) het genoemde liever niet zelf uit omdat ik oud ben, halfblind ben en deze zaken mij ontzettend veel tijd kosten.

Gelukkig krijg je op dit forum adequate informatie maar op internet niet. Google vervormt ook vaak de vraag en dan krijg je niet het juiste resultaat en staat er een antwoord op de vraag dan is het toch weer even anders. Vertel mij nou eens waar staan de antwoorden uit deze topic één op één op internet? Uren zoeken en prutsen kost dat. De vraag is duidelijk en simpel. Ik zeg niet dat de oplossing eenvoudig is. Kost jullie ook tijd en werk.

Bedankt voor de het werk en de inzet.👍
 
We zijn (gelukkig maar) niet allemaal hetzelfde, zo ken ik een pak mensen die liever een klein duwtje in de goede richting krijgen, en daarna heel wat voldoening halen uit het feit dat ze zelf een oplossing hebben bedacht. Daarom bedoelde ik geenszins dat je het zelf maar moest in orde zien te krijgen, en nog veel minder dat je het op internet zou moeten zoeken!

Je opmerking over kolommen zal misschien voor jezelf wel opgaan, maar ikzelf (om zo maar iemand als voorbeeld te nemen) werk vaak met tabellen die vele duizenden records (lees: rijen) bevatten. Kijken of daar waarden in staan hoef ik uiteraard nooit te doen (ik heb nooit lege kolommen, rijen trouwens ook niet).

Dit gezegd zijnde: hierbij dus een bestandje waarin de v.o. voor rijen én kolommen zit.
 

Bijlagen

Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan