Posted to microsoft.public.excel.programming
|
|
email issue: need last user input only
Hi Sam
That it is doing now
It create a new workbook
Copy the header and last row in it
Save it
Mail it
delete it
Your workbook with the userform is still the same
--
Regards Ron de Bruin
http://www.rondebruin.nl/tips.htm
"sam" schreef in bericht
...
Hey Ron, Is this approach possible?
1. Saving all User inputs(accepted through userform) in a workbook
template,
lets say: UserWb.xls
2. Now, Saving a copy of the same workbook(UserWb.xls) as UserWbCpy.xls
with
just he current user entry.
3. Mailing the copy that includes current user entry only(UserWbCpy.xls)
4. Deleting the copy(UserWbCpy.xls).
But the original template still remains(UserWb.xls) as I want to keep a
backup file of all user inputs.
Thanks in advance
"Ron de Bruin" wrote:
You are welcome
--
Regards Ron de Bruin
http://www.rondebruin.nl/tips.htm
"sam" schreef in bericht
...
Thank you for all your help, it worked out great. I have to tweak the
code
a
little to make it work my way, thank you for your sources available
online.
"Ron de Bruin" wrote:
Use this then and read this page about the warning
http://www.rondebruin.nl/mail/prevent.htm
If you use Outlook you can also add body text if you want
See
http://www.rondebruin.nl/sendmail.htm
Sub Mail_Range()
'Working in 2000-2007
Dim Source1 As Range
Dim Source2 As Range
Dim Dest As Workbook
Dim wb As Workbook
Dim TempFilePath As String
Dim TempFileName As String
Dim FileExtStr As String
Dim FileFormatNum As Long
Dim Lrow As Long
Lrow = LastRow(ActiveSheet)
On Error Resume Next
Set Source1 = Range("A1:K1")
On Error GoTo 0
On Error Resume Next
Set Source2 = Range("A" & Lrow & ":K" & Lrow)
On Error GoTo 0
With Application
.ScreenUpdating = False
.EnableEvents = False
End With
Set wb = ActiveWorkbook
Set Dest = Workbooks.Add(xlWBATWorksheet)
Source1.Copy
With Dest.Sheets(1)
.Cells(1).PasteSpecial Paste:=8
.Cells(1).PasteSpecial Paste:=xlPasteValues
.Cells(1).PasteSpecial Paste:=xlPasteFormats
.Cells(1).Select
Application.CutCopyMode = False
End With
Source2.Copy
With Dest.Sheets(1)
.Cells(2, 1).PasteSpecial Paste:=8
.Cells(2, 1).PasteSpecial Paste:=xlPasteValues
.Cells(2, 1).PasteSpecial Paste:=xlPasteFormats
.Cells(2, 1).Select
Application.CutCopyMode = False
End With
TempFilePath = Environ$("temp") & "\"
TempFileName = "Selection of " & wb.Name & " " _
& Format(Now, "dd-mmm-yy h-mm-ss")
If Val(Application.Version) < 12 Then
'You use Excel 2000-2003
FileExtStr = ".xls": FileFormatNum = -4143
Else
'You use Excel 2007
FileExtStr = ".xlsx": FileFormatNum = 51
End If
With Dest
.SaveAs TempFilePath & TempFileName & FileExtStr, _
FileFormat:=FileFormatNum
On Error Resume Next
.SendMail ", _
"This is the Subject line"
On Error GoTo 0
.Close SaveChanges:=False
End With
Kill TempFilePath & TempFileName & FileExtStr
With Application
.ScreenUpdating = True
.EnableEvents = True
End With
End Sub
Function LastRow(sh As Worksheet)
On Error Resume Next
LastRow = sh.Cells.Find(What:="*", _
After:=sh.Range("A1"), _
Lookat:=xlPart, _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious, _
MatchCase:=False).Row
On Error GoTo 0
End Function
"sam" schreef in bericht
...
Hey Ron, This worked out great. Thanks a Lot for your help.
One thing I also wanted was to mail column headers with the last
updated
row.. The first row contains column headers and I would like to mail
that
as
well.
I tried updaing this part of the code:
Set Source = Range("A" & Lrow & ":K" &
Lrow).SpecialCells(xlCellTypeVisible)
to:
Set Source = Range("A" & Lrow & ":K" & Lrow &
Frow).SpecialCells(xlCellTypeVisible)
But it didnt mail the first row, ALso when I it mails, it asks me to
allow
or deny the macro to mail the book, should I set
Application.DisplayAlerts =
False ?
Thanks a lot again.
"Ron de Bruin" wrote:
Change the mail address to yours before you test it
"Ron de Bruin" schreef in bericht
...
Hi Sam
Try this
Sub Mail_Range()
'Working in 2000-2007
Dim Source As Range
Dim Dest As Workbook
Dim wb As Workbook
Dim TempFilePath As String
Dim TempFileName As String
Dim FileExtStr As String
Dim FileFormatNum As Long
Dim Lrow As Long
Lrow = LastRow(ActiveSheet)
Set Source = Nothing
On Error Resume Next
Set Source = Range("A" & Lrow & ":K" &
Lrow).SpecialCells(xlCellTypeVisible)
On Error GoTo 0
If Source Is Nothing Then
MsgBox "The source is not a range or the sheet is
protected,
" &
_
"please correct and try again.", vbOKOnly
Exit Sub
End If
With Application
.ScreenUpdating = False
.EnableEvents = False
End With
Set wb = ActiveWorkbook
Set Dest = Workbooks.Add(xlWBATWorksheet)
Source.Copy
With Dest.Sheets(1)
.Cells(1).PasteSpecial Paste:=8
.Cells(1).PasteSpecial Paste:=xlPasteValues
.Cells(1).PasteSpecial Paste:=xlPasteFormats
.Cells(1).Select
Application.CutCopyMode = False
End With
TempFilePath = Environ$("temp") & "\"
TempFileName = "Selection of " & wb.Name & " " _
& Format(Now, "dd-mmm-yy h-mm-ss")
If Val(Application.Version) < 12 Then
'You use Excel 2000-2003
FileExtStr = ".xls": FileFormatNum = -4143
Else
'You use Excel 2007
FileExtStr = ".xlsx": FileFormatNum = 51
End If
With Dest
.SaveAs TempFilePath & TempFileName & FileExtStr, _
FileFormat:=FileFormatNum
On Error Resume Next
.SendMail ", _
"This is the Subject line"
On Error GoTo 0
.Close SaveChanges:=False
End With
Kill TempFilePath & TempFileName & FileExtStr
With Application
.ScreenUpdating = True
.EnableEvents = True
End With
End Sub
Function LastRow(sh As Worksheet)
On Error Resume Next
LastRow = sh.Cells.Find(What:="*", _
After:=sh.Range("A1"), _
Lookat:=xlPart, _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious, _
MatchCase:=False).Row
On Error GoTo 0
End Function
"sam" schreef in bericht
...
Thanks for your reply Ron,
I have 26 cells of data in a row that I need to mail, from A to
Z,
I
have
to
send it as an excel attachment.
Thanks in advance
"Ron de Bruin" wrote:
Hi Sam
How many cells with data have a row ?
Do you want to send it in the body or in a workbook
"sam" schreef in bericht
...
Hi All,
I have a userform that accepts user inputs and emails it to
me
once
users
click "Submit" on the userform. Before being emailed they are
stored
in a
workbook on a shared drive.
What is happening is: this workbook that is emailed to me
stores
the
user
inputs of each user in a separate row, and hence I am
receiving
the
whole
workbook with inputs of all the users.
What I want: I want to receive just the current users data.
I
dont
want
to
receive the entire workbook, but the data that has been
inputted
by
the
last
user only. (For e.g. only the last row updated in the
workbook)
and
not
__________ Information from ESET Smart Security, version of virus
signature database 4286 (20090728) __________
The message was checked by ESET Smart Security.
http://www.eset.com
__________ Information from ESET Smart Security, version of virus signature database 4286 (20090728) __________
The message was checked by ESET Smart Security.
http://www.eset.com
|