Updated issue: The real issue seems to be my use of appending a date to the file name. I can’t seem to reformat the date, and the error seems to be triggered by
/ in the date, so how can reformat this so excel understands that the date is included in the file name? I understand now that SaveCopyAs does not need a “dummy” file to upload to first.
I’m currently getting a runtime error 1004 for the method SaveCopyAs saying that it can’t find the location of the new file I’m trying to create. I interpreted this to mean that I need to create a “dummy” file to hold the copied information before I overwrite it with the data and a new file name. Is this correct?
The solution would be simple to create the dummy file and refer to each file individually, and then continue as I interpreted above. However, I’m trying to loop this process and am using a module that is hosted in PERSONAL.XLSB so I cannot use
ThisWorkbook and have to use
ActiveWorkbook. My issue now is that I don’t know how to create a automated process of copying the data to a new file because of my use of
This is my current code:
Sub cellvalue_filename() Dim Path Dim NewPath Dim WBname Dim Destination Path = "C:\oldfilelocation\" WBname = ActiveWorkbook.Name NewPath = "C:\newfilelocation\" Destination = NewPath & Range("B2") & WBname ActiveWorkbook.SaveCopyAs filename:=Destination ActiveWorkbook.Close End Sub
As a general rule, it’s better in VBA to refer explicitly to the workbook and worksheet you want, rather than relying on it being active.
You say you can’t use
ThisWorkbook because you are referencing a workbook other than the one that contains your VBA code, but that doesn’t mean you have to use
Instead you can get a reference to a workbook when you open or create it, e.g.
Dim objWorkbook As Workbook Set objWorkbook = Application.Workbooks.Open(...) ... objWorkbook.SaveCopyAs ...
Range("B2") without specifying a Worksheet will assume the active worksheet in the active workbook. Instead, explicitly specify the worksheet, e.g.:
Dim objWorksheet As Worksheet Set objWorksheet = objWorkbook.Worksheets(1) ' or whatever worksheet you want ... Destination = NewPath & objWorksheet.Range("B2") & WBname