2015-11-02 3 views
-1

Я считаю, что все остальное выдумано, но строка Set newSheetName = sht.Range («A1: A») не вытягивает никакой информации. Я получаю ошибку времени выполнения «1004»: метод «Диапазон» объекта «Рабочий стол» не удался. Что мне не хватает?Ошибка времени выполнения в Excel VBA

То, что я пытаюсь достичь, заключается в том, чтобы этот макрос просматривал диапазон в листе «ARK_E_TEXAS», который имеет значение от A1 до C23 («ARK_E_TEXAS_LIST»). Если A1: A имеет данные, он создаст новый лист и назовет новый лист с именем ячейки. Я использую линию Lastrow, чтобы узнать, сколько строк должно быть вниз, а функция if - пропускать пробелы.

Sub Create_ARK_E_TEXAS() 
    Dim sht As Worksheet 
    Dim newSheetName As Range 
    Dim dataRange As Range 
    Dim Lastrow As Long 

    Set sht = ThisWorkbook.Sheets("ARK_E_TEXAS") 
    Set newSheetName = sht.Range("A1:A") 
    Lastrow = sht.Range("ARK_E_TEXAS_LIST").Rows.Count 
    Set dataRange = sht.Range("A1:C" & Lastrow) 

For Each newSheetName In dataRange 
    If newSheetName.Value <> "" Then 
     Sheets.Add After:=Sheets(Sheets.Count) 'creates a new worksheet 
     Sheets(Sheets.Count).Name = newSheetName.Value ' renames the new worksheet 
    End If 
Next newSheetName 
End Sub 
+0

Вы сделали 'Set dataRange = sht.Range (" A1: C "& Lastrow)' позже, так зачем раньше вызывать '& lastrow'? – findwindow

+0

Это может быть только опечатка, но «If newSheetName.Value» «Then' должно быть' If newSheetName.Value <> "" Then' –

+0

@findwindow мой код даже не доходит до этой точки. Я получаю ошибку в Set newSheetName. Ваш вопрос может быть проблемой, но я не буду знать, пока не получу первую ошибку. – wjwelch1

ответ

-1

Хорошо, я получил свой ответ с помощью @AlexWeber.

Sub Create_ARK_E_TEXAS() 


Dim sht As Worksheet 
Dim newSheetName As Range 
Dim dataRange As Range 
Dim Lastrow As Long 

Set sht = ThisWorkbook.Sheets("ARK_E_TEXAS") 
Lastrow = sht.Range("ARK_E_TEXAS_LIST").Rows.Count 
Set newSheetName = sht.Range("A1:A" & Lastrow) 
Set dataRange = sht.Range("A1:A" & Lastrow) 

For Each newSheetName In dataRange 
If newSheetName.Value <> "" Then 
    Sheets.Add After:=Sheets(Sheets.Count) 'creates a new worksheet 
    Sheets(Sheets.Count).Name = newSheetName.Value ' renames the new worksheet 
End If 
Next newSheetName 
End Sub 
Смежные вопросы