Узнать имя книги excel vba

 

Inter_E

Пользователь

Сообщений: 399
Регистрация: 01.01.1970

Добрый день!  
Как можно Получить имя активной книги без его расширения (без ‘.xls’ or ‘xlsx’).    
Например АктивВоркбук.нэйм извлекает так «Книга.хлс» а нужно чтоб давало «Книга» и все.  
Спасибо заранее…

With my best regards,      Inter_E

 

KuklP

Пользователь

Сообщений: 14868
Регистрация: 21.12.2012

E-mail и реквизиты в профиле.

Привет.  
Public Sub qwe()  
Dim a As String, b As String  
b = ActiveWorkbook.Name  
a = Replace(b, «.xlsx», «»)  
If Len(a) = Len(b) Then a = Replace(b, «.xls», «»)  
End Sub

Я сам — дурнее всякого примера! …

 

Hugo

Пользователь

Сообщений: 23257
Регистрация: 22.12.2012

А если в середине названия такое встречается? У меня бывало :)  
Может лучше анализировать 4-5 последних символов и отрезать. Да и ещё регистр символов может быть разный…

 

Inter_E

Пользователь

Сообщений: 399
Регистрация: 01.01.1970

{quote}{login=KuklP}{date=17.08.2010 01:28}{thema=}{post}Привет.  
Public Sub qwe()  
Dim a As String, b As String  
b = ActiveWorkbook.Name  
a = Replace(b, «.xlsx», «»)  
If Len(a) = Len(b) Then a = Replace(b, «.xls», «»)  
End Sub{/post}{/quote}  

  Да Hugo прав, если в середине окажется? Мне тоже мысль отрезать в первую очередь приходило. Но это тоже не красивый вариант.    
Может все таки есть такой нормальная-официальная функция?

With my best regards,      Inter_E

 

KuklP

Пользователь

Сообщений: 14868
Регистрация: 21.12.2012

E-mail и реквизиты в профиле.

Ну если в середине названия оказывается «.xls», то можно только посочувствовать тому, кто так называет файлы и помянуть добрым словом старый добрый DOS:-)  
Так, что берите.

Я сам — дурнее всякого примера! …

 

Юрий М

Модератор

Сообщений: 60588
Регистрация: 14.09.2012

Контакты см. в профиле

{quote}{login=Inter_E ответ > KuklP}{date=17.08.2010 01:41}{thema=Re: }{post}{quote}{login=KuklP}{date=17.08.2010 01:28}{thema=}{post}{/post}{/quote}если в середине окажется? {/post}{/quote}  
Inter_E, да кому же такое в голову (не больную) придёт?! Согласен с Сергеем.

 

Юрий М

Модератор

Сообщений: 60588
Регистрация: 14.09.2012

Контакты см. в профиле

Вдогонку: файл называется xls.Книга1

 

KuklP

Пользователь

Сообщений: 14868
Регистрация: 21.12.2012

E-mail и реквизиты в профиле.

{quote}{login=Юрий М}{date=17.08.2010 02:20}{thema=}{post}Вдогонку: файл называется xls.Книга1{/post}{/quote} Не катит — точка не там. Надо:  .xls.Книга1:-)

Я сам — дурнее всякого примера! …

 

Inter_E

Пользователь

Сообщений: 399
Регистрация: 01.01.1970

Кажется всетаки есть какая-та функция вроде «ActiveWorkbook.RootName» для получения только имени…  
Неужели, это конец vb?  
Может попросим великих знатоков еще?

With my best regards,      Inter_E

 

Юрий М

Модератор

Сообщений: 60588
Регистрация: 14.09.2012

Контакты см. в профиле

MsgBox Replace(Application.Caption, «Microsoft Excel -«, «»)  
MsgBox Split(Application.Caption, «-«)(1)

 

KuklP

Пользователь

Сообщений: 14868
Регистрация: 21.12.2012

E-mail и реквизиты в профиле.

{quote}{login=Юрий М}{date=17.08.2010 03:07}{thema=}{post}MsgBox Replace(Application.Caption, «Microsoft Excel -«, «»)  
MsgBox Split(Application.Caption, «-«)(1){/post}{/quote}  
И что получится?

Я сам — дурнее всякого примера! …

 

KuklP

Пользователь

Сообщений: 14868
Регистрация: 21.12.2012

E-mail и реквизиты в профиле.

Так, наверное:  
MsgBox Split(Replace(Application.Caption, «Microsoft Excel -«, «»), «.»)(0)

Я сам — дурнее всякого примера! …

 

Inter_E

Пользователь

Сообщений: 399
Регистрация: 01.01.1970

{quote}{login=KuklP}{date=17.08.2010 03:24}{thema=}{post}Так, наверное:  
MsgBox Split(Replace(Application.Caption, «Microsoft Excel -«, «»), «.»)(0){/post}{/quote}  

  Огромное спасибо Вам Юрий, KukIP!  
Теперь вроде правильно работает,даже если там внутри присутствуют слова xls, xlsx!

With my best regards,      Inter_E

 

Inter_E

Пользователь

Сообщений: 399
Регистрация: 01.01.1970

{quote}{login=Inter_E ответ > KuklP}{date=17.08.2010 03:32}{thema=Re: }{post}{quote}{login=KuklP}{date=17.08.2010 03:24}{thema=}{post}Так, наверное:  
MsgBox Split(Replace(Application.Caption, «Microsoft Excel -«, «»), «.»)(0){/post}{/quote}  

  Огромное спасибо Вам Юрий, KukIP!  
Теперь вроде правильно работает,даже если там внутри присутствуют слова xls, xlsx!{/post}{/quote}  

  Я думаю кто то точно сталкнется с этой проблемой  
и она теперь решена  
а так искал вроде до этого не было на форуме подобной проблемы!

With my best regards,      Inter_E

 

KuklP

Пользователь

Сообщений: 14868
Регистрация: 21.12.2012

E-mail и реквизиты в профиле.

Ну, так проще — меньше бубнов:  
MsgBox Split(ThisWorkbook.Name, «.»)(0)

Я сам — дурнее всякого примера! …

 

Hugo

Пользователь

Сообщений: 23257
Регистрация: 22.12.2012

Тоже не универсально — ведь у человека может вдруг быть код  

  Private Sub Workbook_Open()  
   Application.Caption = » »  
   ActiveWindow.Caption = «Терпеть не могу — » & ThisWorkbook.Name  
End Sub  

  ну мало ли, терпеть не может Microsoft :)

 

KuklP

Пользователь

Сообщений: 14868
Регистрация: 21.12.2012

E-mail и реквизиты в профиле.

Но опять же, куча точек в названии не редкость. Вот, например с этого форума: CompareFiles.Find.Rus.v132.xls. Так, что вернулись на исходную.

Я сам — дурнее всякого примера! …

 

Hugo

Пользователь

Сообщений: 23257
Регистрация: 22.12.2012

Пока писал, Сергей нашёл вариант, обходящий «Терпеть не могу» :)

 

webley

Пользователь

Сообщений: 1995
Регистрация: 01.01.1970

еще вариант:  
Left(ActiveWorkbook.Name, InStrRev(ActiveWorkbook.Name, «.») — 1)

 

Hugo

Пользователь

Сообщений: 23257
Регистрация: 22.12.2012

Хм… у меня часто в названии точка используется вместо «_» …

 

Hugo

Пользователь

Сообщений: 23257
Регистрация: 22.12.2012

 

KuklP

Пользователь

Сообщений: 14868
Регистрация: 21.12.2012

E-mail и реквизиты в профиле.

Вот для придурошных имен:  
Sub Макрос1()  
‘ Макрос записан 17.08.2010 (Sergey)  
Dim a As String, v  
a = ThisWorkbook.Name  
v = Split(a, «.»)  
MsgBox Replace(a, «.» & v(UBound(v)), «»)  
End Sub

Я сам — дурнее всякого примера! …

 

KuklP

Пользователь

Сообщений: 14868
Регистрация: 21.12.2012

E-mail и реквизиты в профиле.

У webley короче.

Я сам — дурнее всякого примера! …

 

Hugo

Пользователь

Сообщений: 23257
Регистрация: 22.12.2012

Да и с именем Bwdwqd.xls.jkkl.ook2.xls справился только webley.

 

Юрий М

Модератор

Сообщений: 60588
Регистрация: 14.09.2012

Контакты см. в профиле

{quote}{login=KuklP}{date=17.08.2010 03:18}{thema=Re: }{post}{quote}{login=Юрий М}{date=17.08.2010 03:07}{thema=}{post}{/post}{/quote}И что получится?{/post}{/quote}  
Нормально получится. Что не так?

 

KuklP

Пользователь

Сообщений: 14868
Регистрация: 21.12.2012

E-mail и реквизиты в профиле.

то HUGO: Ну да.  
Юр, а у меня вместе с расширением заголовок. И МСГБОКС выдает его с расширением.

Я сам — дурнее всякого примера! …

 

А у меня вариант Юрия работает отлично, вот!  

  «39039»

 

KuklP

Пользователь

Сообщений: 14868
Регистрация: 21.12.2012

E-mail и реквизиты в профиле.

Так:

Я сам — дурнее всякого примера! …

 

Юрий М

Модератор

Сообщений: 60588
Регистрация: 14.09.2012

Контакты см. в профиле

Я же отталкивался от того, что вижу у себя :-)

 

Юрий М

Модератор

Сообщений: 60588
Регистрация: 14.09.2012

Контакты см. в профиле

#30

17.08.2010 16:17:17

Серж, ремонтируй свой MsgBox :-)

VBA Get Workbook Name in Excel. We can return workbook name using Workbook.Name property. Here workbook represents an object. It is part of Workbooks collection. Returns a string value representing Workbook name. We can find Active Workbook or Current Workbook name using Name property of Workbook.

Table of Contents:

  • Overview
  • Syntax to return Name of the Workbook VBA in Excel
  • Get Name of the Active Workbook using VBA in Excel
  • Macro to Get Current Workbook Name using VBA in Excel
  • Instructions to Run VBA Macro Code
  • Other Useful Resources

Syntax to get current Workbook name using VBA in Excel

Here is the following syntax to get the Name of the Workbook using VBA in Excel.

expression.Name

Where expression: It represents Workbook object which is part of workbooks collection.
Name: It represents property of Workbook object to get Workbook name.

Get Name of the Active Workbook using VBA in Excel

Let us see the following example macro to get current or active workbook name in using VBA in Excel. Where ‘Name’ represents the property of Workbook object. It helps to get the name of the Workbook.

'Get Active Workbook name in Excel using VBA
Sub VBA_Get_ActiveWorkbook_Name()
    
    'Variable declaration
    Dim sActiveWorkbookName As String
    
    sActiveWorkbookName = ActiveWorkbook.Name

End Sub

Output: Please find the output screenshot of the above macro code.

Active Workbook Name

Active Workbook Name

Macro to Get Current Workbook Name using VBA in Excel

Here is another example macro code to get current workbook name using VBA in Excel.

'Get current workbook name of the Workbook using VBA in Excel
Sub VBA_Get_CurrentWorkbook_Name()
    
    'Variable declaration
    Dim sCurrentWorkbookName As String
    
    sCurrentWorkbookName = ThisWorkbook.Name

End Sub

Output: Here is the output screenshot of the above macro code.

This Workbook Name

This Workbook Name

Instructions to Run VBA Macro Code or Procedure:

You can refer the following link for the step by step instructions to execute VBA code or procedure.

Instructions to run VBA Macro Code

Other Useful Resources:

Click on the following links of the useful resources. These helps to learn and gain more knowledge.

VBA Tutorial VBA Functions List VBA Arrays in Excel Blog

VBA Editor Keyboard Shortcut Keys List VBA Interview Questions & Answers

I just wanted to ask how I get the name and path of the actual opened Workbook with VBA?

I tried it as captured in the snippet below but keep getting a compiler error.

My document-type is .docm.

What am I doing wrong?

My code snippet:

Sub TestFileOpened()
Dim strPath As String, strPathAndName As String

    strPath = Application.ThisWorkbook.Path
    strPathAndName = strPath & Application.ThisWorkbook.Name
    MsgBox strPathAndName 

    ' Test to see if the file is open.
    If IsFileOpen(strPathAndName) Then ....

Cœur's user avatar

Cœur

36.7k25 gold badges191 silver badges259 bronze badges

asked Jan 17, 2017 at 9:11

T.Els's user avatar

2

Apparently, you are trying to use some Excel code from Word, so first you need to get a hold on Excel App :

Dim oExcel as Excel.Application
Dim wB as Excel.WorkBook
Dim strPath As String
Dim strPathAndName As String


On Error Resume Next
Set oExcel = GetObject(, "Excel.Application")
If Err.Number <> 0 Then
    Set oExcel = CreateObject("Excel.Application")
End If
On Error GoTo 0


Set wB = oExcel.Workbooks(1)
strPath = wB.Path
strPathAndName = strPath & "" & wB.Name
MsgBox strPathAndName 

' Test to see if the file is open.
If IsFileOpen(strPathAndName) Then ....

answered Jan 17, 2017 at 9:27

R3uK's user avatar

R3uKR3uK

14.4k7 gold badges43 silver badges77 bronze badges

Assuming that you want the location of the open word document, try the below:

Sub TestFileOpened()
Dim strPath As String, strPathAndName As String

    strPath = ThisDocument.Path
    strPathAndName = strPath & "" & ThisDocument.Name
    MsgBox strPathAndName 

    ' Test to see if the file is open.
    If IsFileOpen(strPathAndName) Then ....

(Note not to forget to add the backslash between file path and name)

answered Jan 17, 2017 at 9:39

Preston's user avatar

PrestonPreston

7,0517 gold badges52 silver badges81 bronze badges

3

GreyW

14 / 14 / 7

Регистрация: 21.06.2013

Сообщений: 160

Записей в блоге: 1

1

Excel

Как узнать имя книги созданной при первом копировании листа?

16.09.2018, 13:50. Показов 2421. Ответов 6

Метки нет (Все метки)


Студворк — интернет-сервис помощи студентам

Здравствуйте! Подскажите пожалуйста как узнать имя книги созданной при первом копировании листа?
Обычно это «Книга1» но не всегда. А надо точно знать. Заранее спасибо.

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Sub Макрос1()
    
    Dim wbTmpl, wbIn As Workbook
    Dim MyPath
    
    MyPath = ThisWorkbook.Path
    ChDrive MyPath
    ChDir MyPath
 
    Set wbTmpl = Workbooks.Open("Акт шаблон.xlsx")
    wbTmpl.Sheets("Акт").Copy   'Как получить имя новой книги созданной на этом шаге???
    Set wbIn = ""
    wbTmpl.Sheets("Акт").Copy After:=Workbooks(wbIn).Sheets(Workbooks(wbIn).Sheets.Count)
 
End Sub



0



4131 / 2235 / 940

Регистрация: 01.12.2010

Сообщений: 4,624

16.09.2018, 14:06

2

Лучший ответ Сообщение было отмечено GreyW как решение

Решение

Имя не нужно, т.к. если копирование прошло успешно, созданная книга это ActiveWorkbook



1



GreyW

14 / 14 / 7

Регистрация: 21.06.2013

Сообщений: 160

Записей в блоге: 1

16.09.2018, 15:57

 [ТС]

3

Цитата
Сообщение от pashulka
Посмотреть сообщение

Имя не нужно, т.к. если копирование прошло успешно, созданная книга это ActiveWorkbook

Спасибо. Вы мне очень помогли.
Имя мне нужно будет потом в макросе.
На самом деле меня ввели в заблуждение ошибки в последней строке. Правильно будет так:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
Sub Макрос1()
    Dim wbTmpl, wbIn As Workbook
    Dim MyPath
    MyPath = ThisWorkbook.Path
    ChDrive MyPath
    ChDir MyPath
    Set wbTmpl = Workbooks.Open("Акт шаблон.xlsx")
    wbTmpl.Sheets("Акт").Copy
 
    Set wbIn = ActiveWorkbook
    wbTmpl.Sheets("Акт").Copy After:=wbIn.Sheets(wbIn.Sheets.Count) 'Здесь были ошибки
End Sub



0



pashulka

4131 / 2235 / 940

Регистрация: 01.12.2010

Сообщений: 4,624

16.09.2018, 16:41

4

Не знаю зачем Вам две копии одного и того же листа, но одно ясно, можно проще

Visual Basic
1
2
3
4
Sub Макрос1()
    Workbooks.Open(ThisWorkbook.Path & "Акт шаблон.xlsx").Sheets("Акт").Copy
    ActiveWorkbook.Sheets("Акт").Copy After:=ActiveWorkbook.Sheets(1)
End Sub



1



Казанский

15136 / 6410 / 1730

Регистрация: 24.09.2011

Сообщений: 9,999

16.09.2018, 23:29

5

GreyW, если в книге «Акт шаблон.xlsx» только один лист, который нужен в данном случае, то можно использовать эту книгу собсно как шаблон — потом не придется ее закрывать

Visual Basic
1
2
3
4
Sub Макрос1()
    Workbooks.Add ThisWorkbook.Path & "Акт шаблон.xlsx"
    ActiveWorkbook.Sheets("Акт").Copy After:=ActiveWorkbook.Sheets(1)
End Sub



1



14 / 14 / 7

Регистрация: 21.06.2013

Сообщений: 160

Записей в блоге: 1

17.09.2018, 00:35

 [ТС]

6

Спасибо за вашу помощь!

Цитата
Сообщение от pashulka
Посмотреть сообщение

Не знаю зачем Вам две копии одного и того же листа, но одно ясно, можно проще

Смысл таков: есть таблица с данными, в которой несколько столбцов и штук так «цать» строк. Да ещё всё это с фильтрами и скрытыми столбцами.
Всё это безобразие будет скармливаться макросу, который будет каждую строку данных распределять в лист созданный на основе шаблона. Кол-во строк = кол-во листов.
Да я в общем не программист. Так самоучка. Привык просто книгам, листам и диапазонам указатели присваивать. Так что извиняйте за мою неотёсанность.

Цитата
Сообщение от Казанский
Посмотреть сообщение

GreyW, если в книге «Акт шаблон.xlsx» только один лист, который нужен в данном случае, то можно использовать эту книгу собсно как шаблон — потом не придется ее закрывать

Согласен. У меня была такая мысль. Но это потом, когда главное сделаю и оптимизировать буду.



0



4131 / 2235 / 940

Регистрация: 01.12.2010

Сообщений: 4,624

17.09.2018, 07:29

7

Если использование шаблона допустимо, то можно просто в книге «Акт шаблон.xltx» (.xlt) изначально создать нужное количество листов, а затем создавать новую книгу на основе имеющегося шаблона.



0



Как определить имя Книги, в которой запускается Макрос?

qwertyhp
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя

 
Сообщения: 156
Зарегистрирован: 07.10.2009 (Ср) 15:02
Откуда: Москва

Как определить имя Книги, в которой запускается Макрос?

Здравствуйте!
Подскажите — как определить имя/путь Книги Excel, в которой находится запускаемый макрос, если этот макрос запускается из окна другой книги Excel?
Спасибо.

Пятачок Forever! :)


Template
Обычный пользователь
Обычный пользователь
 
Сообщения: 73
Зарегистрирован: 09.09.2006 (Сб) 18:03

Re: Как определить имя Книги, в которой запускается Макрос?

Сообщение Template » 21.05.2013 (Вт) 21:37

Ежели это требуется определить во время выполнения макроса, то ThisWorkbook

Код: Выделить всё
ThisWorkbook.Name
ThisWorkbook.FileName
ThisWorkbook.FullName


qwertyhp
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя

 
Сообщения: 156
Зарегистрирован: 07.10.2009 (Ср) 15:02
Откуда: Москва

Re: Как определить имя Книги, в которой запускается Макрос?

Сообщение qwertyhp » 22.05.2013 (Ср) 13:10

To Template:
Огромное спасибо! ThisWorkbook.FileName не прокатило, но ThisWorkbook.Name и ThisWorkbook.FullName полностью решили проблему. Еще раз спасибо!

Пятачок Forever! :)



Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: AhrefsBot, Google-бот и гости: 1

Like this post? Please share to your friends:
  • Узнать дату по количеству дней excel
  • Узнать все связи в excel
  • Узнать версию word 2016
  • Узнать excel для людей
  • Узнаем пароль в excel