Excel regel automatisch doorvoeren naar andere werkblad.

Status
Niet open voor verdere reacties.

digitall12

Gebruiker
Lid geworden
6 jul 2008
Berichten
99
Hallo,

Ik heb een probleem waar ik niet uitkom.
Ik heb een Excel bestand waarin mijn rittenstaat staan.Dit is het totaalblad waar alle ritgegevens opstaan ed. Die heb ik in Blad 1.
Nu kopieer ik deze naar Blad 2, omdat ik daar mijn uren wil bijhouden. Dit heb ik gedaan met een macro.
Wat ik nu wil:

*1. De uren van Blad1 worden gekopieerd naar Blad2. (bijv. in Cel A1:E1)
*2. De gegevens van Blad1 worden gemaild dmv een knop.
*3. De gegevens van Blad1 worden gewist dmv een knop.
*4. De gegevens van Blad2 worden 1 regel opgeschoven omdat er nieuwe gegevens word bijgeschreven.Dus weer beginnen bij *1.

Is er een makkelijke VBA code hiervoor? Met een macro werkt het niet, omdat telkens nieuwe data de oude overschrijft!
 

Bijlagen

Hoi

Het probleem is dat jij macro's opneemt, en ze niet schrijft. De code die VBA genereert doet wel wat het moet doen, maar daar blijft het bij. Bvb.

Code:
Range("B4:C5").Select
    Selection.ClearContents

kan beter als:

Code:
Range("B4:C5").ClearContents

En

Code:
Range("I14").Select
    ActiveCell.FormulaR1C1 = "0"

kan beter als:

Code:
Range("I14").Value = 0

Eens dat jij die stap gezet hebt (denkwijze), kan je gaan beginnen aan het variabel maken van de rijen, en tevens met variabelen gaan werken. Altijd handig zijn tutorials op internet over VBA in Excel.

Wigi
 
Is dit iets beter?
Ik struin het forum af naar voorbeelden om VBA te snappen. Je leert het niet erg snel moet ik zeggen.
Maar ik heb dit in ieder geval geprobeerd, maar kom toch niet echt verder..

Wat ik wil:

Ik vul mijn uren in op Rittenstaat.
De data van Blad1 E1:I1 word gekopieerd naar Uren.
Die uren gaan naar Totaal deze maand.
Dan worden de gegevens van de rittenstaat gewist en vul ik nieuwe gegevens daarop in.
Wat er gebeurd: De gegevens van Blad1 E1:I1 worden gekopieerd naar Uren maar dan een regel eronder.
Die uren worden dan automatisch aangepast naar Totaal deze maand.

Ik hoop dat ik het nu wat beter heb gedaan?
 

Bijlagen

Laatst bewerkt:
Is dit iets beter?
Ik struin het forum af naar voorbeelden om VBA te snappen. Je leert het niet erg snel moet ik zeggen.
Maar ik heb dit in ieder geval geprobeerd, maar kom toch niet echt verder..

Je mag echt geen stappen overslaan tijdens het leren, anders heb je de basis niet door en ga je vastlopen op moeilijkere dingen.

Dit bvb.

Code:
    Range("B4:C5,E4:G5,B6:D7,F6:G7,F11:I13").ClearContents
    Range("F2,H2,H9,A9:C9").Value = 0.5
    Range("I3,I14,B14,D14").Value = 0
    Range("B4:C5").Select

doet hetzelfde als:

