Home | Contact Us | FAQ | Search & Site Map | Link to Us
Sign In | Join | Other 45 Sites in Network
Home
DiscussionsAccessExcelInfoPathOutlookPowerPointPublisherWord
DirectoryUser Groups
Related Topics
Outlook ExpressInternet ExplorerWindowsMS Server ProductsMore Topics ...

MS Office Forum / Excel / Programming / September 2007

Tip: Looking for answers? Try searching our database.

Use a Piece of Data for File Name

Thread view: 
Enable EMail Alerts  Start New Thread
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.
 
Sign In
Join
My Latest Posts
My Monitored Threads
My Blog
My Photo Gallery
My Profile
My Homepage

Start New Thread
Enable EMail Alerts
Rate this Thread



©2008 Advenet LLC   Privacy Policy - Terms of Use
This website includes both content owned or controlled by Advenet as well as content owned or controlled by third parties.