• 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 code "plakken als waarde"

Status
Niet open voor verdere reacties.

novec

Gebruiker
Lid geworden
6 jan 2009
Berichten
194
Hallo ik heb voor een hengelsport vereniging een Uitslagen programma gemaakt met de nodige VBA code.
Op het laatste blad kopieert de code alle senioren (voorwaarde als Kolom 6 een "S" staat) en voegt dit toe aan een ranking tabel voor senioren.

Dat ging altijd goed tot gisteren.....
De data uit de tabel "tbJaar1e" voegt hij volledig toe dus inclusief de formules en uit "tbJaar2e" voegt hij alleen de waarde toe.
Dat laatste gaat goed en zou ook op het 1e van toepassing moten zijn.

Vraag: hoe voeg ik de opdracht 'toevoegen als waarde' toe in de onderstaande code.

Code:
Dim i As Long
    Application.ScreenUpdating = False
    For i = 1 To 2
    With Sheets("Jaarstand").ListObjects("tbjaar" & i & "e").DataBodyRange
      .AutoFilter 6, "S"
      .Copy Sheets("Jaarstand").ListObjects("tbjaarsenioren").ListRows.Add.Range
      .AutoFilter
    End With
   Next i


Volgens mij moet er achter 'listrows.add.range' nog een stukje code komen.
Ik deel liever het complete bestand met namen en ranking hier liever niet.


Bedankt alvast
 
Laatst bewerkt:
Zo misschien?
Code:
Dim i As Long
    Application.ScreenUpdating = False
    For i = 1 To 2
    With Sheets("Jaarstand").ListObjects("tbjaar" & i & "e").DataBodyRange
      .AutoFilter 6, "S"
      .Copy Sheets("Jaarstand").ListObjects("tbjaarsenioren").ListRows.Add.Range
      [COLOR="#FF0000"].Value = .Value[/COLOR]
      .AutoFilter
    End With
   Next i
 
Code:
Dim i As Long
Application.ScreenUpdating = False
For i = 1 To 2
    With Sheets("Jaarstand").ListObjects("tbjaar" & i & "e").DataBodyRange
      .AutoFilter 6, "S"
      .Copy Sheets("Jaarstand").ListObjects("tbjaarsenioren").ListRows.Add.Range
      .AutoFilter
    End With
