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

laatste kolom - fout vba

Status
Niet open voor verdere reacties.

stefano

Gebruiker
Lid geworden
22 mei 2004
Berichten
865
Ik gebruik een macro om de inhoud van kolom b en c te plakken in de eerset twee vrije kolommen van hetzelfde werkblad. Hiervoor gebruik ik onderstaande code . Uitvoeren van de makro geeft volgende fout :

'type komen niet met elkaar overeen"

Wat zou er fout zijn ?

Code:
Sub hist_kopieren()

Dim laatstekolom As Integer

Columns("B:C").Select
    Selection.Copy

laatstekolom = ActiveSheet.UsedRange.Columns.Count

Range("laatstekolom" + 1).Select

    Application.CutCopyMode = False
     Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Range("D2").Select
End Sub
 
Deze regel is fout:

Range("laatstekolom" + 1)

laatstekolom is een variabele, geen stuk tekst.
 
euh

ok , het moet zonder de aanhalingstekens zijn , stom van me.

Bedoeling is die twee kolommen B en C achteraan bij te plakken. Met het commando

Range(laatstekolom + 1) wordt de eerste lege kolom geselecteerd. Plakken geeft dan opnieuw een foutmelding omdat ik twee kolommen wil plakken in één en dezelfde kolom. Ik moet dus de eerste vrije cel van de eerste vrije kolom hebben.

Ik veronderstel dus zoiets al

range( ).select

maar hoe beschrijf ik de combinatie van laatstekolom+1 en rij 1 ?
 
Laatst bewerkt:
Code:
Sub hist_kopieren()

Dim laatstekolom As Integer

laatstekolom = ActiveSheet.UsedRange.Columns.Count

Columns("B:C").Copy
Cells(1,laatstekolom).Resize(1,2).PasteSpecial xlValues
Range("D2").Select
Application.CutCopyMode = False
End Sub

Wigi
 
Bedoel je zoiets:

Code:
Sub hist_kopieren()

Dim laatstekolom As String

Columns("B:C").Copy

laatstekolom = Range("A1").End(xlToRight).Address

Range(laatstekolom).Offset(0, 1).Select
ActiveSheet.Paste
    
    Range("D2").Select
End Sub
 
Persoonlijk zou ik gaan kijken waar de laatst gebruikte kolom is gerekend vanaf de meest rechtse cel (= IV1) op de sheet. Het gevaar met rekenen vanaf cel A1 is namelijk 'de lege cel in je range'... Als je werkelijk laatst gebruikte cel namelijk G1 is, maar cel D1 is leeg, zal de code 'Range("A1").End(xlToRight).Address' cel D1 als 'laatste' aanwijzen...
Beter is het dus om gebruik te maken van
Code:
Range("IV1").End(xlToLeft).offset(,1).select
Dan pak je zelfs gelijk je offset mee...

Groet, Leo
 
Laatst bewerkt:
Ginger,

ook dat is niet bestand tegen alles.

Stel dat G1 leeg is, E1 niet, maar G2 wel...
 
Wigi,
wigi zei:
ook dat is niet bestand tegen alles.

Stel dat G1 leeg is, E1 niet, maar G2 wel...
Ben ik met je eens. Maar de kans dat je in een tabel je header niet vult, is niet erg kansrijk.... Terwijl je wel meerdere losse tabellen (vb: tabel 1 = kolom A t/m D; tabel 2 = kolom F t/m H) naast elkaar kan hebben staan. Met het 'vinden van de laatst gebruikte regel of kolom' blijven altijd wat risico's openstaan...;)

Groet, Leo
 
Mijne heren,

Ik heb er voor gezorgd dat alle cellen tot aan de eerste lege kolom wel degelijk opgevuld worden, niettemin dank voor jullie antwoorden.

Dit bestand is een deel van een .xls dat stocks bijhoudt. Stel : vandaag 21/09 neem ik de stock op, vul alle cijfers in en daarna worden die cijfers achteraan het sheet bijgezet mbv de makro.

Een uurtje later kom ik tot de vaststelling dat ik een foutieve ingave/meting uitgevoerd heb. Hiertoe verbeter ik de gegevens . Uitvoeren van vermelde makro zal die gegevens plakken in de laatste kolom terwijl de eerste (foute) gegevens er ook al staan terwijl ze eigenlijk zouden moeten overschreven worden .

Met andere woorden, er moet een test zijn in de zin van 'bestaat datum al ?" , indien ja overschrijf die kolommen, indien nee, plak de gegevens achteraan bij.

Kunnen jullie me vooruit helpen ?

zie bijlage
 

Bijlagen

Laatst bewerkt:
Dag Stefano,

Probeer deze eens.

Code:
Sub hist_kopieren()
    With Sheets("historiek totaal")
    Dim laatstekolom As Integer
    laatstekolom = .UsedRange.Columns.Count
    If Cells(1, 2) = Cells(1, laatstekolom - 1) Then
        Columns("B:C").Copy
        Cells(1, laatstekolom - 1).Resize(1, 2).PasteSpecial xlValues
    Else
        Columns("B:C").Copy
        Cells(1, laatstekolom + 1).Resize(1, 2).PasteSpecial xlValues
    End If
    Range("D2").Select
    Application.CutCopyMode = False
End With
End Sub
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan