Encontrar una plantilla de spreadsheet de Excel en vba script

No creo que esto se haya preguntado antes, por lo que puedo decir de las búsquedas de Google, y es bastante específico.

Tengo una plantilla de spreadsheet Excel con código vba embedded (un file 'xltm'), y quiero encontrar la ruta de la plantilla en la spreadsheet que abre la plantilla. Si eso no tiene sentido, daré un ejemplo del problema:

Un usuario abre una nueva spreadsheet desde el file de plantilla haciendo doble clic en ella. El file de plantilla está en 'C: \ My Stuff' como un ejemplo. Llenan las celdas y luego hacen clic en un button que crea un file de text luego de preguntarles cómo desean llamarlo. El código luego usa 'Application.ActiveWorkbook.path' para save el file en el mismo lugar donde se encuentra la spreadsheet (C: \ My Stuff). Esto provoca un error de permiso, ya que la spreadsheet aún no se ha guardado y, como tal, no tiene una ruta. Entonces mi pregunta es: ¿hay alguna manera de encontrar la ruta del file de la plantilla original? En el ejemplo, esto sería C: \ My Stuff.

Podría hacer que el usuario guarde el file antes de que se cree el file de text, o simplemente podría usar un file xlsm. Pero una plantilla networkingucirá al mínimo la posibilidad de que altere el formatting del file, y realmente no quiero pedirles que guarden el file cada vez, probablemente copyrán y pegarán la mayoría de los datos, y luego solo querrán el text. file, no una spreadsheet diferente cada vez.

Espero que esto tenga sentido, y gracias por cualquier respuesta de antemano.

Entonces mi pregunta es: ¿hay alguna manera de encontrar la ruta del file de la plantilla original? En el ejemplo, esto sería C: \ My Stuff.

No puedes.

Estoy seguro de que esta no es la respuesta que estabas buscando, pero desafortunadamente esta es la respuesta.

Si hizo doble clic en la plantilla en el explorador para crear un file, entonces AFAIK no puede encontrar esa ruta o el nombre de la plantilla como lo puede hacer en MS Word usando oDoc.AttachedTemplate

Alternativa

En su plantilla, coloque este código en ThisWorkbook

 Private Sub Workbook_Open() ChDir "C:\Blah Blah" '<~~ Change this to the templates path End Sub 

Y luego, desde el nuevo libro de trabajo que creó al hacer doble clic en la plantilla, puede usar CurDir para get esa ruta.

Inconvenientes del método anterior

  1. El código Workbook_Open() se transfiere al nuevo file
  2. Si el usuario cambia la location de la plantilla, entonces no obtendrá la ruta correcta