Next i
[COLOR=#0000ff]With Sheets("jaarstand").ListObjects("tbjaarsenioren").DataBodyRange[/COLOR]
[COLOR=#0000ff].Value = .Value[/COLOR]
[COLOR=#0000ff]End With[/COLOR]

Of:
Code:
Dim i As Long
Application.ScreenUpdating = False
With Sheets("Jaarstand")
For i = 1 To 2
   With .ListObjects("tbjaar" & i & "e").DataBodyRange
      .AutoFilter 6, "S"
      .Copy .Parent.ListObjects("tbjaarsenioren").ListRows.Add.Range
      .AutoFilter
    End With
Next i
  With .ListObjects("tbjaarsenioren").DataBodyRange
    .Value = .Value
  End With
End With
 
Laatst bewerkt:
Ik heb beide oplossingen geprobeerd. Beide werken niet.

V.w.b. de code van HSV Die wordt toegepast nadat de data al is toegevoegd en de #waarde fouten al in de senioren tabel staat.
de waarde is niet gekomen maar een formule.
Ook de ander oplossing blek niet te werken. helaas.

Code:
    ActiveSheet.ListObjects("tbJaarSenioren").DataBodyRange.Select
    Selection.Delete
  
Dim i As Long
    Application.ScreenUpdating = False
    For i = 1 To 2
    With Sheets("Jaarstand").ListObjects("tbjaar" & i & "e").DataBodyRange
      .AutoFilter 6, "S"
      .Copy Sheets("Jaarstand").ListObjects("tbjaarsenioren").ListRows.Add.Range
[COLOR="#FF0000"]'      .Value = .Value[/COLOR]
      .AutoFilter
    End With
   Next i
   
'    [COLOR="#FF0000"]With Sheets("Jaarstand").ListObjects("tbjaarsenioren").DataBodyRange
'      .Value = .Value
'    End With[/COLOR]

Op het moment dat de code wordt uitgevoerd zie ik dat de gekopieerd formules verdwijnen en er alleen nog #waarde als tekst wordt getoond.
 
Laatst bewerkt:
Ik heb het bestandje van je eerdere vraag er even bij gepakt, omdat ik die code daar ook voor geschreven had.
De code van @gast0660 maakt van je twee tabellen die gekopieerd moeten worden al waardes; je formules ben je dan kwijt (lijkt me niet de bedoeling).

Hier het bestandje met de code die van je senioren-listobject er waarden van maakt.
 

Bijlagen

Ik wil overigens met alle plezier het hele bestandje via een PB toe sturen hoor.
 
Moet niet nodig zijn; daar is het forum ook niet voor om privé verder te gaan.
Je kan er fictieve namen inzetten.

Heb je het bestand bekeken wat ik heb geplaatst?
 
Hi Harry,

ik heb het net bekeken en hij blijft de foutmelding weergeven.
In de jou bestand je heb gewoon waardes in zowel de 1e als de 1e divisie zitten . in het origineel zijn dat vooral functies. Maar dat zou volgens mij niet uit mogen maken.
Ik heb zowel de 1e als de 2e divisie dezelfde opmaak gegeven en begrijp er dus niets van. Het lijkt wel of hij van de 1e divisie andere waarden haalt als van de 2e divisie en dat is gewoon vreemd. Ik heb het nog niet kunnen oplossen dus.
Probleem blijft dat vanuit divisie 1 de functies komen en vanuit divisie 2 de waardes.

Dank
 
Je kan zien dat ik in de 2e divisie een paar formules heb gezet (kolom N).
Na de kopieeractie staan er waarden in je seniorentabel.

Pas anders de formules even aan zoals in jouw echte bestand staan, zo moeilijk hoeft dat toch echt niet te zijn.
 
Bedoel je de formule die is gekopieerd naar de senioren tabel?
Het gaat er nu juist om dat er geen functie worden gekopieerd naar de senioren tabel.

m.vr.gr.

Steven
 
Probeer het zo maar eens.
Code:
Sub hsv()
Dim i As Long, laatsterij
Application.ScreenUpdating = False
With Sheets("Jaarstand")
For i = 1 To 2
 Set laatsterij = .ListObjects("tbjaarsenioren").ListRows.Add
   With .ListObjects("tbjaar" & i & "e").DataBodyRange
      .AutoFilter 6, "S"
      .Copy
      laatsterij.Range.PasteSpecial xlPasteValues
      .AutoFilter
     End With
 Next i
End With
End Sub
 
Dank je wel Harry
Deze werkt inderdaad en ik kan zien wat de verschillen zijn.
Blijf het lastig vinden maar het is en blijft een kwestie van doen en oefenen. Daarbij is jullie hulp geweldig.

Dank daarvoor


Steven
 
Het aardige van dit soort tabellen is dat ze zich zelf aanpassen:

Code:
Sub M_snb()
   With Sheets("jaarstand")
      For j = 1 To 2
        With .ListObjects("tbjaar" & j & "e").DataBodyRange
          .AutoFilter 6, "S"
          .Copy
          .Parent.ListObjects("tbjaarsenioren").DataBodyRange.Cells(1).Offset(.Parent.ListObjects("tbjaarsenioren").DataBodyRange.Rows.Count).PasteSpecial -4163
          .AutoFilter
        End With
      Next
    End With
End Sub

andere schrijfwijze:

Code:
Sub M_snb()
   With Sheets("jaarstand")
      For j = 1 To 2
        With .ListObjects("tbjaar" & j & "e").DataBodyRange
          .AutoFilter 6, "S"
          .Copy
           With .Parent.ListObjects("tbjaarsenioren").DataBodyRange
                .Cells(1).Offset(.Rows.Count).PasteSpecial -4163
            End With
          .AutoFilter
        End With
      Next
    End With
End Sub
 
Laatst bewerkt:
@snb,

Altijd aardig die andere schrijfwijzes, maar heb je de beide codes getest? :P

De eerste gaat niet in een leeg databodyrange (fout 91).
De tweede zet het ergens ver onder de tabel.
 
@HSV
De code heeft betrekking op het hier geplaatste bestand.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan