Originally posted by danp129
This is quite a bit different than you first request, try lay out everything that's needed the first time you post and your issue can be resolved a little faster usually.
I'm pretty sure this is what you want.
I'm pretty sure this is what you want.
Code:
Private Sub Command1_Click()
'Requires reference: Microsoft Excel (version) Object Library
Dim XLapp As New Excel.Application
XLapp.Visible = True
Dim wbkReport As Excel.Workbook
Dim wbkTemplate As Excel.Workbook
Dim wksReport As Excel.Worksheet
Dim wksTemplate As Excel.Worksheet
Dim sOpenFileName As String, sSaveAsFileName As String, iSheet As Integer
'Set path to template file here
sOpenFileName = App.Path & "\" & "My Report Template.xls"
'Set your path to save file here:
sSaveAsFileName = App.Path & "\" & "Manual Visual Report - " & Replace(Date, "/", "-") & ".xls"
'Open template
Set wbkTemplate = XLapp.Workbooks.Open(sOpenFileName)
'Suppress Excel warnings
XLapp.DisplayAlerts = False
If Dir(sSaveAsFileName) <> "" Then
'if a report from today exists, reset use it as the template
Set wbkReport = XLapp.Workbooks.Open(sSaveAsFileName)
Set wksTemplate = wbkTemplate.Sheets(1)
wksTemplate.Copy after:=wbkReport.Sheets(wbkReport.Sheets.Count)
Set wksReport = wbkReport.Sheets(wbkReport.Sheets.Count)
wbkTemplate.Close SaveChanges:=False
Else
'This is the first report of the day
Set wbkReport = wbkTemplate
'Set reference to first sheet in workbook
Set wksReport = wbkReport.Sheets(1)
'Delete extra sheets from template
If wbkReport.Sheets.Count > 1 Then
'Start deleting extra sheets (only in this 'copy' of the template)
'if they exist, starting from last sheet
For iSheet = wbkReport.Sheets.Count To 2 Step -1
If wbkReport.Sheets(iSheet).Name = "Sheet" & iSheet Then wbkReport.Sheets(iSheet).Delete
Next 'iSheet
End If
End If
'Set report sheet name based on form name (duplicate names not allowed...)
wksReport.Name = Mid(Me.Name, 4)
'Copy text fields
wksReport.range("E4") = txtPro.Text
wksReport.range("l4") = txtLine.Text
wksReport.range("t4") = txtProDate.Text
wksReport.range("ab4") = txtInspec.Text
'Save workbook as whatever is in "sSaveAsFileName" variable
wbkReport.SaveAs FileName:= _
sSaveAsFileName, FileFormat:= _
xlNormal, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False _
, CreateBackup:=False
'Close workbook
wbkReport.Close SaveChanges:=False
'Allow Excel warnings
XLapp.DisplayAlerts = True
'Remove references to sheets/workbooks before quitting (was hanging a second on wksreport if Excel was closed already)
Set wksReport = Nothing
Set wbkReport = Nothing
Set wksTemplate = Nothing
Set wbkTemplate = Nothing
'Close Excel
XLapp.Quit
'Remove final reference
Set XLapp = Nothing
End Sub
Cool danp,
You give me a big help. This is what I want. ^_^ Thanks very much. By the way, nice to meet you.
Comment