Code:
    Range("B4:C5").Select
    Selection.ClearContents
    Range("E4:G5").Select
    Selection.ClearContents
    Range("B6:D7").Select
    Selection.ClearContents
    Range("F6:G7").Select
    Selection.ClearContents
    Range("F2").Select
    ActiveCell.FormulaR1C1 = "12:00:00 AM"
    Range("H2").Select
    ActiveCell.FormulaR1C1 = "12:00:00 AM"
    Range("I14").Select
    ActiveCell.FormulaR1C1 = "0"
    Range("I3").Select
    ActiveCell.FormulaR1C1 = "0"
    Range("H9").Select
    ActiveCell.FormulaR1C1 = "12:00:00 AM"
    Range("F11:I13").Select
    Selection.ClearContents
    Range("B14").Select
    ActiveCell.FormulaR1C1 = "0"
    Range("D14").Select
    ActiveCell.FormulaR1C1 = "0"
    Range("A9").Select
    ActiveCell.FormulaR1C1 = "12:00:00 AM"
    Range("B9").Select
    ActiveCell.FormulaR1C1 = "12:00:00 AM"
    Range("C9").Select
    ActiveCell.FormulaR1C1 = "12:00:00 AM"
    Range("B4:C5").Select

Wigi
 
Ok, dank je voor je antwoord. Want dát voorbeeldje had ik even nodig.
Ik begrijp nu de intensie dat alles simpeler kan.

Om te laten zien datik het beter snap, stuur ik de verbeterde versie van rittenstaat op.

Ik heb nu:

Code:
Sub Doorvoeren()

With Sheets("Uren")
    Sheets("Blad1").Range("E1:F1,G1:H1,I1").Copy .Range("A" & .Range("A" & Rows.Count).End(xlUp).Row + 1)
End With
End Sub

Wat ik nog niet kan:

Kopieer cellen A2 t/m bijv. E30 van Uren naar totaal deze maand. 

En ook moet ik nu bij elke email wachten op een beveiliging van XP. Ik wil liever alles invoeren en dat het werkblad wat opgestuurd moet worden naar Concepten word gestuurd.Alle codes heb ik geprobeerd, maar werkt bij mij niet. Zoals deze:

Sub BewaarEmailInConcepten()
    Dim objOl As Outlook.Application
    Dim objNamespace As Outlook.Namespace
    Dim objMAPIFolder As Outlook.MAPIFolder
    Dim objMail As Object

    Set objOl = Outlook.Application 'Start Outlook
    On Error Resume Next
    Set objNamespace = objOl.GetNamespace(Type:="MAPI")
    If Err <> 0 Then
        Set objOl = New Outlook.Application 'Zo nee: start Outlook
        Set objNamespace = objOl.GetNamespace(Type:="MAPI")
    End If
    Set objMAPIFolder = objNamespace.GetDefaultFolder(16)
    'Folder voor Concepten wordt geselecteerd

    Set objMail = objOl.CreateItem(olMailItem) 'Maakt e-mailbericht
    'olMailItem kunt u ook vervangen door 0 (de code voor een e-mailbericht)

    '////////////////////////////////////////////////////
    'Dit stukje is voor Outlook 2007 voor het vastleggen
    'van de afzender van een e-mailbericht. Hiervoor moet
    'in VBA wel worden verwezen (Extra, Verwijzingen) naar
    'minimaal Microsoft Outlook 12 Object Library.
    Dim objAccount As Outlook.Account
    For Each objAccount In objOl.Session.Accounts
        If objAccount.DisplayName = "Naam Outlook-account" Then
            Set objMail.SendUsingAccount = objAccount
        End If
    Next
    Set objAccount = Nothing
    '////////////////////////////////////////////////////
    'Gebruik eventueel deze optie in oudere versies van Outlook
    'waarbij een e-mail wordt verzonden namens een ander e-mailadres.
    objMail.SentOnBehalfOfName = "Naam verzender <verzender@emailadres.nl>"
    '////////////////////////////////////////////////////

    With objMail
        .To = "to@emailadres.nl" 'Deze moet worden aangepast
        .CC = "cc@emailadres.nl" 'Deze moet worden aangepast of weglaten
        .BCC = "bcc@emailadres.nl" 'Deze moet worden aangepast of weglaten
        'Het is helaas niet mogelijk het FROM-veld aan te passen
        'Zie bovenstaande oplossing voor Outlook 2007.
        .Subject = "Onderwerp e-mail"
        '.Body = "Hier plaatst u de inhoud van het bericht"
        .HTMLBody = "<HTML><P>TEST</P></HTML>"
        .NoAging = True
        .Attachments.Add "C:\WINDOWS\WIN.INI" 'De locatie van de bijlage
        '.Display 'Laat e-mail zien voordat hij verzonden wordt
        .Save 'Voorkomt de vraag om op te slaan, slaat nu op in Concepten
        '.Send 'Verzenden van e-mailbericht
    End With

    Set objMail = Nothing
    objOl.Quit
    Set objMAPIFolder = Nothing
    Set objNamespace = Nothing
    Set objOl = Nothing
