Мне нужно , чтобы получить имя файла без имени расширения с помощью VBA. Я знаю , что ActiveWorkbook.Name собственность, но если пользователь имущие Windows , свойство Hide extensions for known file types отключить, результат моего кода будет [name.extension]. Как я могу вернуть только имя рабочей книги независимо от окна недвижимости?
Я стараюсь даже , ActiveWorkbook.Application.Caption но я не могу настроить это свойство.
Ответы , приведенные здесь уже могут работать в ограниченных ситуациях, но, конечно , не лучший способ пойти об этом. Не изобретать колесо. File System Object в библиотеке Microsoft Scripting время выполнения уже есть метод , чтобы сделать именно это. Это называется GetBaseName . Он обрабатывает периоды в имени файла как есть.
Мне нужно получить имя файла без имени расширения по VBA. я знаю ActiveWorkbook.Name свойство, но если у пользователя есть свойство Windows Hide extensions for known file types выключите, результатом моего кода будет [Name.Extension]. Как я могу вернуть только имя Workbook независимо от свойства windows?
Я стараюсь даже ActiveWorkbook.Application.Caption но я не могу настроить это свойство.
7 ответов
Возможно, для Вашего проекта будут необходимы бесплатные векторные карты. На нашем сайте представлены карты для всех стран.
Ответы, приведенные здесь, уже могут работать в ограниченных ситуациях, но, безусловно, не лучший способ сделать это. Не изобретай велосипед. Объект файловой системы в Библиотека времени выполнения сценариев Microsoft уже есть метод, чтобы сделать именно это. Это называется GetBaseName. Он обрабатывает точки в имени файла как есть.
Просто, но у меня хорошо работает
На мой взгляд, использование функции Split выглядит более элегантно, чем InStr и Left.
Чтобы быть многословным, удаление расширения демонстрируется для рабочие книги .. которые теперь имеют различные расширения. , новый несохраненный Book1 не имеет доп , работает одинаково для файлов
Функция WorkbookIsOpen (FWNa $, необязательный AnyExt As Boolean = False) As Boolean
Конечная функция [/код]
Это получает тип файла, начиная с последнего символа (поэтому избегает проблемы с точками в именах файлов)
Обо всём, что мне интересно
Полезные команды VBA
Пополняемый список полезных отрывков кода VBA для выполнения часто востребованных действий в MS Excel.
Служебные команды для ускорения скорости выполнения макроса:
‘Отключение отображения выполняемых действий Application.ScreenUpdating = False ‘Предотвращение появления предупреждающих сообщений Application.DisplayAlerts = False ‘Предотвращение появления предупреждения об обновлении связей данных Application.AskToUpdateLinks = False ‘Очистка буфера обмена Application.CutCopyMode = False
Проверка имени пользователя, запустившего макрос:
Чтобы проверить, какой пользователь открыл книгу Excel можно использовать один из следующих вариантов:
If Application.UserName = "Имя_автора_документа" Then .
If Environ("username") = "user" Then .
Поиск последней строки таблицы:
Set myWSheet = ThisWorkbook.Sheets("Имя_листа") With myWSheet ‘Определение индекса последней строки таблицы lastRow = .Cells(Rows.Count, 1).End(xlUp).Row ‘Определение значения в ячейки последней строке столбца A lastARow = .Range("A" & lastRow).Value End With
Замена формулы на значение:
Добавление нового листа с именем после всех существующих:
Worksheets.Add (After:=Worksheets(Worksheets.Count)).Name = "Имя_листа"
Как узнать последний день предыдущего месяца:
LastMonthDay = DateAdd("d", -1, DateSerial(Year(dtDate), Month(dtDate), 1))
Определение оставшихся дней месяца:
dToEndOfMonth = DateDiff("d", dFrom, DateAdd("d", -1, _ DateSerial(Year(dFrom), Month(dFrom) + 1, 1)))
Номер текущего дня в неделе (воскресенье — первый день):
DayOfWeek = DatePart("w", dToday)
Создание нового файла из текущего:
pathNewBook = "C:Temp" nameNewBook = "Имя_нового_файла.xls" Workbooks.Add ActiveWorkbook.SaveAs Filename:=pathNewBook & nameNewBook ActiveWorkbook.Close True
Сохранить текущий файл в формате CSV
Чтобы при сохранении файла в формате CSV, вместо запятых в качестве разделителя использовалась точка с запятой, следует использовать подобный код:
ActiveWorkbook.SaveAs FileName:="Name.csv", FileFormat:=xlCSV, _ CreateBackup:=False, Local:=True ActiveWorkbook.Saved = True ActiveWorkbook.Close True
Копирование данных из одного файла в другой:
wbPath = "C:Temp" wbName = "Имя_файла_откуда_копируем.xls" Workbooks.Open (wbPath & wbName) Set WB = Workbooks(wbName) WB.Sheets("Лист 1").Range("A1:С10").Copy Sheet("Лист_в_текущем_файле").Range("A2").PasteSpecial xlPasteValues
Чтобы открыть файл только для чтения, следует использовать:
Workbooks.Open (Filename:=wbPath & wbName, ReadOnly:=True)
Предотвращение ошибки при неудачном поиске значения в таблице:
Set DateRowObj = WB.Sheets("Имя_листа").Range("A:A")._ Find(What:=dtToAsDate, LookIn:=xlFormulas) If (DateRowObj Is Nothing) Then WB.Close False MsgBox "Данные не найдены." Else DateRow = DateRowObj.Row ‘Номер строки с искомым значением End If
Как получить имя активной книги Excel без его расширения (без .xls либо без .xlsx):
wbName = Left(ActiveWorkbook.Name, InStrRev(ActiveWorkbook.Name, ".") – 1)
Проверка существования файла:
fPath = "C:Temp" fName = "Файл.txt" If Dir(fPath & fName) = "" Then MsgBox "Файл не найден:" & Chr(13) & fPath & fName Exit Sub End If
Кнопка, скрывающая/разворачивающая часть таблицы:
Private Sub tbV ).H >
Обновление сводной таблицы:
currPath = ThisWorkbook.Path currWBName = ThisWorkbook.Name ListName.PivotTables("СводнаяТаблица1").ChangePivotCache ActiveWorkbook. _ PivotCaches.Create(SourceType:=xlDatabase, SourceData:=currPath & "[" & _ currWBName & "]Лист1!R1C1:R10C5")
Обращение к элементам Frame:
Замена #ДЕЛ/0! в диапазоне:
Selection.Replace What:="#DIV/0!", Replacement:="", LookAt:=xlPart,_ SearchOrder:=xlByRows, MatchCase:=False,_ SearchFormat:=False, ReplaceFormat:=False
Количество строк в отфильтрованной таблице:
Быстро убрать лишние пробелы в диапазоне:
Программно снять защиту с листа:
Работа с диапазоном
Умножить диапазон на число:
ThisWorkbook.Sheets(1).Range("A1:A10") = _ ThisWorkbook.Sheets(1).Evaluate("A1:A10" & "*80")
Добавить ко всем значениям диапазона строку:
ThisWorkbook.Range("A1:A10").Value = _ Evaluate("=""" & addTxt & """ & " & ThisWorkbook.Range("A1:A10").Address)
Сортировка выбранного столбца в сводной таблице
Col = Selection.Column ‘Номер выбранного столбца ColMax = ActiveSheet.PivotTables("СводнаяТаблица").PivotColumnAxis. _ PivotLines.Count If Col – 1
Поиск файлов в папке
Dim strDirPath, strMaskSearch, strFileName as String strDirPath = "C:/test/" ‘Папка поиска strMaskSearch = "*.xls*" ‘Маска поиска ‘Получаем первый файл соответствующий шаблону strFileName = Dir(strDirPath & strMaskSearch) Do While strFileName <> "" ‘До тех пор пока файлы "не закончатся" MsgBox strFileName strFileName = Dir ‘Следующий файл Loop