• 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 Rij verwijderen vanuit een ander tabblad dmv button

Status
Niet open voor verdere reacties.

jen001

Gebruiker
Lid geworden
2 apr 2010
Berichten
22
Beste,

Ik zit met het volgende probleem. De onderstaande formule die ik hier gebruik werkt prima vanuit het zelfde tabblad. Nu heb ik in een ander tabblad een knop gemaakt om deze macro te activeren, kopieren naar een ander tabblad werkt maar het verwijderen vervolgens niet. Ik begrijp waar het verkeerd loopt ik kom er alleen niet achter hoe dit op te lossen. Ik heb de regel waar het verkeerd loopt rood gekleurd.



Sub Niet_Migreren()

Application.ScreenUpdating = False
Dim c As Range
Dim rw As Long

For Each c In ['mapping'!G2:G65536]
If c = "Ja" Then
c.Rows.EntireRow.Copy

['Niet_migreren'!A65536].End(xlUp).Offset(1, 0).Insert Shift:=xlDown

End If
Next

For rw = ActiveSheet.UsedRange.Rows.Count To 1 Step -1
If Cells(rw, "G") = "Ja" Then Rows(rw).Delete
Next
With Application

.CutCopyMode = False
.ScreenUpdating = True
End With

End Sub
 
jen001

Er staat Activesheet.

Kijk eens welke sheet er is geselecteerd?
 
jen001

Er staat Activesheet.

Kijk eens welke sheet er is geselecteerd?

Dat klop.t De sheet waar de button instaat staat op active. Als ik de formule draai vanuit mapping werkt deze goed.

Maar ik wil dat de formule vanuit het werkblad macro bediend wordt dit is waar ik de buttons heb geplaatst.
 
dus dan zul je 'Activesheet' moeten vervangen door een verwijzing naar het werkblad waar de rijen die je wil verwijderen zich bevinden.

For rw = Worksheets("die ander").UsedRange.Rows.Count To 1 Step -1

Of denk ik te makkelijk?
 
Heb je code getest, maar werkt goed bij mij. :rolleyes:
Ps. Getest in versie 2003, maar zou i.p.v. Delete, ClearContents gebruiken.
Anders verdwijnt je knop op het laatst.
 
Laatst bewerkt:
dus dan zul je 'Activesheet' moeten vervangen door een verwijzing naar het werkblad waar de rijen die je wil verwijderen zich bevinden.

For rw = Worksheets("die ander").UsedRange.Rows.Count To 1 Step -1

Of denk ik te makkelijk?

De formule kopieert wel maar verwijderd niet als ik deze in direct in de mapping sheet draai werkt deze volledig dat is het gekke
 
Kun je een voorbeeldbestandje plaatsen, zodat we kunnen zien waar het fout gaat?
 
Heb je code getest, maar werkt goed bij mij. :rolleyes:
Ps. Getest in versie 2003, maar zou i.p.v. Delete, ClearContents gebruiken.
Anders verdwijnt je knop op het laatst.

Hoe bedoel je verdwijnt de knop. Deze staat toch in een ander tabblad.
 
Maar niet zoals de code is geschreven toch?

Harry,

je hebt gelijk als ik de knop op hetzelfde tabblad plaats dan werkt de formule. Daar zit het nu net ik wil een aparte tabblad met alle knopen. Dan krijg ik het probleem van de activesheet.

Groet,

Jeroen
 
Code:
Sub Niet_Migreren()

    'Application.ScreenUpdating = False
   Dim c As Range
   Dim rw As Long
   
     
   For Each c In ['mapping'!G2:G65]
        If c = "Ja" Then
            c.Rows.EntireRow.Copy
            
           ['Niet_migreren'!A65536].End(xlUp).Offset(1, 0).Insert Shift:=xlDown
            
        End If
    Next
    
   ' For rw = ActiveSheet.UsedRange.Rows.Count To 1 Step -1
    
    For rw = Worksheets("Mapping").UsedRange.Rows.Count To 1 Step -1
    

      If Cells(rw, "G") = "Ja" Then Cells(rw, "G").EntireRow.Delete
      ' Rows(rw).Delete
      
    Next
    With Application
    
        .CutCopyMode = False
        .ScreenUpdating = True
    End With

End Sub

Dit is eigenlijk wat je zelf al had, met mijn verwijzing naar het juiste werkblad er in verwerkt. Bij mij liep de boel vast omdat er achter het werkblad 'mapping' code zit die, als er één cel verandert, de tijd in kolom AJ zette. Omdat het plaatsen van een tijd een verandering van een cel is, werd de code opnieuw gedraaid, en werd opnieuw de tijd en datum in kolom AJ gezet. Deze verandering lokte dezelfde code uit, waardoor de een cel in kolom AJ veranderde, waardoor er een eindeloze loop ontstond.

Verder zie ik niet waarom dit niet werkt. Kun je wellicht iets meer uitleg geven, misschien missen we gewoon iets in wat je wil bereiken?

Groeten,
 
