Почему только что открывшийся Workbook.Name отличается от заголовка Workbook в окне Excel? - PullRequest
2 голосов
/ 22 мая 2019

Я создал файл и сослался на него как GlobalFile.
Затем я сохранил его как «Glo», а затем как «Ume».Затем я снова открываю сохраненные файлы, чтобы открыть две разные рабочие книги под двумя разными именами в двух разных объектах рабочей книги: GlobalFile и NightMareFile.

. После открытия окна Excel имеют правильные заголовки как «Glo.xls»."и" Ume.xls "соответственно, но тестирование NightMareFile.Name приводит к" Glo.xlsx "!!!

Как это вообще возможно?


Я нахожусьWin 10 64 бит, Excel 365 16 бит.

Уже пробовал:

  • DoEvents до или после открытия
  • RefreshAll после открытия
  • перезапуск Excelне принес никаких изменений.

Что заставляет меня дергать себя за волосы: изменение порядка двух открытых блоков исправляет конфликт имен: если «Ume» открывается первым, оно имеет правильное имя, как и «Glo».Msgstr ".

Изначально у меня было сохранено и открыто несколько именованных версий файлов, но только эта всегда была неисправна, отсюда и новое имя: NightMareFile.Независимо от того, как я изменил порядок открытия файлов, этот всегда наследовал имя файла, открытого перед ним, в другую переменную объекта.

Option Explicit

Sub main_control_routine()

    Dim GlobalFile As Workbook
    Dim NightMareFile As Workbook

    Set GlobalFile = Workbooks.Add
    Debug.Print "GlobalFile.Name: " & GlobalFile.Name

    Application.DisplayAlerts = False

    GlobalFile.SaveAs Filename:="Glo"
    Debug.Print "GLOBAL File ready!"

    'GlobalFile save as Ume
    GlobalFile.SaveAs Filename:="Ume"
    Debug.Print "GlobalFile.Name: As Ume " & GlobalFile.Name

    Application.DisplayAlerts = True

    'GLOBAL reopened to GlobalFile
    Set GlobalFile = Workbooks.Open("Glo", False)
    Debug.Print "GlobalFile.Name: " & GlobalFile.Name

    'Ume reopened to NightMareFile
    Set NightMareFile = Workbooks.Open("Ume", False)
    Debug.Print "NightMareFile.Name: " & NightMareFile.Name

End Sub

1 Ответ

1 голос
/ 22 мая 2019

Если рабочая книга с тем же именем, что и та, которую вы пытаетесь открыть, уже открыта, и вы пытаетесь присвоить переменную объекта рабочей книги возвращаемому значению метода Open(), тогда конечный результат может быть непредсказуемым.

Например - если я запускаю это с открытыми обеими книгами "Glo" и "Ume":

Sub main_control_routine()

    Dim wb As Workbook

    Set wb = Workbooks.Open("Glo.xlsx", False)
    Debug.Print wb.Name

    Set wb = Workbooks.Open("Ume.xlsx", False)
    Debug.Print wb.Name

    Set wb = Workbooks.Open("Glo.xlsx", False)
    Debug.Print wb.Name

    Set wb = Workbooks.Open("Ume.xlsx", False)
    Debug.Print wb.Name

End Sub

... это вывод:

Ume.xlsx
Ume.xlsx
Ume.xlsx
Ume.xlsx

Не то, что вы ожидаете.

В моем тестировании похоже, что вместо получения намеченной рабочей книги она возвращает ссылку на последнюю открытую рабочую книгу.

Исправление будет состоять в том, чтобы всегда проверять, открыта ли рабочая книга, прежде чем использовать Workbooks.Open() для получения ссылки на нее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...