2016-01-25 9 views
0

Может кто-нибудь, пожалуйста, сообщите, где я здесь ошибся? Я хочу проверить, существует ли лист с именем «test», а если нет, создайте и назовите этот лист «test». Если он существует, я запускаю отдельный блок кода, который я здесь не привел. Я использовал обработку ошибок в том, что он игнорирует errornif.Проверьте, существует ли лист

If Sheets("test").Name = "" Then 
'MsgBox Sheets("test").Name & "Name" 
.Worksheets.Add   After:=ThisWorkbook.Worksheets("test2") 
.ActiveSheet.Name = "test" 
End If 

Независимо от того, что я делаю, это часть кода всегда работает и создает новый код sheet.The работает должным образом, если лист «тест» уже не существует. Он создает новый лист и переименовывает его и движется дальше. Очевидно, что он не переименовывает лист в другом случае, так как уже есть другой лист «test» с тем же именем.

Спасибо!

+3

дубликата http://stackoverflow.com/questions/6688131/test-or-check-if-sheet-exists –

+3

Возможных дублировать [Проверить или проверить, существует ли листок) (https://stackoverflow.com/questions/6688131/test-or-check-if-sheet-exists) – puzzlepiece87

ответ

0

Не совсем уверен, почему вы получаете дополнительные рабочие листы, но я бы использовал и внешнюю функцию, чтобы проверить, существует ли рабочий лист ...

Я также добавил бы ошибку Cking для «test2», так вот какой-то код, который вы должны быть в состоянии адаптировать

Sub Test() 
    Dim wsName As String: wsName = "test" 
    If Not WorkSheetExists(wsName) Then Worksheets.Add().Name = wsName 
    If WorkSheetExists("test2") Then Worksheets(wsName).Move _ 
     After:=ThisWorkbook.Worksheets("test2") 
End Sub 

Function WorkSheetExists(ByVal strName As String) As Boolean 
    On Error Resume Next 
    WorkSheetExists = Not ActiveWorkbook.Worksheets(strName) Is Nothing 
End Function 
+0

не работает. Пробовал этот метод, а также for (цикл через все листы), в основном они ничего не делают. он вообще не приближается к листу wsname. –

+0

просто попробовал еще раз. это сработало, какая-то ошибка. Благодаря! –

0

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

Function IsExists(name As String, Optional wb As Workbook) As Boolean 
    Dim sheet As Worksheet 

    If wb Is Nothing Then Set wb = ThisWorkbook 
    On Error Resume Next 
    Set sht = wb.Sheets(name) 
    On Error GoTo 0 
    IsExists = Not sheet Is Nothing 
End Function 
+0

На всякий случай OP имеет ограниченное знание vba, как вы совмещаете то, что вы только что отправили, с тем, что ОП пытается сделать с его/ее кодом? –

+0

Я даю это как один плюс - вы передаете имя листа и ссылку на книгу, а не смотрите на каждый лист по очереди. @Scott Он вернет TRUE/FALSE - так что 'IF NOT IsExists (« Sheet1 ») THEN' –

+0

@ DarrenBartrup-Cook, я знаю, как его использовать, но для хорошего ответа ему нужно показать OP, как ссылаться на функцию из под. –

0

несколько иной способ достижения этой цели было бы создать словарь названий листов.

Вы можете использовать функцию существует для проверки, существует ли лист или не

Dim sheetNames As Object 
Dim ws As Worksheet 

' Create and populate dictionary 
Set sheetNames = CreateObject("Scripting.Dictionary") 
For Each ws In ThisWorkbook.Sheets 
    sheetNames.Add ws.Name, ws.Index 
Next ws 

' Test if sheet exists 
If Not sheetNames.Exists("test") Then 
    ' If not add to workbook 
    ThisWorkbook.Worksheets.Add(after:=ThisWorkbook.Worksheets("test2")).Name = "test" 
    ' add sheet to dictionary 
    sheetNames.Add "test", ThisWorkbook.Worksheets("test").Index 
End If 
0

Если вы не слишком хорошо знакомы с VBA, вы можете использовать это вместо функции:

Sub checkSheet() 
    For i = 1 To Worksheets.Count 
     If Worksheets(i).Name = "MySheet" Then 
      exists = True 
     End If 
    Next i 

    If Not exists Then 
     Worksheets.Add.Name = "MySheet" 
    End If 
End Sub 
Смежные вопросы