Link to home
Start Free TrialLog in
Avatar of Bill Golden
Bill GoldenFlag for United States of America

asked on

Combining parts of filename and tabname in Excel cell

I have an Excel worksheet (attached) that I would like cell A30 to contain part of the filename and the entire tabname.

For example, the attached filename is DTL-EE-1711-Rev3.

I have successfully gotten EE-1711- to print in A30. Now I would like to add the Tabname to the cell so that the cell prints

EE-1711-02 in A30

For internal security reasons, I would prefer this is done with VBA instead of an Excel formula.

Obviously, by the end of the month, there will be Tabs 01, 02, 03, 04 ... through 30 or 31 skipping Saturday and Sunday.
DTL-EE-1711-Rev3.xlsm
Avatar of Bill Prew
Bill Prew

Try this:

=MID(CELL("filename",A1),SEARCH("[",CELL("filename",A1))+5, SEARCH("]",CELL("filename",A1))-SEARCH("[",CELL("filename",A1))-14)&MID(CELL("filename",A1),FIND("]",CELL("filename",A1))+1,255)

Open in new window


»bp
Avatar of Bill Golden

ASKER

Worked perfectly. Can we accomplish the same thing in VBA?

More questions coming regarding of features with the same spreadsheet.
Sure in VBA, add this function, and then use it in a formula like:

=LogNumber()

Public Function LogNumber()
    a = Split(Split(ThisWorkbook.Name, ".")(0), "-")
    LogNumber = a(1) & "-" & a(2) & "-" & ThisWorkbook.ActiveSheet.Name
End Function

Open in new window


»bp
Well that works for Tab 02 but does not work when you duplicate Tabs 03 and 04.

In addition while the worksheet is named

EE-1711-Rev2, occasionally it could be Rev2A. You can count on the YYMM appearing between the two dashes and that those will be the only two dashes.  We can force a 3-character lead like EEE-1711-RevX so that you could count on position 5 to be YY and position 7 to be MM.
It worked okay for me on other sheets.

So, what are the rules on finding the "EE" and "1711" in the file name, being very specific?


»bp
I misspoke earlier. It is not working in Tab 02 (I forgot to remove the original formula from the cell. I think, but am not sure, that I was supposed to insert the cell number in the VBA code, but did see where to do so and put it in "This worksheet" so that it appears in every tab.

Am I confused?
You didn't have to change the VBA at all, nor pass anything to it.  Here is a slightly tidier version that makes sure it gets the sheet name of the sheet the formula is on, just to be safe.  I also changed the way it gets the data to assume the parts you want are to the immediate left of the REV part, which is assumed to be last.  So anything else to the far left doesn't matter.  For example these work:

xxxxxxx-yyyyyyy-EE-1711-Rev1.xls
xxxxxxx-yyyyyyy-EE-1711-Rev1b.xls
xxxxxxx-EE-1711-Rev1.xls
EE-1711-Rev1.xls

Public Function LogNumber()
    a = Split(Split(ThisWorkbook.Name, ".")(0), "-")
    LogNumber = a(UBound(a) - 2) & "-" & a(UBound(a) - 2) & "-" & Application.Caller.Worksheet.Name
End Function

Open in new window


»bp
Well, I obviously am doing something in error adding the VBA code. I have attached a copy of the original spreadsheet with Tabs 02, 03 and 04 with the code added. None are working.
DTL-EE-1711-Rev4.xlsm
You needed that VBA code in a new Module, not attached to a sheet.

And then you needed to add the formula to call it on each sheet in the cell you wanted it to appear in.

See attached.

DTL-EE-1711-Rev4.xlsm


»bp
Now I am getting something. But instead of EE-1711-01, I am getting EE-EE-01. Something I did?
By the way, using the same procedure, the TabDate routine (from the other question) works perfectly.  

Bill
ASKER CERTIFIED SOLUTION
Avatar of Bill Prew
Bill Prew

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Fabulous. That did the trick. Saves hours. Thanks again, more questions to come, Bill
Very welcome Bill.


»bp