Excel: Data autom kopiëren naar een ander bestand; speficiek

Pagina: 1
Acties:

Onderwerpen

Vraag


Acties:
  • 0 Henk 'm!

  • MarcForier
  • Registratie: Februari 2020
  • Laatst online: 28-10-2021
Ik heb een VBA code die specifieke data (1 rij in een specifiek tabblad) in het geopende calculatiebestand wegschrijft naar een ander, vast overzichtsbestand.

Maw, uit verschillende calculatiebestanden (1 per klant) wordt met een klik op een button deze data in het overzichtsbestand toegevoegd, zodat je in dit overzichtsbestand opvolging kan doen van alle calculatiebestanden (=klanten).

Momenteel worden deze data altijd 'toegevoegd', ook al bestaat de specifieke data (=rij) al in het overzichtsbestand, waardoor er dubbele, identieke rijen ontstaan.

Volgende dingetjes wil ik graag voorzien:

1. Ik wil nu graag in de VBA inbouwen dat, als een bepaalde waarde in een bepaalde cel van het betreffende tabblad van het calculatiebestand al bestaat in de desbetreffende cel in het overzichtsbestand, de betreffende rij overschreven wordt, ipv toegevoegd. Indien de waarde nog niet bestaat, dan dienen de gegevens toegevoegd worden in de eerstvolgende lege rij, zoals reeds gebeurt in de bestaande VBA.

2. Het zou nog mooier zijn, als bovenstaande werkt in een macro die automatisch uitgevoerd wordt bij het sluiten van het calculatiebestand.

3. Een tweede bijkomende wens is dat de macro de naam van het betreffende bronbestand automatisch neemt, in plaats van deze te beschrijven in de macro (er wordt een calculatiebestand 'calculatie blanco' geopend; na invullen klantgegevens wordt deze opgeslagen met een macro waarbij deze het bestand opslaat onder de naam in een specifieke cel; de macro dient dus te herkennen dat het om dit nieuwe bestand 'calculatie klantnaam' gaat, en niet langer over 'calculatie blanco'

Mijn bestaande macro ziet er als volgt uit :

Sub Dossiernaplaatsing()

Application.ScreenUpdating = False

Workbooks.Open Filename:="C:\Overzicht verkopen.xlsm"

Set doel = Workbooks("Overzicht verkopen.xlsm").Worksheets("Blad1")

LRDoel = doel.Cells(doel.Rows.Count, "A").End(xlUp).Offset(1).Row

Workbooks("Calculatieblanco.xlsm").Worksheets("Overzicht Offerte").Range("A4:AH4").Copy

Workbooks("Overzicht verkopen.xlsm").Worksheets("Blad1").Range("A" & LRDoel).PasteSpecial xlPasteValues

Application.CutCopyMode = False

ActiveWorkbook.Save

ActiveWindow.Close

End Sub


Alvast dank !

Marc

Alle reacties


Acties:
  • 0 Henk 'm!

  • F_J_K
  • Registratie: Juni 2001
  • Niet online

F_J_K

Moderator CSA/PB

Front verplichte underscores

Dat klinkt als prima te doen. Die eerste: zoek de juiste regel op (bv. FOR loopje), pas aan. De tweede: kan met BeforeClose() al hoeft dat hier niet eens, je hebt de save en close zelf al ingebouwd dus dan is het simpelweg de code daar tussen zetten? Derde: prima, doen. Tip, met het risico dat het denigrerend over komt: met & kan je twee strings samenvoegen. naam = "bla"; "C:\foo\bar\" & naam. Zoiets.

Voor alle drie: aan welke code denk je zelf / waar twijfel je / waar loop je vast? We denken graag mee, maar zowel wij als jij moeten niet willen dat we af-code voorschotelen.

'Multiple exclamation marks,' he went on, shaking his head, 'are a sure sign of a diseased mind' (Terry Pratchett, Eric)


Acties:
  • 0 Henk 'm!

  • MarcForier
  • Registratie: Februari 2020
  • Laatst online: 28-10-2021
ik ben beginneling in VBA; ik begin ondertussen een beetje te begrijpen hoe het werkt, kan verstaan wat er staat, maar kan (nog) niet zoveel schrijven in VBA.
Als je schrijft 'FOR loopje', dan eindigt het daar bij mij :-)
BeforeClose rings a bell, en vind ik dan wel.
Ik begrijp dan ook je regen mbt twee strings samenvoegen, maar kan 'm niet helemaal juist schrijven.

zo loop ik dus vast ;-)

Acties:
  • 0 Henk 'm!

  • F_J_K
  • Registratie: Juni 2001
  • Niet online

F_J_K

Moderator CSA/PB

Front verplichte underscores

We denken graag mee, maar..

Mijn advies is dan eerst een algemene cursus / tutorial / oid of zo volgen en per functie de documentatie op microsoft.com lezen / wat voorbeelden oefenen.

Nog los van dat we geen kant-en-klare code willen leveren (i.t.t. meedenken), moet je dat zelf erg niet willen. Voor je het weet kopieer je code die je data sloopt.

'Multiple exclamation marks,' he went on, shaking his head, 'are a sure sign of a diseased mind' (Terry Pratchett, Eric)


Acties:
  • 0 Henk 'm!

  • MarcForier
  • Registratie: Februari 2020
  • Laatst online: 28-10-2021
Snap ik.
Maar het ontbreekt me aan tijd om enkele weken te gaan studeren..
Dus dit helpt me niet verder..

Acties:
  • 0 Henk 'm!

  • ASP
  • Registratie: December 2000
  • Nu online

ASP

Je kunt altijd iemand inhuren als je de capaciteiten niet hebt. Dat doe je ook als er bijvoorbeeld een waterleiding lekt in jouw huis. Nu lekt, zeg maar, jouw code.

Acties:
  • 0 Henk 'm!

  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

^^^^ Yep. Maar ik ben ook niet te beroerd om tegen iemand te roepen dat hij kan proberen de knelkoppelingen aan te draaien. :)

1: gebruik de range.find() opdracht. Voorbeelden te overt maar het idee is:
code:
1
2
3
4
5
6
7
set c = workbooks([verzamelbestand]).sheets([$]).range($:$).find([bepaalde waarde])

if c= nothing then
   'je bestaande code voor laatste rij
else
   rij=c.row
end if


2: idd before close

3: Nog veel simpeler: gebruik thisworkbook ipv de naam van het workbook.

[ Voor 3% gewijzigd door Lustucru op 28-10-2021 18:01 ]

De oever waar we niet zijn noemen wij de overkant / Die wordt dan deze kant zodra we daar zijn aangeland


Acties:
  • +1 Henk 'm!

  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

MarcForier schreef op donderdag 28 oktober 2021 @ 16:51:
Snap ik.
Maar het ontbreekt me aan tijd om enkele weken te gaan studeren..
Dus dit helpt me niet verder..
offtopic:
... komt tamelijk lullig en lamzakkerig over. Enkele weken?! Dan ben je wel h-e-e-l e-r-g- t-r-a-a-g en moet je er sowieso niet aan beginnen.

De oever waar we niet zijn noemen wij de overkant / Die wordt dan deze kant zodra we daar zijn aangeland

Pagina: 1