#excel #vba #macos
Вопрос:
привет, вы можете помочь выяснить, как скопировать рабочий лист, если он существует, а если его нет, автоматически создаст новую книгу, а затем сохранит как пустую. пожалуйста, посмотрите мой код ниже, я попробую, если файл существует, скопируйте файл, а если нет, создайте новый пустой файл.
Workbooks.Open path1
Sheets.Select
If Sheets("Draft") = "" Then
Set wb = Workbooks.Add
ActiveWorkbook.SaveAs saveFolder amp; "D201D201.xlsx", FileFormat:=51
ActiveWorkbook.Close
Else
Sheets("Draft").Copy
ActiveWorkbook.SaveAs saveFolder amp; "D201D201.xlsx", FileFormat:=51
Workbooks(file1).Close
ActiveWorkbook.Close
End If
и я столкнулся с ошибкой, в которой говорится, что индекс находится вне диапазона
Ответ №1:
Почти уверен, что вы не очень старались там (учитывая, что отладка вызванной ошибки привела бы вас к очевидной ошибке). 😊
Вот два возможных способа проверить наличие листа с определенным именем:
Sub Temp()
''' Two possible ways to determine if a sheet with a specific name exists
''' Both assume you're looking for the sheet in the Active Book
''' There are other ways
''' Sledge hammer approach (very efficient)
Dim lgErramp;
On Error Resume Next: Err.Clear
With Sheets("Draft"): End With: lgErr = Err
On Error GoTo 0
If lgErr <> 0 Then
' Sheets("Draft") does not exist in the active workbook
Else
' Sheets("Draft") does exist in the active workbook
End If
''' More subtle approach (just as effective and only marginally less efficient)
Dim in1%
For in1 = 1 To Sheets.Count
If Sheets(in1).Name = "Draft" Then Exit For
Next in1
If in1 > Sheets.Count Then
' Sheets("Draft") does not exist in the active workbook
Else
' Sheets("Draft") does exist in the active workbook
End If
End Sub
Примечания:
1 — й подход, если его часто используют люди, уверенные в своих навыках vba.
Риск заключается в том, что ошибка кодирования между On Error Resume Next и On Error GoTo 0 может привести к неверному выводу.
2 — й подход не имеет такого же риска.
Комментарии:
1. Большое вам спасибо!! Я думаю, что моих усилий еще недостаточно 😀 но спасибо, я буду больше учиться, чтобы хорошо понимать этот язык 😀
Ответ №2:
обычно я использую функцию для проверки наличия листа в моей рабочей книге:
Function Feuille_Existe(ByVal Nom_Feuille As String) As Boolean
Dim Feuille As Excel.Worksheet
On Error GoTo Feuille_Absente_Error
Set Feuille = ActiveWorkbook.Worksheets(Nom_Feuille)
On Error GoTo 0
Feuille_Existe = True
Exit Function
Feuille_Absente_Error:
Feuille_Existe = False
End Function
Поместите это поверх вашего модуля и, когда вам это понадобится, в свой код :
If Feuille_Existe("XXX") Then
'do what you want'
End If