Флажки Excel vba Переименование - PullRequest
2 голосов
/ 23 мая 2011

У меня есть лист с множеством флажков.Excel называет их автоматически как CheckBox1, CheckBox2 и т. Д. Однако для моего документа мне нужно переименовать их все в Rij11_1, Rij11_2 и т. Д. (Rij11 - строка 11, _1 - первый флажок в этой строке и т. Д.),Важно, чтобы переименование начиналось с _1 для каждой строки.

Члены Stackoverflow Osknows и Dave DuPlantis уже помогли мне в этом (СПАСИБО ОГРОМНОЕ ЗА ВСЕ ВАШУ ПОМОЩЬ ТАК ЧТО), с этим кодом:

Sub test()  
    Dim obj As OLEObject, ChkBoxRow as long  
    ChkBoxRow = 11   
    With Worksteets("Storia") 
    For Each obj In .OLEObjects     
    If TypeName(obj.Object) = "CheckBox" Then          
        if obj.TopLeftCell.Row = ChkBoxRow then            
            obj.Name = "Rij11_" & Right(obj.Name, 1)         
        end if      
    End If 
    Next obj
    End With
End Sub 

Однако, первый переименованный флажок накаждая строка не начинается с 1 (обычно с 7, по какой-то причине, которая ускользает от меня), и если в строке более 10 флажков, нумерация не выходит за пределы 10. После _9 я получаю _0 вместо _10и затем, после _0, он снова продолжается с _1, что приводит к дублированию имени в строке.

Кто-нибудь может мне помочь с этой проблемой перенумерации?

Большое спасибо!

С уважением, Марк

Ответы [ 2 ]

1 голос
/ 23 сентября 2011

Вот простой способ избавиться от них. Выделите столбец или ячейки, в которых вы хотите снять флажки и связанный текст. Затем обрежьте их, используя CTRL + C, после чего переместите на другой лист, вставьте их. (Этот метод, если, скажем, вы хотите удалить один столбец флажков, но оставить другой, или удалить случайные флажки). Теперь нажмите F5, затем Special, затем Objects (на листе, где вы вставили те для удаления), все они будут выбраны, теперь просто обрежьте их, DONE! :)

0 голосов
/ 23 мая 2011

Проблема связана с Right(obj.Name, 1) во внутреннем операторе If.Переименование только вставляет самый правый символ старого имени объекта в конец нового имени.Попробуйте заменить его следующим:

Right(obj.Name, Len(obj.Name) - 8)

Где 8 - длина "CheckBox".

...