2015-01-22 3 views
0

Я пытаюсь назвать ячейки макросом в Excel. Вот код:Vba не могу назвать ячейку в макросе

Sub setHeader() 

    Dim Wb As Workbook 
    Dim Ws As Worksheet 
    Dim Cell As Range 

    Dim i As Integer 
    Dim j As Integer 
    Dim k As Integer 
    Dim l As Integer 
    i = 0 
    j = 0 
    k = 0 
    l = 0 

    Dim MyColumnRange As Range 
    Dim MyRowRange As Range 
    Dim MyCellRange As Range 
    Set MyColumnRange = ActiveSheet.Range("E7:V8") 
    Set MyRowRange = ActiveSheet.Range("B10:B16") 
    Set MyCellRange = ActiveSheet.Range("E10:V16") 

    Dim MyColumnName As String 
    Dim MyRowName As String 
    Dim MyCellName As String 
    MyColumnName = "HC_" 
    MyRowName = "HL_" 
    MyCellName = "?" 

    For Each Cell In MyRowRange 
     Cell.Name = MyRowName + CStr(j) 
     j = j + 1 
    Next Cell 

    For Each Cell In MyColumnRange 
     If Not IsEmpty(Cell.Value) Then 
     Cell.Name = MyColumnName + CStr(i) 
     i = i + 1 
     End If 
    Next Cell 

    For Each Cell In MyCellRange 
      Cell.Name = MyRowName + CStr(k) + MyCellName + MyColumnName + CStr(l) 
      If l = (MyCellRange.Columns.Count - 1) Then 
       l = 0 
       k = k + 1 
      Else    
       l = l + 1 
      End If 
    Next Cell 
End Sub 

Я хорошо работает для именования в MyColumnRange и MyCellRange, но MyRowRange У меня есть ошибка

«имя метода диапазона объекта не удалось»

и я не понимаю, почему.

ответ

0

При именовании клеток в MyRowRange:

For Each Cell In MyRowRange 
    Cell.Name = MyRowName + CStr(i) 
    j = j + 1 
Next Cell 

Вы именование их с вашим ужасно по имени переменной i но вы Инкрементирование ужасны по имени переменной j. Возможно, вы имели в виду Cell.Name = MyRowName + Cstr(j)

+0

Да, действительно, я редактирую свой пост. – user2501228

+0

Зафиксирует ли это ошибку или все еще бросает «Имя метода для диапазона объектов не удалось»? – JNevill

+0

Я не исправляю ошибку :( – user2501228

0

так, вы на самом деле не нужно преобразовать в строку, попробуйте использовать & вместо + как в этом примере:

For j = 1 to MyRowRange.cells.count 
    MyRowRange.cells(j).Name = MyRowName & j 
Next j 

я изменил ваше для каждого цикла (которым штраф), просто для примера другого способа сделать это ...

+0

Спасибо, я запомню это. :) – user2501228

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