Regels kopiëren waarvan waarde in een kolom groter dan 0 is.

Status
Niet open voor verdere reacties.

Xammy39

Gebruiker
Lid geworden
29 nov 2017
Berichten
41
Geachte VBAers,

Ik heb een bestand gemaakt voor verhuur van geluidsapparatuur. Hierin kan ik in een lijst met items de aantallen invullen welke in nodig heb voor een klus.
Na het invullen van de aantallen laat ik van de lijst een pakbon samenstellen, alle items worden gekopieerd naar een andere sheet waarna in deze sheet alle regels waar geen aantal is ingevuld verwijderd moeten worden.
Dit laatste gaat steeds fout, ik krijg de melding 'Error1004, cannot shift items off sheet' na lang zoeken heb ik ontdekt dat dit een bug in Excel schijnt te zijn.
Nu wil ik deze fout ontwijken door in plaats van alle regels te kopiëren alleen de regels te kopiëren waarbij het aantal >0 is.
Ik kom er, met mijn beperkte kennis, niet uit. Wie zou mij hiermee kunnen helpen?
Bijgevoegd een bestand zoals het nu is gemaakt, deze geeft overigens niet de genoemde 'Error1004'.
 

Bijlagen

Vertel er bij in welke routine en daarin op welke regel hij dan die foutmelding geeft.
 
Zet in blad stuklijst kopteksten.
Code:
Sub hsv()
Sheets("pakbon").Cells(1).CurrentRegion.ClearContents
 With Sheets("stukslijst").Cells(1).CurrentRegion
  .AutoFilter 7, "<>"
  .Copy Sheets("Pakbon").Cells(1)
  .AutoFilter
End With
End Sub
 
Het is geen bug in Excel. De foutmelding krijg je omdat je 2 keer de rijen met lege cellen gaat verwijderen.

Het is
Code:
Sub LegeRegelsWeg()
  On Error Resume Next 'voor als er geen lege cellen zijn
  Sheets("Pakbon").Columns(7).SpecialCells(4).EntireRow.Delete
End Sub

of
Code:
Sub LegeRegelsWeg()
Dim cl As Range, r As Range
  For Each cl In Sheets("Pakbon").Range("G9:G156")
    If cl = Empty Then
      If r Is Nothing Then Set r = cl Else Set r = Union(r, cl)
    End If
 Next cl
  If Not r Is Nothing Then r.EntireRow.Delete
End Sub

Waarom plaats je een voorbeeld die niet overeenkomt met de in de code te vinden bereiken?
 
Vertel er bij in welke routine en daarin op welke regel hij dan die foutmelding geeft.

Hij geeft de foutmelding wanneer hij bij de regel 'delete entire row' komt.
Bij iedere oplossing om de regels te verwijderen krijg ik steeds die melding.
Ik kreeg ook een tijdje bij handmatig verwijderen van regels diezelfde melding, ik kreeg toen het vermoeden dat het niet aan de macro lag. Aan de hand daarvan ben ik gaan zoeken en kwam toen tegen dat het een bug in Excel zou zijn.
Deze bug zou omzeilt worden door in preferences bij 'For objects, show' 'All' aan te vinken. Dit heeft wel gezorgd dat ik handmatig de regels kan verwijderen maar nog steeds niet met een macro.
 
En VenA z'n voorstel heb je al getest?
 
En VenA z'n voorstel heb je al getest?
Ben nu bezig met HSV z'n oplossing, werkt prima in de testsheet maar in de uiteindelijke sheet geeft hij nog een foutmelding bij de regel '.Autofilter 7,"<>"'. Weer een Error 1004, 'Autofilter method of Range class failed'.
Dit komt waarschijnlijk omdat ik pas vanaf regel 5 van de stukslijst naar regel 9 van de pakbon de gekopieerde regels wil plaatsen.
 
Komt waarschijnlijk doordat je geen currentregion hebt.
Plaats daarom kopteksten bovenaan.

Deze methode is gemakkelijker dan in twee stappen zoals je normaal doet (eerst alles kopiëren en daarna de lege rijen verwijderen).
 
Komt waarschijnlijk doordat je geen currentregion hebt.
Plaats daarom kopteksten bovenaan.

De methode spreekt mij ook aan, vandaar dat ik het aan het proberen ben.
Alleen begrijp ik niet wat je bedoelt.
Uiteindelijk wil ik vanaf regel 5 van de stukslijst kolom 2, 7 en 9 kopiëren en die vanaf regel 9 in de pakbon plaatsen.
Dit omdat er in de bovenste regels informatie staat die er moet blijven staan.
 
Gebruik ook eens de "Reageer op bericht" knop in plaats van "Quote".
 
Gokje, anders moet je maar een bestandje plaatsen zoals het is, en moet worden.

Code:
Sub hsv()
Dim sSh As Worksheet
Set sSh = Sheets("pakbon")
sSh.Range("a9", sSh.Range("a9").End(xlDown)).Resize(, sSh.UsedRange.Columns.Count).ClearContents
 With Sheets("stukslijst").Cells(4, 1).CurrentRegion
  .AutoFilter 7, "<>"
  Union(.Columns(2), .Columns(7), .Columns(9)).Copy sSh.Cells(9, 1)
  .AutoFilter
End With
End Sub
 

Bijlagen

Hsv, als eerste dankjewel voor alle moeite.
Het werkt nu, na wat aanpassingen, exact zoals ik wil op een ding na.
De gekopieerde kolommen zijn vanaf regel 1 vanaf de stukslijst steeds gekopieerd, het lijkt erop dat de regel 'With Sheets("stukslijst").Cells(5, 1).CurrentRegion' geen invloed heeft.
 
Waarom plaats je een voorbeeld die niet overeenkomt met de in de code te vinden bereiken?
Gokje, anders moet je maar een bestandje plaatsen zoals het is
Als het te moeilijk is om een gelijkend voorbeeld te plaatsen dan zal je het zelf even op moeten lossen.
 
Ok, hier dan een voorbeeld zoals het is en de aangepaste VBA code van Hsv.
Dit werkt zoals ik wil alleen kopieert de macro de stukslijst vanaf regel 1, dit moet pas vanaf regel 5 gebeuren.
 

Bijlagen

Ik mis nog de regels boven rij 10, maar het zij zo.
 

Bijlagen

Harry, mijn dank is groot, het werkt nu exact zoals ik wilde. :thumb:
 
Ik was iets te voorbarig. :(
Het werkt weliswaar exact zoals ik wil alleen heb ik in de stukslijst ook een aantal buttons gemaakt waarmee ik macro's start zoals opslaan en afdrukken.
Het lijkt erop dat het autofilter deze buttons deleted.
Wat is hier aan te doen?
 
Zijn dat ActiveX of Formulier knoppen?
 
Nee. Maar je weet vast wel waar je ze vandaan hebt gehaald bij het invoegen ervan.
Uit het bovenste of het onderste gedeelte van dat schermpje waar je ze kan kiezen.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan