Можно ли создать новую рабочую книгу, которая не активна? - PullRequest
0 голосов
/ 19 октября 2018

Обновленная проблема: реальная проблема заключается в том, что я использовал добавление даты к имени файла.Я не могу переформатировать дату, и ошибка, кажется, вызвана / в дате, так как можно переформатировать это так, чтобы Excel понимал, что дата включена в имя файла?Теперь я понимаю, что SaveCopyAs не нужен «фиктивный» файл для загрузки в первую очередь.

В настоящее время я получаю ошибку времени выполнения 1004 для метода SaveCopyAs, говорящего, что он не может найти местоположение нового файла.Я пытаюсь создать.Я интерпретировал это как означающее, что мне нужно создать «фиктивный» файл для хранения скопированной информации, прежде чем перезаписать его данными и новым именем файла.Это правильно?

Решение будет простым: создать фиктивный файл и ссылаться на каждый файл отдельно, а затем продолжить, как я интерпретировал выше.Тем не менее, я пытаюсь зациклить этот процесс и использую модуль, который размещен в PERSONAL.XLSB, поэтому я не могу использовать ThisWorkbook и должен использовать ActiveWorkbook.Моя проблема сейчас в том, что я не знаю, как создать автоматизированный процесс копирования данных в новый файл из-за моего использования ActiveWorkbook.

Это мой текущий код:

Sub cellvalue_filename()

    Dim Path
    Dim NewPath
    Dim WBname
    Dim Destination

    Path = "C:\oldfilelocation\"
    WBname = ActiveWorkbook.Name
    NewPath = "C:\newfilelocation\"

    Destination = NewPath & Range("B2") & WBname

    ActiveWorkbook.SaveCopyAs filename:=Destination
    ActiveWorkbook.Close

End Sub

1 Ответ

0 голосов
/ 19 октября 2018

Как правило, в VBA лучше явно обращаться к нужной книге и рабочему листу, а не полагаться на то, что она активна.

Вы говорите, что не можете использовать ThisWorkbook, потому что выссылка на книгу, отличную от той, которая содержит ваш код VBA, но это не означает, что вы должны использовать ActiveWorkbook.

Вместо этого вы можете получить ссылку на книгу при открытии или создании, например,

Dim objWorkbook As Workbook
Set objWorkbook = Application.Workbooks.Open(...)
...
objWorkbook.SaveCopyAs ...

Аналогичным образом, использование Range("B2") без указания рабочего листа предполагает наличие активного рабочего листа в активной рабочей книге.Вместо этого явно укажите рабочий лист, например:

Dim objWorksheet As Worksheet
Set objWorksheet = objWorkbook.Worksheets(1) ' or whatever worksheet you want 
...
Destination = NewPath & objWorksheet.Range("B2") & WBname
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...