Inter_E Пользователь Сообщений: 399 |
Добрый день! With my best regards, Inter_E |
KuklP Пользователь Сообщений: 14868 E-mail и реквизиты в профиле. |
Привет. Я сам — дурнее всякого примера! … |
Hugo Пользователь Сообщений: 23253 |
А если в середине названия такое встречается? У меня бывало |
Inter_E Пользователь Сообщений: 399 |
{quote}{login=KuklP}{date=17.08.2010 01:28}{thema=}{post}Привет. Да Hugo прав, если в середине окажется? Мне тоже мысль отрезать в первую очередь приходило. Но это тоже не красивый вариант. With my best regards, Inter_E |
KuklP Пользователь Сообщений: 14868 E-mail и реквизиты в профиле. |
Ну если в середине названия оказывается «.xls», то можно только посочувствовать тому, кто так называет файлы и помянуть добрым словом старый добрый DOS:-) Я сам — дурнее всякого примера! … |
Юрий М Модератор Сообщений: 60585 Контакты см. в профиле |
{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} |
Юрий М Модератор Сообщений: 60585 Контакты см. в профиле |
Вдогонку: файл называется xls.Книга1 |
KuklP Пользователь Сообщений: 14868 E-mail и реквизиты в профиле. |
{quote}{login=Юрий М}{date=17.08.2010 02:20}{thema=}{post}Вдогонку: файл называется xls.Книга1{/post}{/quote} Не катит — точка не там. Надо: .xls.Книга1:-) Я сам — дурнее всякого примера! … |
Inter_E Пользователь Сообщений: 399 |
Кажется всетаки есть какая-та функция вроде «ActiveWorkbook.RootName» для получения только имени… With my best regards, Inter_E |
Юрий М Модератор Сообщений: 60585 Контакты см. в профиле |
MsgBox Replace(Application.Caption, «Microsoft Excel -«, «») |
KuklP Пользователь Сообщений: 14868 E-mail и реквизиты в профиле. |
{quote}{login=Юрий М}{date=17.08.2010 03:07}{thema=}{post}MsgBox Replace(Application.Caption, «Microsoft Excel -«, «») Я сам — дурнее всякого примера! … |
KuklP Пользователь Сообщений: 14868 E-mail и реквизиты в профиле. |
Так, наверное: Я сам — дурнее всякого примера! … |
Inter_E Пользователь Сообщений: 399 |
{quote}{login=KuklP}{date=17.08.2010 03:24}{thema=}{post}Так, наверное: Огромное спасибо Вам Юрий, KukIP! With my best regards, Inter_E |
Inter_E Пользователь Сообщений: 399 |
{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}Так, наверное: Огромное спасибо Вам Юрий, KukIP! Я думаю кто то точно сталкнется с этой проблемой With my best regards, Inter_E |
KuklP Пользователь Сообщений: 14868 E-mail и реквизиты в профиле. |
Ну, так проще — меньше бубнов: Я сам — дурнее всякого примера! … |
Hugo Пользователь Сообщений: 23253 |
Тоже не универсально — ведь у человека может вдруг быть код Private Sub Workbook_Open() ну мало ли, терпеть не может Microsoft |
KuklP Пользователь Сообщений: 14868 E-mail и реквизиты в профиле. |
Но опять же, куча точек в названии не редкость. Вот, например с этого форума: CompareFiles.Find.Rus.v132.xls. Так, что вернулись на исходную. Я сам — дурнее всякого примера! … |
Hugo Пользователь Сообщений: 23253 |
Пока писал, Сергей нашёл вариант, обходящий «Терпеть не могу» |
webley Пользователь Сообщений: 1995 |
еще вариант: |
Hugo Пользователь Сообщений: 23253 |
Хм… у меня часто в названии точка используется вместо «_» … |
Hugo Пользователь Сообщений: 23253 |
|
KuklP Пользователь Сообщений: 14868 E-mail и реквизиты в профиле. |
Вот для придурошных имен: Я сам — дурнее всякого примера! … |
KuklP Пользователь Сообщений: 14868 E-mail и реквизиты в профиле. |
У webley короче. Я сам — дурнее всякого примера! … |
Hugo Пользователь Сообщений: 23253 |
Да и с именем Bwdwqd.xls.jkkl.ook2.xls справился только webley. |
Юрий М Модератор Сообщений: 60585 Контакты см. в профиле |
{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 E-mail и реквизиты в профиле. |
то HUGO: Ну да. Я сам — дурнее всякого примера! … |
А у меня вариант Юрия работает отлично, вот! «39039» |
|
KuklP Пользователь Сообщений: 14868 E-mail и реквизиты в профиле. |
Так: Я сам — дурнее всякого примера! … |
Юрий М Модератор Сообщений: 60585 Контакты см. в профиле |
Я же отталкивался от того, что вижу у себя |
Юрий М Модератор Сообщений: 60585 Контакты см. в профиле |
#30 17.08.2010 16:17:17 Серж, ремонтируй свой MsgBox |
прописать в макросе название книги с ячейки |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
Check if your variable Filename
contains the correct filename. (e.g. Sample.xls)
Also check if input_path_1
and input_file_1
have correct values.
If they have it should be like this:
Workbooks(Filename).Activate
Now, if you need to append the extension name (e.g. Filename
value is just Sample):
Workbooks(Filename & ".xls").Activate
The argument should always be in the form of string and should be the complete filename (with extension). Although numerals (index) is also accepted, you can’t be sure what index refer to what workbook. Better yet, assign it to a variable.
Dim otherWB As Workbook
Set otherWB = Workbooks(Filename)
'Set otherWB = Workbooks(Filename & ".xls") '~~> for second scenario above
Edit1: From comment, if Filename
contains the fullpath, then this might work.
Dim Filename1 As String
Filename1 = Split(Filename, "")(UBound(Split(Filename, "")))
Workbooks(Filename1).Activate
Как определить имя Книги, в которой запускается Макрос?
- 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
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2
Добрый день уважаемые программисты !
В программировании я ни бум-бум, поэтому прошу у Вас помощи.
Нужен простой макрос который будет переименовывать имя книги при закрытии, по имени ячейки (например меняем текст в ячейке A1 на «Договор №1», получаем книгу с именем «Договор №1»).
Когда-то очень давно мне попадался такой макрос на просторах инета, но сейчас уже все перегуглил, найти не могу! ((
Заранее всем спасибо!
Добавлено через 3 минуты
Вот кое что нашел, но этот макрос работает по открытию книги ((. А мне нужно что бы имя книги менялось сразу по закрытию. Может кто знает что поменять нужно ?
Visual Basic | ||
|
Открытие книги Excel из кода VBA. Проверка существования книги. Создание новой книги, обращение к открытой книге и ее закрытие. Методы Open, Add и Close.
Открытие существующей книги
Существующая книга открывается из кода VBA Excel с помощью метода Open:
Workbooks.Open Filename:=«D:test1.xls» |
или
Workbooks.Open («D:test1.xls») |
В кавычках указывается полный путь к открываемому файлу Excel. Если такой файл не существует, произойдет ошибка.
Проверка существования файла
Проверить существование файла можно с помощью функции Dir. Проверка существования книги Excel:
If Dir(«D:test1.xls») = «» Then MsgBox «Файл не существует» Else MsgBox «Файл существует» End If |
Или, если файл (книга Excel) существует, можно сразу его открыть:
If Dir(«D:test1.xls») = «» Then MsgBox «Файл не существует» Else Workbooks.Open Filename:=«D:test1.xls» End If |
Создание новой книги
Новая рабочая книга Excel создается в VBA с помощью метода Add:
Созданную книгу, если она не будет использоваться как временная, лучше сразу сохранить:
Workbooks.Add ActiveWorkbook.SaveAs Filename:=«D:test2.xls» |
В кавычках указывается полный путь сохраняемого файла Excel, включая присваиваемое имя, в примере — это «test2.xls».
Обращение к открытой книге
Обращение к активной книге:
Обращение к книге с выполняемым кодом:
Обращение к книге по имени:
Workbooks(«test1.xls») Workbooks(«test2.xls») |
Обратиться по имени можно только к уже открытой книге, а чтобы из кода VBA Excel книгу открыть, необходимо указать полный путь к файлу.
Открытая рабочая книга закрывается из кода VBA Excel с помощью метода Close:
Workbooks(«test1.xlsx»).Close |
Если закрываемая книга редактировалась, а внесенные изменения не были сохранены, тогда при ее закрытии Excel отобразит диалоговое окно с вопросом: Вы хотите сохранить изменения в файле test1.xlsx? Чтобы файл был закрыт без сохранения изменений и вывода диалогового окна, можно воспользоваться параметром метода Close — SaveChanges:
Workbooks(«test1.xlsx»).Close SaveChanges:=False |
или
Workbooks(«test1.xlsx»).Close (False) |
Закрыть книгу Excel из кода VBA с сохранением внесенных изменений можно также с помощью параметра SaveChanges:
Workbooks(«test1.xlsx»).Close SaveChanges:=True |
или
Workbooks(«test1.xlsx»).Close (True) |
Фразы для контекстного поиска: открыть книгу, открытие книги, создать книгу, создание книги, закрыть книгу, закрытие книги, открыть файл Excel, открытие файла Excel, существование книги, обратиться к открытой книге.
Доброго дня!
Обычно делаю так:
Перед открытием файла, запоминаю параметры исходного:
WBOld = Thisworkbook.Name
WSOld = ActiveSheet.Name
Теперь открываю нужный файл. Естественно, что он после открытия становится активным.
Ну а дальше варианты:
Если мне нужно из этого активного файла переписать данные в файл открывающий (например значение в ячейке E2, вызываемого файла, активный лист), то записываю данные в переменную (-нные) и затем:
param=0
param=cells(2,5).Value
With workbooks(WBOld).Worksheets(WSOld)
.cells(3,2)=param
param=0
End With
В случае, если же мне нужно перейти в вызывающую книгу и вызывающий лист, то так
workbooks(WBOld).activate
Worksheets(WSOld).select
Вот кусок кода:
'собираем перечень использованных в эти даты объектов = Start ===
'запоминаем исходные книгу и лист
wobk = ThisWorkbook.Name
wost = "DayWork"
'Открываем Tbl&CC.xls
''Проверяем не открыта ли она уже,
fil01 = False
For Each wbk In Workbooks
If wbk.Name = "Tbl&CC.xls" Then
fil01 = True
Exit For
End If
Next
'если не открыта, то открываем
If fil01 = False Then
Application.ScreenUpdating = False '- отключаем обновление экрана
Application.EnableEvents = False '- отключаем реакцию на события
Workbooks.Open Filename:="\EnergypoleTbl&CC.xls", ReadOnly:=True, Password:="Wolf" '- только на чтение
Application.EnableEvents = True '- включаем реакцию на события
End If
With Workbooks("Tbl&CC.xls").Worksheets("CCS")
'определяем занятую данными область листа == Start ==
Set blok = .UsedRange
nREnd = blok.Row + blok.Rows.Count - 2
Set blok = Nothing
'определяем занятую данными область листа == Stop ==
If nREnd < 3 Then
MsgBox "База Табеля [Tbl&CC.xls] - ПУСТА!", vbQuestion + vbOKOnly, ""
closeTabel fil01
Exit Sub
End If
'формируем массив объектов
k = 0
ReDim arrNabor(k)
datT = 0
i = 0
For i = nREnd To 4 Step -1
datT = .Cells(i, 6).Value
flgT = False
'Stop
j = 0
For j = LBound(arrVibor) To UBound(arrVibor)
If datT = CDate(arrVibor(j)) Then
flgT = True
End If
Next j
If flgT = True Then
'
datR = .Cells(i, 2).Text
flgQ = False
f = 0
For f = LBound(arrNabor) To UBound(arrNabor)
If datR = arrNabor(f) Then
flgQ = True
End If
Next f
If flgQ = False Then
If k > 0 Then
ReDim Preserve arrNabor(k)
End If
arrNabor(k) = datR
k = k + 1
End If
End If
'
datT = 0
datR = ""
Next i
End With
Erase arrVibor
closeTabel fil01
Workbooks(wobk).Worksheets(wost).Activate
'собираем перечень использованных в эти даты объектов = Stop ===
если непонятно — спрашивайте …