Code:
Sub Niet_Migreren()

    'Application.ScreenUpdating = False
   Dim c As Range
   Dim rw As Long
   
     
   For Each c In ['mapping'!G2:G65]
        If c = "Ja" Then
            c.Rows.EntireRow.Copy
            
           ['Niet_migreren'!A65536].End(xlUp).Offset(1, 0).Insert Shift:=xlDown
            
        End If
    Next
    
   ' For rw = ActiveSheet.UsedRange.Rows.Count To 1 Step -1
    
    For rw = Worksheets("Mapping").UsedRange.Rows.Count To 1 Step -1
    

      If Cells(rw, "G") = "Ja" Then Cells(rw, "G").EntireRow.Delete
      ' Rows(rw).Delete
      
    Next
    With Application
    
        .CutCopyMode = False
        .ScreenUpdating = True
    End With

End Sub

Dit is eigenlijk wat je zelf al had, met mijn verwijzing naar het juiste werkblad er in verwerkt. Bij mij liep de boel vast omdat er achter het werkblad 'mapping' code zit die, als er één cel verandert, de tijd in kolom AJ zette. Omdat het plaatsen van een tijd een verandering van een cel is, werd de code opnieuw gedraaid, en werd opnieuw de tijd en datum in kolom AJ gezet. Deze verandering lokte dezelfde code uit, waardoor de een cel in kolom AJ veranderde, waardoor er een eindeloze loop ontstond.

Verder zie ik niet waarom dit niet werkt. Kun je wellicht iets meer uitleg geven, misschien missen we gewoon iets in wat je wil bereiken?

Groeten,


Wat ik wil bereiken is om rijen die niet nodig zijn te verplaatsen naar een ander tabblad om deze rij dan vervolgens uit het tabblad te verwijderen. Daarbij wil ik de macro bedienen vanuit een ander tabblad namelijk het tabblad macro. Daar wil ik ook andere macro's van laten starten.
Op het tabblad mapping heb ik ook een timestamp macro gezet om wijzigingen te kunnen registreren

Ik heb de macro die timestamp heb ik een ' voorgezet zodat deze niet gedraaid worden. en als ik de macro start vanuit het tabblad Macro heb ik nog steeds hetzelfde probleem.
 

Bijlagen

En als je het zo doet ?

Code:
Sub Niet_Migreren()
Application.ScreenUpdating = False
   Dim c As Range
  For Each c In ['mapping'!G2:G65]
        If c = "Ja" Then
            c.Rows.EntireRow.Copy
            ['Niet_migreren'!A65536].End(xlUp).Offset(1, 0).Insert Shift:=xlDown
           c.Rows.EntireRow.Delete
    End If
Next
    With Application
        .CutCopyMode = False
        .ScreenUpdating = True
    End With
End Sub
 
Laatst bewerkt:
Code:
Sub test()
  On Error Resume Next
  Do
    With Sheets("Mapping").Columns(7).Find("Ja", , xlValues, xlWhole).EntireRow
       .Copy Sheets("Niet_migreren").Cells(Rows.Count, 1).End(xlUp).Offset(1)
       .Delete
     End With
  Loop Until Err.Number > 0
End Sub
 
Code:
Sub test()
  On Error Resume Next
  Do
    With Sheets("Mapping").Columns(7).Find("Ja", , xlValues, xlWhole).EntireRow
       .Copy Sheets("Niet_migreren").Cells(Rows.Count, 1).End(xlUp).Offset(1)
       .Delete
     End With
  Loop Until Err.Number > 0
End Sub

Deze code werkt, echter voor elke keer dat er ja is ingevuld moet de knop ingedrukt worden 'de formule verwijderd er steeds één' Ik heb dan wel timestamp macro actief gemaakt.

mvg,

Jeroen
 
En als je het zo doet ?

Code:
Sub Niet_Migreren()
Application.ScreenUpdating = False
   Dim c As Range
  For Each c In ['mapping'!G2:G65]
        If c = "Ja" Then
            c.Rows.EntireRow.Copy
            ['Niet_migreren'!A65536].End(xlUp).Offset(1, 0).Insert Shift:=xlDown
           c.Rows.EntireRow.Delete
    End If
Next
    With Application
        .CutCopyMode = False
        .ScreenUpdating = True
    End With
End Sub

Deze formule werkt echter zodra ik de formule met de timestamp activeer verwijderd deze de rijen niet meer.

Mvg,

Jeroen
 
Code:
Sub test()
Application.EnableEvents = False
  On Error Resume Next
  Do
    With Sheets("Mapping").Columns(7).Find("Ja", , xlValues, xlWhole).EntireRow
       .Copy Sheets("Niet_migreren").Cells(Rows.Count, 1).End(xlUp).Offset(1)
       .Delete
     End With
  Loop Until Err.Number > 0
Application.EnableEvents = True
End Sub
 
Code:
Sub test()
Application.EnableEvents = False
  On Error Resume Next
  Do
    With Sheets("Mapping").Columns(7).Find("Ja", , xlValues, xlWhole).EntireRow
       .Copy Sheets("Niet_migreren").Cells(Rows.Count, 1).End(xlUp).Offset(1)
       .Delete
     End With
  Loop Until Err.Number > 0
Application.EnableEvents = True
End Sub

Geweldig bedankt voor jullie hulp de formule werkt helemaal zoals ik deze voor ogen had. :thumb:

Mvg,

Jeroen
 
Waarom niet:

Code:
Sub test()
  With Sheets("Mapping").Columns(7)
     .autofilter 1,"Ja"
     With .offset(1).specialcells(xlcelltypevisible)
       .Copy Sheets("Niet_migreren").Cells(Rows.Count, 1).End(xlUp).Offset(1)
       .Entirerow.Delete
     End With
  End With
End Sub
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan