Cel selectie mailen als nieuw Excelbestand (Excel 2010)

Status
Niet open voor verdere reacties.

corvdh

Gebruiker
Lid geworden
29 aug 2010
Berichten
128
Ik ben bezig een macro aan te passen, maar 1 ding wil mij niet lukken.
Ik zal het even kort uitleggen.

Ik start de macro en er verschijnt een inputbox .
Ik selecteer de cellen A2:K15 en klik op Ok, vervolgens word deze selectie inclusief de opmaak naar een nieuw Excel bestand gekopieerd en als mail bijlage automatisch naar diverse personen gemaild.

Tot zover werkt alles goed alleen het formaat van de rijen en kolommen word niet overgenomen.
In het nieuwe Excelbestand die men per mail ontvangt zijn de rijen en de kolommen soms te smal en is dus soms de tekst in een cel niet goed te lezen.
Zo is kolom K in het originele bestand 61,14 (432 pixels) breed maar in het per mail ontvangen bestand maar 8,43 (64 pixels).

Als nu de hoogte en de breedte van de cellen ook zou worden overgenomen dan zou de macro perfect zijn.
Weet iemand of dit mogelijk is?

Hier onder zie je een voorbeeld van de macro zoals die nu is.

Code:
Sub email_verzenden_met_celselectie_als_bijlage_TEST()
   '
   
   
   
1        Dim lngAntwoord As Long
2   lngAntwoord = MsgBox("Wil je een e-mail sturen met als bijlage een Exelbestand" + vbCr + "met daarin een door jou gemaakte celselectie?" + vbCr + vbCr + "Klik op Ja om de celselectie te maken die je wilt e-mailen." + vbCr + vbCr + "De volgende personen zullen deze mail ontvangen:" + vbCr + vbCr + " Test persoon 1" + vbCr + " Test persoon 2" + vbCr + " Test persoon 3" + vbCr + " Test persoon 4" + vbCr + " Test persoon 5", vbQuestion + vbYesNo + vbDefaultButton2, "Celselectie e-mailen als bijlage")
    If lngAntwoord = vbYes Then
    GoTo 3
    Else
    GoTo Error_handler:
    End If
   
3    Dim xFile As String
     Dim xFormat As Long
     Dim Wb As Workbook
     Dim Wb2 As Workbook
     Dim Ws As Worksheet
     Dim FilePath As String
     Dim FileName As String
     Dim OutlookApp As Object
     Dim OutlookMail As Object
     Dim WorkRng As Range
5     xTitleId = "Selecteer de cellen die je wilt mailen"
      On Error GoTo Error_handler:
     Set WorkRng = Application.Selection
8    Set WorkRng = Application.InputBox("Celbereik selecteren", xTitleId, WorkRng.Address, Type:=8)
     Application.ScreenUpdating = False
     Application.DisplayAlerts = False
     Set Wb = Application.ActiveWorkbook
     Wb.Worksheets.Add
     Set Ws = Application.ActiveSheet
     WorkRng.Copy Ws.Cells(1, 1)
     Ws.Copy
     Set Wb2 = Application.ActiveWorkbook
     Select Case Wb.FileFormat
     Case xlOpenXMLWorkbook:
     xFile = ".xlsx"
     xFormat = xlOpenXMLWorkbook
     Case xlOpenXMLWorkbookMacroEnabled:
     If Wb2.HasVBProject Then
     xFile = ".xlsm"
     xFormat = xlOpenXMLWorkbookMacroEnabled
     Else
     xFile = ".xlsx"
     xFormat = xlOpenXMLWorkbook
     End If
     Case Excel8:
     xFile = ".xls"
     xFormat = Excel8
     Case xlExcel12:
     xFile = ".xlsb"
     xFormat = xlExcel12
     End Select
     FilePath = Environ$("temp") & "\"
     FileName = Wb.Name & Format(Now, " dd-mmm-yyyy h uur mm")
     Set OutlookApp = CreateObject("Outlook.Application")
     Set OutlookMail = OutlookApp.CreateItem(0)
     Wb2.SaveAs FilePath & FileName & xFile, FileFormat:=xFormat
     With OutlookMail
     .To = "test@mail.nl" 'Typ hier een geldig e-mail adres
     .CC = ""
     .BCC = ""
     .Subject = "Onderwerpnaam van de mail"
     .Body = "Bij deze een update met de laatste wijzigingen in het test Excelbestand. (zie bijlage)"
     .Attachments.Add Wb2.FullName
     .Send
     End With
     Wb2.Close
     Kill FilePath & FileName & xFile
     Set OutlookMail = Nothing
     Set OutlookApp = Nothing
     Ws.Delete
     Application.DisplayAlerts = True
     Application.ScreenUpdating = True
     
     
9    MsgBox "De e-mail is verzonden.", vbInformation, "Ter informatie"
     GoTo 10
Error_handler: MsgBox "De e-mail is niet verzonden.", vbExclamation, "Geannuleerd"


10   Range("O1").Select
   
    End Sub
 
Kolommen kan je op de volgende manier laten passen voor de breedste tekst:
Sheets("Blad1").Columns("A:Z").AutoFit

Maaruh, je hebt Basic geleerd middels QBASIC of iets in die richting? Ik zou toch die code eens aanpassen naar wat er in VBA mogelijk is.
 
Laatst bewerkt:
Hallo edmoor

Ik ben geen expert, ik heb deze code van internet geplukt en die vervolgens aangepast naar mijn wensen.
Ik heb je oplossing geprobeerd,
Code:
Sheets("Blad1").Columns("A:Z").AutoFit
maar dit geeft nog niet het gewenste resultaat.
Wil je even uitleggen waar ik deze regel in de macro moet plaatsen?
 
Die plaats je daar waar je het betreffende document onderhanden hebt, net voordat je het document sluit. Daarnaast moet je uiteraard de bladnaam en eventueel de range naar behoefte aanpassen.
 
Ik heb van alles geprobeerd maar de kolommen (A t/m K) blijven nog steeds te smal.
Zo is kolom K in het originele bestand 61,14 (432 pixels) breed maar in het per mail ontvangen bestand maar 8,43 (64 pixels).
Waarschijnlijk plaats ik jou code regel op de verkeerde plek.
Tussen welke regels moet die komen te staan?
 
Die code is erg slecht te lezen maar ik denk zo, op deze plek:

Code:
     Set OutlookMail = OutlookApp.CreateItem(0)
     [COLOR="#FF0000"]Wb2.Sheets("Blad1").Columns("A:K").AutoFit[/COLOR]
     Wb2.SaveAs FilePath & FileName & xFile, FileFormat:=xFormat
     With OutlookMail

Bladnaam Blad1 is wel goed?
 
Ik heb het precies gedaan zoals je het hebt uitgelegd maar zonder gewenst resultaat. (kolommen zijn nog steeds te smal)
De naam van het werkblad van het originele bestand is 2015, maar de naam van het werkblad uit het bestand die ik na uitvoeren van de macro per mail ontvang is Blad1.
 
Plaats je document eens.
 
Dit zou toch moeten werken:
Code:
    FilePath = Environ$("temp") & "\"
    FileName = Wb.Name & Format(Now, " dd-mmm-yyyy h uur mm")
    Wb2.ActiveSheet.Name = Year(Date)
    Wb2.ActiveSheet.Columns("A:ZZ").AutoFit
    Wb2.SaveAs FilePath & FileName & xFile, FileFormat:=xFormat
 
Het is inmiddels gelukt.

Een aantal cellen waren niet goed opgemaakt.
Sommige waren opgemaakt als standaard, dit via celeigenschappen - tab Getal veranderd naar Tekst of getal en nu werkt het wel goed.

Bedankt voor het mee denken.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan