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

Vermijden van .Select

Status
Niet open voor verdere reacties.

ronald1986

Gebruiker
Lid geworden
2 apr 2010
Berichten
296
Mensen,

Ik hoor vaak dat wanneer je een VBA code aan het maken bent je .Select moet vermijden en in plaats daarvan With en End With moet gebruiken.
Nou ben ik een bestand aan het maken waarin ik veel kopieer en plak via VBA en ik gebruik daarin behoorlijk veel .Select.
Zou iemand mij kunnen vertellen hoe ik bijvoorbeeld onderstaande code hetzelfde kan laten doen maar dan zonder het gebruiken van .Select?

Code:
Dim iRij As Long
If Sheets("input").Range("O1").Value = "Ja" Then
Range("B6:C6").Select
Selection.Copy
Sheets("conversie").Select
Range("B5").Select
    iRij = Cells(Rows.Count, 2).End(xlUp).Offset(1).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
Application.CutCopyMode = False
End If
 
Dit zou moeten volstaan:

Code:
Dim iRij As Long
If Sheets("input").Range("O1").Value = "Ja" Then
Range("B6:C6").Copy
With Sheets("conversie")
    .Range("B" & .Cells(.Rows.Count, 2).End(xlUp).Offset(1)).PasteSpecial Paste:=xlPasteValues
End With
Application.CutCopyMode = False
End If
 
Ok, dat is inderdaad al een stuk korter!
Maar nog even 2 vraagjes:
1. Wanneer je With Sheets("conversie") gebruikt wordt de sheet conversie dan ook de active sheet? Bovenstaande code wordt namelijk meerdere keren herhaald voor verschillende bereiken en als sheet conversie wel de catieve sheet zou worden zou ik voor elk stukje code wel weer sheet ("input") moeten activeren.
2. Wat doet het stukje .Range("B" & .Cells? Het is namelijk de bedoeling dat er wordt geplakt in de eerste lege cel in kolom B vanaf rij 5.

Maar in ieder geval erg bedankt voor je oplossing, Cobbe!
 
Nog iets korter..
Code:
If Sheets("input").Range("O1").Value = "Ja" Then
    With Sheets("conversie")
        .Range("B" & .Rows.Count).End(xlUp).Offset(1, 0).Resize(1, 2).Value = Range("B6:C6").Value
    End With
End If

De antwoorden op je vragen.
1. Nee. Input blijft het actieve werkblad.
2. De . voor de commando verwijst naar het object. In dit geval Worksheet conversie.

Met vriendelijke groet,


Roncancio
 
Ok, dat is inderdaad mooi kort!
Ik kan in de code alleen nergens iets vinden wat er op wijst dat er geplakt moet worden in kolom B in de eerste lege cel vanaf rij 5. In rij 1-4 komen namelijk ook lege cellen voor...
 
Sorry, ik zie het al, je kijkt natuurlijk naar de cel onder de eerste gevulde cel die je tegenkomt vanaf ONDER.....
 
of
Code:
sub M_snb)
If Sheets("input").Range("O1") = "Ja" Then Sheets("conversie").cells(rows.count,2).End(xlUp).Offset(1).Resize(, 2) = sheets("input").Range("B6:C6").Value
End Sub
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan