Как вернуть имя листа или книги в ячейку - PullRequest
0 голосов
/ 05 июня 2019

Я пытаюсь создать код, который выводит дату (например, 201607), содержащуюся в названии книги (например, 20160701_tyo). В следующем коде я указываю, в какую ячейку выводить значение, но я всегда сталкиваюсь с ошибкой, что я «не определил свой объект». Чего мне не хватает?

Sub WorksheetDateName()
    Dim DateName As String, OnlyDate As Long
    DateName = ActiveWorkbook.Name
    OnlyDate = Left(DateName.Value, 6)
    ActiveWorksheet.Range("E1").Value = OnlyDate
End Sub

Кроме того, возможно ли выполнить нечто подобное для «ActiveSheet» в дополнение к «ActiveWorkbook»? Заранее спасибо!

1 Ответ

3 голосов
/ 05 июня 2019

Для Workbook можно использовать VBA:

ActiveSheet.Range("E1").Value = Left(ActiveWorkbook.Name, 6)

Или вы можете просто использовать формулу в E1, такую ​​как:

=MID(CELL("filename"),FIND("[",CELL("filename"))+1,6)

Для имени Worksheet , если вам нужны первые 6 символов, вы можете использовать VBA:

 ActiveSheet.Range("F1").Value = Left(ActiveSheet.Name, 6)

и эквивалентная формула будет:

=MID(CELL("filename"),FIND("]",CELL("filename"))+1,6)

Примечание: обе формулы Excel требуют, чтобы файл был сохранен хотя бы один раз для правильной работы.


Хотя, просматривая ваш код, один из способов исправить это - использовать Val для преобразования строки из 6 символов в значение, которое может храниться в Long.

Sub WorksheetDateName()
    Dim DateName As String, OnlyDate As Long
    DateName = ActiveWorkbook.Name
    OnlyDate = Val(Left(DateName, 6))
    ActiveSheet.Range("G1").Value = OnlyDate
End Sub

Вы также заметите, что я изменил ActiveWorksheet на Activesheet - как предлагали другие комментарии.

...