2013-05-16 2 views
1

Я пытаюсь создать рабочие листы с именем, взятым из sheet1 клеток, но я всегда получаю 1004 error при выполнении Worksheets(Worksheets.Count).name = companyName1004 ошибка при попытке установить имя на листе XLs

Я попытался установить листы имя по PrefferedName и работал ... и я также проверил с MsgBox этой companyName переменной есть имя последнего листа в ...

Sub Find2() 
    Dim i, k As Integer 
    Dim j, l As Integer 
    Dim Counter As Integer 
    Dim dateAnnounced As Date 
    Dim fromDate As Date 
    Dim currentCellDate As Date 
    Dim daysBefore As Integer 
    Dim kk As Integer 
    Dim from1 As Integer 
    Dim companyName As Variant 

    Set originsheet = ThisWorkbook.Worksheets("Sheet1") 

    daysBefore = 30 

    i = 3 
    j = 4 
    Counter = 0 
    k = 5 
    l = 4179 
    dateAnnounced = Cells(i, j).Value 

    For Each cel In Range(Cells(1, k), Cells(1, 4179)) 
     currentCellDate = cel.Value 

     If currentCellDate = dateAnnounced Then 
      MsgBox k 
      Exit For 
     End If 

     k = k + 1 
    Next cel 

    kk = k 
    from1 = k - daysBefore 

    ThisWorkbook.Sheets.Add after:=Sheets(Worksheets.Count) 
    companyName = Worksheets("Sheet1").Cells(i, j - 1).Value 
    Worksheets(Worksheets.Count).name = companyName 

    MsgBox name 

    For Each cel In Range(Cells(1, from1), Cells(1, kk)) 
     If from1 = kk Then 
      MsgBox cel.Value 
      Exit For 
     Else 
      Counter = Counter + 1 
     End If 

     from1 = from1 - 1 
    Next cel 

    MsgBox Counter 

End Sub 
+1

Я не уверен, что проблема, но одна вещь, которую вы должны сделать, это положить Option Explicit в верхней части этого модуля. Это заставляет вас объявлять все переменные перед их использованием. Затем вы увидите, что «имя» не объявляется как переменная, которая влияет на один из ваших операторов MsgBox. Кроме того, хотя это не влияет на ваш код здесь, обратите внимание, что 'Dim i, k As Integer' означает' Dim i As Variant, k As Integer' –

+0

Можете ли вы дать нам значение companyname? Не более 31 символов, нет? []? * \/"В нем? – KekuSemau

+0

Ассоциированная группа Inc является фирмойName, никаких странных символов в ней. – agagelis

ответ

0

Если запустить этот код более чем один раз, вы получите во время выполнения ошибки 1004, потому что он попытается добавить лист с тем же именем. Все листы должны иметь уникальное имя. Возможно, вам нужно будет добавить проверку, чтобы убедиться, что рабочий лист с именем еще не существует до создания нового листа. Что-то вроде:

companyName = Worksheets("Sheet1").Cells(i, j - 1).Value 
WorksheetExists = False 
For Each Sht In ThisWorkbook.Worksheets 
    If UCase(Sht.Name) = UCase(companyName) Then 
     WorksheetExists = True 
     Exit For 
    End If 
Next Sht 
If WorksheetExists Then Exit Sub 

ThisWorkbook.Sheets.Add after:=Sheets(Worksheets.Count) 
Worksheets(Worksheets.Count).Name = companyName 
0

В дополнение к имени рабочего листа, который не является уникальным, вы также можете получить сообщение об ошибке 1004, если имя листа длиной более 31 символов.
Try делает:
Worksheets(Worksheets.Count).name = Left(companyName, 31)

Смежные вопросы