MS Office Forum / Excel / Programming / September 2007
Use a Piece of Data for File Name
|
|
Thread rating:  |
AccessHelp - 26 Sep 2007 19:42 GMT Hi,
I have a worksheet 1 in a workbook A. I have a code to move the worksheet 1 into a new workbook. I want to name the new workbook using the two pieces of data from cells A1 and C1 from Workbook A. For example, cells A1 and C1 have ABC and 123 in Workbook A, respective. Then the new workbook name will be "ABC123.xls".
How should I reference Cells A1 and C1 in my code in order to name the new file?
I tried using:
FName1 = Worksheets("1").Range("A1") FName2 = Worksheets("1").Range("C1")
When I run the code, I got an error message that file "ABC123.xls" can not be accessed. It didn't save the file, and the new workbook is left open.
Please help. Thanks.
RB Smissaert - 26 Sep 2007 22:50 GMT Try this:
With Sheets(1) FName1 = .Cells(1) FName2 = .Cells(3) End With
RBS
> Hi, > [quoted text clipped - 19 lines] > > Please help. Thanks. AccessHelp - 26 Sep 2007 23:17 GMT Hi RBS,
Thank you for the code. When I try it, I got an error "Run-time Error 6: overflow".
Thanks.
> Try this: > [quoted text clipped - 28 lines] > > > > Please help. Thanks. RB Smissaert - 26 Sep 2007 23:32 GMT Is there a worksheet open when that code runs?
RBS
> Hi RBS, > [quoted text clipped - 42 lines] >> > >> > Please help. Thanks. AccessHelp - 27 Sep 2007 14:46 GMT Good morning RBS,
Yes, Workbook A and the new workbook will be opened. Basically, I have a worksheet with a command button in Workbook A. When the user clicks on the button, it will bring up a workbook containing the macro/code and will execute the code. Once the code is executed, the macro workbook will close. However, Workbook A will be opened at all time. The new workbook will only open during the execution (during the move) and save it as the name that we are trying to accomplish.
Thanks.
> Is there a worksheet open when that code runs? > [quoted text clipped - 46 lines] > >> > > >> > Please help. Thanks. RB Smissaert - 27 Sep 2007 14:49 GMT Yes, there is a workbook, but is there a sheet at the time that code runs? Maybe you should post the relevant code.
RBS
> Good morning RBS, > [quoted text clipped - 67 lines] >> >> > >> >> > Please help. Thanks. AccessHelp - 27 Sep 2007 15:06 GMT I am sorry which worksheet are you referring to?
> Yes, there is a workbook, but is there a sheet at the time that code runs? > Maybe you should post the relevant code. [quoted text clipped - 72 lines] > >> >> > > >> >> > Please help. Thanks. RB Smissaert - 27 Sep 2007 15:10 GMT Well, you are doing: With Sheets(1) Is there a Sheets(1) in the referred workbook when that code runs?
RBS
>I am sorry which worksheet are you referring to? > [quoted text clipped - 83 lines] >> >> >> > >> >> >> > Please help. Thanks. AccessHelp - 27 Sep 2007 15:56 GMT Hi RBS,
Thank you very much for your patience. Yes, I do have the Sheets(1) opened. In fact, it is part of Workbook A.
Below is my code. Please note the names in my code are different from the names that I posted. In my code, FName1 and FName2 are CRYear and FName, respectively. What I need help with is located right below "Dim" statements.
If you have any suggestions or recommendation on my code, please feel free to share with me. Thanks.
Sub CreateCSV() Dim CSVDir As String 'Directory where the CSV files are saved Dim CSVFName As String 'Original Name of CSV file Dim CSVAFName As String 'Additional Name for CSV File, if one exists Dim CRYear As Integer 'Year Dim FName As String ‘Portion of CSV File Name Dim InitName As String 'Placeholder to create additional CSV files Dim i As Integer 'Use to create additional CSV files Dim j As Integer 'Use to create CSV sheet Dim myFile As String 'Use to test for file existence to create additional CSV files With Sheets(“Sheets3”) CRYear = Year(.Cells(2)) End With With Sheets(“Sheets2”) FName=.cells(2) End With CSVFName = FName & CRYear & ".csv" CSVDir = "C:\" ActiveWorkbook.Save 'Save the input file before creating a CSV file. 'CREATE A CSV SHEET Set NewSheet = Worksheets.Add 'Create a new worksheet for CSV NewSheet.Name = "CSV" j = 1 'Create a CSV sheet For Each nName In ActiveWorkbook.Names NewSheet.Cells(j, 1).Value = "'" & Right(Left(nName.Name, 7), 6) 'Data NewSheet.Cells(j, 3).Value = nName.RefersTo If Right(Left(nName.Name, 7), 2) <> 0 And Right(Left(nName.Name, 5), 2) <> 0 Then NewSheet.Cells(j, 6).Value = Left(nName.Name, 1) & "-" & Val(Left(Right(nName.Name, 18), 2)) & "-" & Val(Left(Right(nName.Name, 16), 2)) ElseIf Right(Left(nName.Name, 7), 2) = 0 And Right(Left(nName.Name, 5), 2) <> 0 Then NewSheet.Cells(j, 6).Value = Left(nName.Name, 1) & "-" & Val(Left(Right(nName.Name, 18), 2)) ElseIf Right(Left(nName.Name, 7), 4) = 0 Then NewSheet.Cells(j, 6).Value = Left(nName.Name, 1) End If If Left(Right(nName.Name, 14), 2) <> 0 Then NewSheet.Cells(j, 7).Value = Left(Right(nName.Name, 14), 2) End If If Left(Right(nName.Name, 12), 2) <> 0 Then NewSheet.Cells(j, 8).Value = Left(Right(nName.Name, 12), 2) End If If Left(Right(nName.Name, 10), 4) <> 0 Then NewSheet.Cells(j, 9).Value = Application.Substitute(Left(Right(nName.Name, 10), 4), "0", "") End If NewSheet.Cells(j, 10).Value = "'" & Left(Right(nName.Name, 6), 2) & "." & Left(Right(nName.Name, 4), 2) NewSheet.Cells(j, 11).Value = Right(nName.Name, 2) j = j + 1 Next NewSheet.Columns("A:K").AutoFit
'CREATE A CSV FILE 'Check to see the CSV file is already exist. 'If exist, ask the user whether to overwrite the existing file. If Len(Dir(CSVDir & CSVFName)) > 0 Then PROMPT1 = MsgBox(Prompt:="There is a CSV file " & "'" & CSVFName & "'" & _ " already created for this cost report." & _ " Would you like to overwrite the existing CSV file?", _ Buttons:=vbYesNo + vbQuestion, Title:="CSV Macro") 'If 'Yes', overwrite it. If PROMPT1 = vbYes Then Sheets("CSV").Select Sheets("CSV").Move Application.DisplayAlerts = False ActiveWorkbook.SaveAs CSVDir & CSVFName, xlCSVWindows, , , True, _ False, xlNoChange Application.DisplayAlerts = True ActiveWindow.Close False 'If 'No', ask the user whether to create a new file with a new name. ElseIf PROMPT1 = vbNo Then PROMPT2 = MsgBox(Prompt:="Would you like to create an addition CSV file?", _ Buttons:=vbYesNo + vbQuestion, Title:="CSV Macro") 'If 'Yes', additional CSV files are created automatically. If PROMPT2 = vbYes Then InitName = CSVDir & CSVFName CSVAFName = InitName Do myFile = Dir(CSVAFName) If myFile <> "" Then i = i + 1 CSVAFName = Left(InitName, Len(InitName) - 4) & i & ".csv" End If If i > 2 Then MsgBox "Sorry! There are already " & i & " files created " & _ "in the directory C:\'. " & Chr(13) & "No " & _ "additional file is created.", vbInformation, _ "CSV Macro" Application.DisplayAlerts = False Sheets("CSV").Delete Application.DisplayAlerts = True Workbooks("MACRO to Create CSV.xls").Close False End End If Loop While myFile <> "" Sheets("CSV").Select Sheets("CSV").Move ActiveWorkbook.SaveAs CSVAFName, xlCSVWindows, , , _ True, False, xlNoChange ActiveWindow.Close False MsgBox "An additional CSV file '" & Right(CSVAFName, Len(CSVAFName) - Len(CSVDir)) & _ "' has created in " & _ "the directory 'C:\'.", _ vbInformation, "CSV Macro"
'If 'No', delete the CSV sheet that created in the input file. Else Application.DisplayAlerts = False Sheets("CSV").Delete Application.DisplayAlerts = True MsgBox "No additional CSV file is created.", vbInformation, _ "CSV Macro" End If End If 'If the CSV file does not exist, create one. Else Sheets("CSV").Select Sheets("CSV").Move ActiveWorkbook.SaveAs CSVDir & CSVFName, xlCSVWindows, , , , False, xlNoChange ActiveWindow.Close False MsgBox "A CSV file '" & CSVFName & "' has created in the directory " & _ "'C:\'.", vbInformation, _ "CSV Macro" End If 'Close the Macro file after saving the CSV file Workbooks("MACRO to Create CSV.xls").Close False End Sub
> Well, you are doing: With Sheets(1) > Is there a Sheets(1) in the referred workbook when that code runs? [quoted text clipped - 88 lines] > >> >> >> > > >> >> >> > Please help. Thanks. RB Smissaert - 27 Sep 2007 15:58 GMT Ah, that makes it more clear. For starters change all the As Integer into As Long and try again.
RBS
> Hi RBS, > [quoted text clipped - 277 lines] >> >> >> >> > >> >> >> >> > Please help. Thanks. AccessHelp - 27 Sep 2007 16:30 GMT I just changed the CRYear to Long and tried again. I am still getting errors:
"'Test2007.xls' cannot be accessed. The file may be read-only, or you may be trying to access a read-only location. Or, the server the document is stored on may not be responding."
Then:
"Run-time error '1004': Method 'SaveAs' of object '_Workbook' failed"
Thanks.
> Ah, that makes it more clear. > For starters change all the As Integer into As Long and try again. [quoted text clipped - 266 lines] > >> >> >> >> > the > >> >> >> >> > new RB Smissaert - 27 Sep 2007 16:38 GMT OK, so you made some progress. Now try this:
First download and install MZ-Tools: http://www.mztools.com/index.aspx This is very useful (and free) in any case.
Then at the top of that procedure (maybe after the Dim declarations) put this: On Error GoTo ERROROUT
Then at the very end of that procedure put this:
Exit Sub ERROROUT:
Msgbox Err.Description,, "error at line " & Erl
Then right-click in the procedure and do: MZ-Tools, Add line numbers
Now run again and see what shows and take it from there.
RBS
>I just changed the CRYear to Long and tried again. I am still getting >errors: [quoted text clipped - 309 lines] >> >> >> >> >> > the >> >> >> >> >> > new AccessHelp - 27 Sep 2007 17:07 GMT Per your instructions, I downloaded MZ-Tools 3.0 for VBA and followed all the way to right-click in the procedures. When I right-click anywhere in the procedures, am I supposed to see MZ-Tools as an option and clicked on it? I do not see it as an option.
Thanks.
> OK, so you made some progress. > Now try this: [quoted text clipped - 273 lines] > >> >> >> > will > >> >> >> > only RB Smissaert - 27 Sep 2007 17:10 GMT Try close and re-start Excel.
RBS
> Per your instructions, I downloaded MZ-Tools 3.0 for VBA and followed all > the [quoted text clipped - 307 lines] >> >> >> >> > will >> >> >> >> > only AccessHelp - 27 Sep 2007 17:20 GMT It indicates the error is on Line 790. If I understand you correctly, I should put the following code before "End Sub"?
ERROROUT: Msgbox Err.Description,, "error at line " & Erl
Thanks.
> Try close and re-start Excel. > [quoted text clipped - 277 lines] > >> >> >> Well, you are doing: With Sheets(1) > >> >> >> Is there a Sheets(1) in the referred workbook when that code runs? RB Smissaert - 27 Sep 2007 17:22 GMT > If I understand you correctly, I should put the following code before "End > Sub"? Yes, that is it.
Now what do you have at line 790 and what are the values of the variables in that line?
RBS
> It indicates the error is on Line 790. If I understand you correctly, I > should put the following code before "End Sub"? [quoted text clipped - 314 lines] >> >> >> >> Is there a Sheets(1) in the referred workbook when that code >> >> >> >> runs? AccessHelp - 27 Sep 2007 18:08 GMT Hi RBS,
Thank you again very much for your patience.
First of all, Line 79 is "ActiveWorkbook.SaveAs CSVDir & CSVFName, xlCSVWindows, , , , False, xlNoChange".
Secondly, I find where the problem is, and I do not know how to solve it. The problem is on the "CRYear".
In addition to using "CRYear" in "CSVFName", I also use it in "CSVDir". CSVDir is the directory where the CSV file will be saved, and CSVFName is the file name of a CSV file. The code that I posted has the CSVDir as "C:\". Actually, it should be ""C:\" & CRYear". Due to business reason, we have CSV files for different years. The CSV files are named combination of customer name and the year for the CSV file (e.g. ABC2007.csv) and are saved in the appropriate folder for the CSV year. The customer name and CSV year should come from the input file (Workbook A). Apparently, the VBA does not like the fact that CRYear is being used for various purpose.
I have tried to creating a new variable (DIRYear) and referencing the DIRYear to a different cell. The code still does not work. I am still getting the same error.
Is there a way around it? Thanks.
> > If I understand you correctly, I should put the following code before "End > > Sub"? [quoted text clipped - 277 lines] > >> >> >> > , > >> >> >> > _ RB Smissaert - 27 Sep 2007 19:05 GMT Sorry, you lost me a bit now. You will have to get to the essential part of the problem.
RBS
> Hi RBS, > [quoted text clipped - 337 lines] >> >> >> >> > , >> >> >> >> > _ AccessHelp - 27 Sep 2007 19:55 GMT Basically, the CSV file is named using the FName and CRYear (e.g. "ABC2007.csv"). Both FName and CRYear are referenced to the cells in the input file (Workbook A). In addition to using the CRYear as a portion of file name, I also use it for the directory (CSVDir = "C:\" & CRYear & "\") so that the CSV files will be saved to the proper directory/year.
The problem is, for some reason, the code does not like the fact that CRYear is being used for 2 purposes. If I change the code for CSVDir to "C:\2007\" from '"C:\" & CRYear & "\"', it would work and I would not get errors. However, I can not hard coded to 2007 because not all CSV files will be for 2007.
I got the errors on Line 790:
ActiveWorkbook.SaveAs CSVDir & CSVFName, xlCSVWindows, , , , False, xlNoChange
On Line 790, "CSVDir" (based on the original code) is: "C:\" & CRYear & "\".
On Line 790, "CSVFName" (based on the original code) is: FName & CRYear & ".csv".
Again, thank you very much for your patience. I think we are almost there. The problem is essential part of my code because we will produce 300 CSV files and they need to be located properly. Please ask me if you need more clarification.
> Sorry, you lost me a bit now. > You will have to get to the essential part of the problem. [quoted text clipped - 271 lines] > >> >> >> >> > Macro") > >> >> >> >> > 'If 'Yes', overwrite it. RB Smissaert - 27 Sep 2007 20:24 GMT > The problem is, for some reason, the code does not like the fact that > CRYear > is being used for 2 purposes That shouldn't be any problem.
The essential question is what file or folder string is produced when you get an error? So, what you do is this: In the VBE do View, Immediate window
Then on a line just before your error line put: Debug.Print "C:\" & CRYear & "\"
Come to look at it now you have 2 double quotes before C and after \ This should be only one. That might be it.
RBS
> Basically, the CSV file is named using the FName and CRYear (e.g. > "ABC2007.csv"). Both FName and CRYear are referenced to the cells in the [quoted text clipped - 329 lines] >> >> >> >> >> > Macro") >> >> >> >> >> > 'If 'Yes', overwrite it. AccessHelp - 27 Sep 2007 20:55 GMT I don't think the problem is due to the double quotation because there are 3 pieces to the CSVDir ("C:\", CRYear and "\"). If it is a problem, which one should I remove?
I did per your instructions, and I don't know what I should look for in the Immediate window. Below is what I got from Immediate when I did the "Run to Cursor" on the Debug.Print "C:\" & CRYear & "\" line.
[auto_open] < [SetupFunctionIDs] < [SetupFunctionIDs] > [PickPlatform] < [PickPlatform] > [VerifyOpen] < [VerifyOpen] > 1 [RegisterFunctionIDs] < [RegisterFunctionIDs] > [auto_open] True
True
Then I got an error "Subscript Out of Range, and it indicated to line where I have
CRYear = Year(.cells(2))
Thanks.
> > The problem is, for some reason, the code does not like the fact that > > CRYear [quoted text clipped - 264 lines] > >> >> >> >> >> > Set NewSheet = Worksheets.Add 'Create a new > >> >> >> >> >> > worksheet RB Smissaert - 27 Sep 2007 21:06 GMT > If it is a problem, which one should I remove? Remove the very first one and the very last one. You are building a string to make a folder path. This path has 3 bits: "C:\" your variable: CRYear "\" So you get "C:\" & CRYear & "\" Why do you want an extra double quote before "C:\" or after "\" ?
> "Run to Cursor" on the Debug.Print "C:\" & CRYear & "\" line. Not sure what you are doing here. Debug.Print should dump the result of "C:\" & CRYear & "\" and I don't see that.
RBS
>I don't think the problem is due to the double quotation because there are >3 [quoted text clipped - 321 lines] >> >> >> >> >> >> > Set NewSheet = Worksheets.Add 'Create a new >> >> >> >> >> >> > worksheet dan dungan - 26 Sep 2007 23:18 GMT Which operating system and version of Excel and are you using?
Dan Dungan
On Sep 26, 11:42 am, AccessHelp <AccessH...@discussions.microsoft.com> wrote:
> Hi, > [quoted text clipped - 16 lines] > > Please help. Thanks. AccessHelp - 27 Sep 2007 14:47 GMT Good morning Dan,
I am using Windows XP and Office 2003. Thanks.
> Which operating system and version of Excel and are you using? > [quoted text clipped - 22 lines] > > > > Please help. Thanks. eliano - 27 Sep 2007 00:59 GMT HI. Try:
Public Sub prova() Dim newname As String With Sheets(1) newname = .Cells(1) & .Cells(3) End With MsgBox newname End Sub
Regards Eliano
> Hi, > [quoted text clipped - 16 lines] > > Please help. Thanks. AccessHelp - 27 Sep 2007 14:57 GMT Good morning eliano,
Thanks for the code.
When I tried your code, I got an error:
"'Test.xls' cannot be accessed. The file may be read-only, or you may be trying to access a read-only location. Or, the server the document is stored on may not be responding."
If you don't mind, please read my today's response to RB Smissaert above for the process of my code.
Thanks.
> HI. > Try: [quoted text clipped - 30 lines] > > > > Please help. Thanks.
|
|
|