End Sub

Ik krijgeen error ..
 

Bijlagen

Laatst bewerkt door een moderator:
Dit werkt bij mij wel:

Code:
Sub Doorvoeren()

    With Sheets("Uren")
        Sheets("Blad1").Range("E1:I1").Copy .Range("A" & .Range("A" & Rows.Count).End(xlUp).Row + 1)
    End With
    
End Sub

en ook trouwens

Code:
Sub Doorvoeren()

With Sheets("Uren")
Sheets("Blad1").Range("E1:F1,G1:H1,I1").Copy .Range("A" & .Range("A" & Rows.Count).End(xlUp).Row + 1)
End With
End Sub

Wigi
 
Ok, dit werkt ook voor mij.
Maar wat ik eigenlijk wil:

Ik wil mijn uren die ik heb gewerkt op een ander werkblad kopieren. Nu merk ik als ik alles email, mijn totaal uren ook meezend. Dat gaat niemand iets aan natuurlijk.
Daarom is mijn vraag: hoe kopieer ik Sheet F2, H2 en I2 naar een nieuw werkblad en zodanig dat bij nieuwe invoer automatisch een regel naar beneden opschuift.

Ook heb ik een code om mijn sheet in de map concepten op te slaan om pas later alles op te sturen via de email. maar de code werkt niet voor mij omdat hij de sheet niet opslaat!

Ik kom zo een heel stuk verder hoor, bedankt alvast!!:)

Dit is die code:

Code:
Sub BewaarEmailInConcepten()
    Dim objOl As Outlook.Application
    Dim objNamespace As Outlook.Namespace
    Dim objMAPIFolder As Outlook.MAPIFolder
    Dim objMail As Object

    Set objOl = Outlook.Application 'Start Outlook
    On Error Resume Next
    Set objNamespace = objOl.GetNamespace(Type:="MAPI")
    If Err <> 0 Then
        Set objOl = New Outlook.Application 'Zo nee: start Outlook
        Set objNamespace = objOl.GetNamespace(Type:="MAPI")
    End If
    Set objMAPIFolder = objNamespace.GetDefaultFolder(16)
    'Folder voor Concepten wordt geselecteerd

    Set objMail = objOl.CreateItem(olMailItem) 'Maakt e-mailbericht
    'olMailItem kunt u ook vervangen door 0 (de code voor een e-mailbericht)

    ThisWorkbook.Sheets(1).Copy
    
    ActiveWorkbook.SaveAs ThisWorkbook.Path & "\" & _
        "Rittenstaat.xls"
    
    'Gebruik eventueel deze optie in oudere versies van Outlook
    'waarbij een e-mail wordt verzonden namens een ander e-mailadres.
    objMail.SentOnBehalfOfName = "R.Sebregts <blabla@bla.nl>"
    '////////////////////////////////////////////////////

    With objMail
        .To = "blabla@bla.nl" 'Deze moet worden aangepast
        'Het is helaas niet mogelijk het FROM-veld aan te passen
        'Zie bovenstaande oplossing voor Outlook 2007.
        .Subject = "Rittenstaat"
        '.Body = "Hier plaatst u de inhoud van het bericht"
        .HTMLBody = "<HTML><P>Rittenstaat</P></HTML>"
        .NoAging = True
        Attachments.Add ActiveWorkbook.FullName
        .Display
        '.Display 'Laat e-mail zien voordat hij verzonden wordt
        .save 'Voorkomt de vraag om op te slaan, slaat nu op in Concepten
        '.Send 'Verzenden van e-mailbericht
    End With
    
    ActiveWorkbook.Close False

    Kill ThisWorkbook.Path & "\" & "Rittenstaat.xls"

    Set objMail = Nothing
    objOl.Quit
    Set objMAPIFolder = Nothing
    Set objNamespace = Nothing
    Set objOl = Nothing
End Sub
 
Laatst bewerkt door een moderator:
Sorry , ik ben nieuw dus kende ik die codes nog niet.

Ik heb nu:
Code:
Sub Doorvoeren()

With Sheets("Uren")
    Sheets("Blad1").Range("E1:F1,G1:H1,I1").Copy .Range("B" & .Range("B" & Rows.Count).End(xlUp).Row + 1)
End With
End Sub

Dit werkt ok . Maar nu wil dat de data niet naar Sheet uren wordt geschreven, maar naar een Werkblad Uren die telkens word aangevuld. Net als de code hierboven trouwens..
 
Maar nu wil dat de data niet naar Sheet uren wordt geschreven, maar naar een Werkblad Uren die telkens word aangevuld. Net als de code hierboven trouwens..

Dat doet de code toch al? Het vult aan in kolom B onder de huidige ingevulde cellen in kolom B.
 
Hallo digitall

Ik kijk ook even mee en probeer te volgen wat al werkt of nog niet.
Kan je aub kort herhalen of en wat het probleem op dit moment nog is?
Ik stel voor dat je de laatste versie nog eens upload.

Iedereen kan vba leren, met wat geduld.
En ook gevorderden zijn nooit te oud om te leren.
Dit forum heet niet voor niets 'helpmij'.
Als iedereen alles al wist is het forum overbodig.
 
Ok, bedankt hoor.

Wat ik wil is:

Nu worden mijn uren naar sheet Uren geschreven. Maar ik wil deze uren naar een ander werkmap kopieren. Dat is deze code:

Code:
Sub Doorvoeren()

With Sheets("Uren")
    Sheets("Blad1").Range("E1:F1,G1:H1,I1").Copy .Range("B" & .Range("B" & Rows.Count).End(xlUp).Row + 1)
End With
End Sub


En dan heb ik een email code waarin ik de huidige werkmap email:

Code:
Sub Mail_workbook_1()
'Working in 97-2007
    Dim wb As Workbook
    Set wb = ActiveWorkbook
    
    On Error Resume Next
    wb.SendMail "Henk@verhoefservicecompany.com", _
                "Rittenstaat"
    On Error GoTo 0
End Sub

Maar ik moet nu iedere keer voor elke werkmap een email sturen. Ik wil graag dat het eerst naar de emailmap concepten word gestuurd en dat ik dan alles in 1 keer alles kan emailen.
Ik heb wel een code, maar dan zend deze geen bijlage mee naar de emailmap concepten:

Code:
Sub BewaarEmailInConcepten()
    Dim objOl As Outlook.Application
    Dim objNamespace As Outlook.Namespace
    Dim objMAPIFolder As Outlook.MAPIFolder
    Dim objMail As Object

    Set objOl = Outlook.Application 'Start Outlook
    On Error Resume Next
    Set objNamespace = objOl.GetNamespace(Type:="MAPI")
    If Err <> 0 Then
        Set objOl = New Outlook.Application 'Zo nee: start Outlook
        Set objNamespace = objOl.GetNamespace(Type:="MAPI")
    End If
    Set objMAPIFolder = objNamespace.GetDefaultFolder(16)
    'Folder voor Concepten wordt geselecteerd

    Set objMail = objOl.CreateItem(olMailItem) 'Maakt e-mailbericht
    'olMailItem kunt u ook vervangen door 0 (de code voor een e-mailbericht)

    ThisWorkbook.Sheets(1).Copy
    
    ActiveWorkbook.SaveAs ThisWorkbook.Path & "\" & _
        "Rittenstaat.xls"
    
    'Gebruik eventueel deze optie in oudere versies van Outlook
    'waarbij een e-mail wordt verzonden namens een ander e-mailadres.
    objMail.SentOnBehalfOfName = "R.Sebregts <r.sebregts@alice.nl>"
    '////////////////////////////////////////////////////

    With objMail
        .To = "r.sebregts@alice.nl" 'Deze moet worden aangepast
        'Het is helaas niet mogelijk het FROM-veld aan te passen
        'Zie bovenstaande oplossing voor Outlook 2007.
        .Subject = "Rittenstaat"
        '.Body = "Hier plaatst u de inhoud van het bericht"
        .HTMLBody = "<HTML><P>Rittenstaat</P></HTML>"
        .NoAging = True
        Attachments.Add ActiveWorkbook.FullName
        .Display
        '.Display 'Laat e-mail zien voordat hij verzonden wordt
        .save 'Voorkomt de vraag om op te slaan, slaat nu op in Concepten
        '.Send 'Verzenden van e-mailbericht
    End With
    
    ActiveWorkbook.Close False

    Kill ThisWorkbook.Path & "\" & "Rittenstaat.xls"

    Set objMail = Nothing
    objOl.Quit
    Set objMAPIFolder = Nothing
    Set objNamespace = Nothing
    Set objOl = Nothing
End Sub

Ik hoop dat het nu wat duidelijker is, ik doe mijn best..
 

Bijlagen

Een vraag:
Is het een optie om tussentijds eerst alle bestanden naar één windows-map te schrijven en daarna pas de inhoud van de map te mailen?
Dat laatste gaat waarschijnlijk ook eenvoudiger handmatig dan met vba.
Zomaar een idee.

Ik ben niet zo bedreven met het uitwisselen van bestanden tussen excel en outlook, via vba.
Maar er zijn vast forumleden met meer kennis en ervaring op dit gebied.
 
Nou, dat maakt mij niet uit.
Nu moet elk werkmap apart worden gemaild. Het makkelijkste is natuurlijk als alle bestanden eerst word verzameld en pas daarna worden gemaild.
 
Dan lijkt dat mij toch een betere optie.
Hier kan je eens kijken naar oplossingen.
Hij geeft ook voorbeelden en een add-in.
Dit is één van de betere referenties voor mailen via excel.

Ik zal nog eens naar je code kijken.
 
Ja, ik heb die site ook al gezien, maar de code heb ik niet van hem.
En ik zie er ook niet tussen staan om eerst alle werkmappen apart op te slaan om ze pas aan het einde te versturen.

Ik heb het over: Macro voor het automatisch opslaan van e-mail in de map Concepten
http://www.schoonepc.nl/nieuwsbrief/tips_versturen_facturen_email.html

Hier staat wat ik bedoel.

En weten jullie al een oplossing voor mijn 1e probleem: het kopieeren van data naar een ander werkblad?
 
Hallo digitall

Kan je het excel bestand eerst eens wat opruimen.
En dan nog eens uploaden.Nu bevat het heel veel lege modules.
Dat maakt het voor ons wat eenvoudiger om mee te denken.
Een kopieerroutine is goed te maken.
Dan is het handiger dat je even gaat herhalen wat je nu nog precies wilt.
Deze draad wordt wat lang om door te pluizen.

Daarom een paar vragen:
a) welke data moet waar heen?
Herhaal even de juiste cellen en vermeld ook de sheetnaam.
Waar staat het en waar moet het dan heen.
b) je maakt begrijp ik aan iedere keer een nieuwe rittenstaat aan en
die gegevens moeten daarna worden gekopieerd naar het overzichtsblad uren
op een nieuwe regel.

Laten we ook proberen aub bij één probleem tegelijk te blijven. :confused:
We horen van je.

(ik sta nu ingelogd onder mijn andere alias; was even vergeten dat ik er twee heb)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan