ActiveSheets.Copy генерирует ошибку доступа к пути / файлу (ошибка 75) - PullRequest
0 голосов
/ 29 мая 2020

Я хотел бы скопировать активный лист Excel (тот, который пользователь в настоящее время выбрал вручную) и сохранить его как книгу в указанной папке.

Я использую код, который, как я знаю, работает (он скопирован у другого пользователя). Всякий раз, когда код попадает в строку ActiveSheet.Copy, он останавливается и показывает ошибку доступа к пути / файлу (ошибка 75).

Если я удалю строку кода ActiveSheet.Copy, код будет работать нормально, но при этом вся книга будет сохранена в папке вместо активного листа. Я заметил, что если я попытаюсь вручную скопировать лист в новую книгу в Excel, это будет нормально работать для книги .xlsx , но если книга .xlsm , ручной процесс будет не работает.

Для ясности: ручной процесс:

  • щелкните правой кнопкой мыши вкладку / рабочий лист
  • выберите в меню «Переместить» или «Копировать»
  • отметьте поле «Создать копию»
  • выберите «новую книгу» из раскрывающегося меню

Это должно создать новую книгу с листом, который у вас был выбрано. Тот же человек, который дал мне код, который работает на его компьютере, может вручную скопировать рабочий лист в новую книгу даже из книги с расширением .xlsm.

У меня новый ThinkPad, и я не менял никаких настроек по умолчанию. Я искал в Интернете помощь по этой проблеме, но не могу найти подходящих ответов. Кажется, это какая-то проблема с настройками, потому что код и ручной процесс работают на компьютере моих друзей, но не на моем.

Обновление 30 мая: Спасибо за ответы и за помощь в форматировании. Я попытался соблюдать правила форматирования в этом новом обновлении.

Когда код достигает строки ActiveSheet.Copy и останавливается, следующая последовательность событий:

  1. Ошибка доступа к пути / файлу
  2. Нажмите «Справка» - он отображает ошибку доступа к пути / файлу 75 и перенаправляет меня на URL-адрес Microsoft - Я не нашел никакой справки на странице справки по ошибке 75
  3. Ошибка времени выполнения '1004' Отображается сообщение «Не удалось скопировать этот лист» .
  4. Когда я нажимаю кнопку отладки при ошибке времени выполнения, она просто выделяет желтым цветом строку кода ActiveSheet.Copy. Сообщения больше не отображаются.

Обратите внимание: я запускал код на одном диске в файле Workbook.xlsm и пытался сохранить его на локальный диск на моем компьютере. Когда я удалил строку кода ActiveSheet.Copy, я смог сохранить весь файл workbook.xlsm в соответствующей папке, так что я подумал, что это не проблема пути.

Однако, когда я переместил книгу .xlsm с кодом для локального диска, я смог успешно запустить макрос со строкой кода ActiveSheet.Copy. Это произошло вчера после того, как я разместил свой первоначальный вопрос. Я обнаружил, что когда я вручную щелкал вкладку (лист), чтобы скопировать и сохранить ее в новую книгу, это также работало для workbook.xlsm, пока он находился на локальном диске.

Мне удалось сохранить весь файл workbook.xlsm (не лист) на моем локальном C: диске с One Drive, когда я удалил строку кода ActiveSheet.Copy. Это заставляет меня думать, что это не проблема пути, потому что я могу сохранить в указанную папку, я просто не могу скопировать и сохранить лист. Я не считаю дело закрытым и все еще пытаюсь понять 1) Почему я не могу запустить код со строкой кода ActiveSheet.Copy с One Drive; 2) почему ручной процесс копирования листа в новую книгу не работает на One Drive в xlsm, но работает на локальном диске.

Вот код:

  Sub SaveMe()

'Application.ScreenUpdating = False

Dim MyTm As String          'Holds the Territory Manager "Code"
Dim MySavePath As Variant   'Holds the path to save the file
Dim MyFileName As String    'Holds the file name
Dim MyYear As Integer       'Holds the year
Dim MyMonth As Integer      'Holds the month
Dim MyDay As Integer        'Holds the day

MyYear = Year(Now)
MyMonth = Month(Now)
MyDay = Day(Now)

MyTm = Left(ActiveSheet.Name, 4)
MySavePath = Application.WorksheetFunction.VLookup(MyTm, Range("TMSavePath"), 2, False)


    ActiveSheet.Copy

    ActiveWorkbook.SaveAs Filename:= _
        MySavePath & "\" & MyYear & MyMonth & MyDay & " - " & ActiveSheet.Name & ".xlsx", FileFormat:= _
        xlOpenXMLWorkbook, CreateBackup:=False
    ActiveWindow.Close

'Application.ScreenUpdating = True

End Sub

Спасибо!

1 Ответ

0 голосов
/ 29 мая 2020

Попробуйте этот код:

Sub moveActvieSheetToAnotherWB()

Application.DisplayAlerts = False

Dim wb As String
Dim sht As String
Dim newWb As Workbook

wb = ActiveWorkbook.Name
sht = ActiveSheet.Name
'

Set newWb = Workbooks.Add
Workbooks(wb).Sheets(sht).Copy before:=newWb.Sheets(1)

'disable popup before delete empty tab
Application.DisplayAlerts = False
newWb.Sheets(2).Delete

'full path
'newWb.SaveAs "newFilename.xlsx"
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...