Forum Discussion
Janedb
Oct 24, 2022Iron Contributor
Create a folder and saving a worksheet as workbook in the folder
Hi, I have two tabs, one is the register and the other the template. I need a VBA to click a button on the register to use the template to create a new worksheet then create the folder to save the wo...
- Oct 24, 2022
' Use the register to autfill the client sheet and the create folder and saving worksheet as Workbook in new folder Public Sub SaveFinancialDataToPlace1() ' This procedure extracts information from specific cells in the active ' worksheet to determine where to save the [...?] data; it then ' determines where to save the worksheet data, and saves it there as ' a new workbook. Const strPROCEDURE_NAME As String = "SaveFinancialDataToPlace1" Const strBASE_PATH As String = _ "C:\Users\medcomp\Dropbox\OCEANLINK\OCEANLINKLAUNCH\Financials\Job Sheets" Dim strWorksheetName As String Dim strFilename As String Dim strDirname As String 'the subdirectory name Dim strFullDirName As String Dim strPathname As String Dim strResult As String '---- Clear any prior message in the status bar. Application.StatusBar = "" '---- Capture here the identity of the active worksheet. strWorksheetName = ActiveSheet.Name '---- Retrieve values from the worksheet. With Worksheets(strWorksheetName) strDirname = .Range("C5").Value ' New directory name strFilename = .Range("C5").Value & .Range("H3").Value & " " _ & .Range("C6").Text 'New file name End With If strDirname = "" Then Call MsgBox("Cell C5 needs to contain a subdirectory name." _ , vbExclamation Or vbOKOnly, strPROCEDURE_NAME) Exit Sub End If ' (More simple validation could be included here.) #ToDo '---- Derive related values. strFullDirName = strBASE_PATH & "\" & strDirname strPathname = strFullDirName & "\" & strFilename '---- Ensure that the desired destination directory exists. strResult = MakeDirectoryAsNeeded(strFullDirName) If strResult <> "Success" Then Call MsgBox("Problem regarding the destination directory (" _ & strFullDirName & "):" & vbCrLf & strResult) Exit Sub End If '---- Save the worksheet as a new workbook. strResult = ExportWorksheetAsWorkbook(strWorksheetName, strPathname) If strResult = "Success" Then Application.StatusBar = "Worksheet " & strWorksheetName _ & " was successfully exported to a new workbook" Else Application.StatusBar = "Processing error!" Call MsgBox("Error while saving worksheet " & strWorksheetName _ & ":" & vbCrLf & strResult, vbExclamation Or vbOKOnly _ , strPROCEDURE_NAME) Exit Sub '(to be explicit) End If End Sub Public Function MakeDirectoryAsNeeded(ByVal FullDirectoryName As String) _ As String Dim strReturnValue As String Dim in4ErrorCode As Long Dim strErrorDescr As String Dim in4Attribute As VbFileAttribute '---- Check to see if the directory already exists. On Error Resume Next '(It is likely that the next statment _ will cause a processing error.) in4Attribute = GetAttr(FullDirectoryName) in4ErrorCode = Err.Number strErrorDescr = Err.Description On Error GoTo 0 Select Case in4ErrorCode Case 0 '...the file system object exists. Do a further check. If in4Attribute And vbDirectory Then '...the directory already exists. Treat that as a ' successful execution. strReturnValue = "Success" GoTo MakeDirAsNeeded_Exit Else strReturnValue = "The file system object " _ & FullDirectoryName _ & " already exists as a regular file." GoTo MakeDirAsNeeded_Exit End If Case 53 '...the directory does not exist. Continue. Case Else strReturnValue = strErrorDescr GoTo MakeDirAsNeeded_Exit End Select '---- Attempt to create the directory; return the VBA-supplied ' error description if a processing error occurs. On Error Resume Next MkDir FullDirectoryName in4ErrorCode = Err.Number strErrorDescr = Err.Description On Error GoTo 0 Select Case in4ErrorCode Case 0 'no processing error '...that code created the directory. strReturnValue = "Success" Case Else strReturnValue = strErrorDescr End Select MakeDirAsNeeded_Exit: MakeDirectoryAsNeeded = strReturnValue Exit Function End Function Public Function ExportWorksheetAsWorkbook(ByVal WorksheetName As String _ , ByVal ToPathname As String) As String Dim strReturnValue As String '---- On Error GoTo ExportWkshtAsWorkbook_ErrHandler Worksheets(WorksheetName).Copy ActiveWorkbook.SaveAs Filename:=ToPathname, FileFormat:=xlOpenXMLWorkbook ActiveWorkbook.Close SaveChanges:=False strReturnValue = "Success" ExportWkshtAsWorkbook_Exit: ExportWorksheetAsWorkbook = strReturnValue Exit Function ExportWkshtAsWorkbook_ErrHandler: strReturnValue = Err.Description Resume ExportWkshtAsWorkbook_Exit End Function
HansVogelaar
Oct 24, 2022MVP
' Use the register to autfill the client sheet and the create folder and saving worksheet as Workbook in new folder
Public Sub SaveFinancialDataToPlace1()
' This procedure extracts information from specific cells in the active
' worksheet to determine where to save the [...?] data; it then
' determines where to save the worksheet data, and saves it there as
' a new workbook.
Const strPROCEDURE_NAME As String = "SaveFinancialDataToPlace1"
Const strBASE_PATH As String = _
"C:\Users\medcomp\Dropbox\OCEANLINK\OCEANLINKLAUNCH\Financials\Job Sheets"
Dim strWorksheetName As String
Dim strFilename As String
Dim strDirname As String 'the subdirectory name
Dim strFullDirName As String
Dim strPathname As String
Dim strResult As String
'---- Clear any prior message in the status bar.
Application.StatusBar = ""
'---- Capture here the identity of the active worksheet.
strWorksheetName = ActiveSheet.Name
'---- Retrieve values from the worksheet.
With Worksheets(strWorksheetName)
strDirname = .Range("C5").Value ' New directory name
strFilename = .Range("C5").Value & .Range("H3").Value & " " _
& .Range("C6").Text 'New file name
End With
If strDirname = "" Then
Call MsgBox("Cell C5 needs to contain a subdirectory name." _
, vbExclamation Or vbOKOnly, strPROCEDURE_NAME)
Exit Sub
End If
' (More simple validation could be included here.) #ToDo
'---- Derive related values.
strFullDirName = strBASE_PATH & "\" & strDirname
strPathname = strFullDirName & "\" & strFilename
'---- Ensure that the desired destination directory exists.
strResult = MakeDirectoryAsNeeded(strFullDirName)
If strResult <> "Success" Then
Call MsgBox("Problem regarding the destination directory (" _
& strFullDirName & "):" & vbCrLf & strResult)
Exit Sub
End If
'---- Save the worksheet as a new workbook.
strResult = ExportWorksheetAsWorkbook(strWorksheetName, strPathname)
If strResult = "Success" Then
Application.StatusBar = "Worksheet " & strWorksheetName _
& " was successfully exported to a new workbook"
Else
Application.StatusBar = "Processing error!"
Call MsgBox("Error while saving worksheet " & strWorksheetName _
& ":" & vbCrLf & strResult, vbExclamation Or vbOKOnly _
, strPROCEDURE_NAME)
Exit Sub '(to be explicit)
End If
End Sub
Public Function MakeDirectoryAsNeeded(ByVal FullDirectoryName As String) _
As String
Dim strReturnValue As String
Dim in4ErrorCode As Long
Dim strErrorDescr As String
Dim in4Attribute As VbFileAttribute
'---- Check to see if the directory already exists.
On Error Resume Next '(It is likely that the next statment _
will cause a processing error.)
in4Attribute = GetAttr(FullDirectoryName)
in4ErrorCode = Err.Number
strErrorDescr = Err.Description
On Error GoTo 0
Select Case in4ErrorCode
Case 0
'...the file system object exists. Do a further check.
If in4Attribute And vbDirectory Then
'...the directory already exists. Treat that as a
' successful execution.
strReturnValue = "Success"
GoTo MakeDirAsNeeded_Exit
Else
strReturnValue = "The file system object " _
& FullDirectoryName _
& " already exists as a regular file."
GoTo MakeDirAsNeeded_Exit
End If
Case 53
'...the directory does not exist. Continue.
Case Else
strReturnValue = strErrorDescr
GoTo MakeDirAsNeeded_Exit
End Select
'---- Attempt to create the directory; return the VBA-supplied
' error description if a processing error occurs.
On Error Resume Next
MkDir FullDirectoryName
in4ErrorCode = Err.Number
strErrorDescr = Err.Description
On Error GoTo 0
Select Case in4ErrorCode
Case 0 'no processing error
'...that code created the directory.
strReturnValue = "Success"
Case Else
strReturnValue = strErrorDescr
End Select
MakeDirAsNeeded_Exit:
MakeDirectoryAsNeeded = strReturnValue
Exit Function
End Function
Public Function ExportWorksheetAsWorkbook(ByVal WorksheetName As String _
, ByVal ToPathname As String) As String
Dim strReturnValue As String
'----
On Error GoTo ExportWkshtAsWorkbook_ErrHandler
Worksheets(WorksheetName).Copy
ActiveWorkbook.SaveAs Filename:=ToPathname, FileFormat:=xlOpenXMLWorkbook
ActiveWorkbook.Close SaveChanges:=False
strReturnValue = "Success"
ExportWkshtAsWorkbook_Exit:
ExportWorksheetAsWorkbook = strReturnValue
Exit Function
ExportWkshtAsWorkbook_ErrHandler:
strReturnValue = Err.Description
Resume ExportWkshtAsWorkbook_Exit
End Function- JanedbJul 07, 2023Iron Contributor
HansVogelaar is there a way to change the link to accommodate multiple users from different locations to save to the save drive? If I set it to my name Jane, then Marc cant use it because he gets an error because it is pointing to my user.
C:\Users\Jane\Dropbox\OCEANLINK\OCEANLINKLAUNCH\Financials\Job Sheets
C:\Users\user?\Dropbox\OCEANLINK\OCEANLINKLAUNCH\Financials\Job Sheets
- HansVogelaarJul 07, 2023MVP
Change the lines
Const strBASE_PATH As String = _ "C:\Users\medcomp\Dropbox\OCEANLINK\OCEANLINKLAUNCH\Financials\Job Sheets"to
Dim strBASE_PATH As String strBASE_PATH = Environ("UserProfile") & _ "\Dropbox\OCEANLINK\OCEANLINKLAUNCH\Financials\Job Sheets"- JanedbJul 10, 2023Iron ContributorThank you!!
- JanedbOct 24, 2022Iron ContributorThank you Hans