Сброс счетчика кнопок, чтобы он снова начинался с кнопки 1 после удаления всех кнопок - PullRequest
0 голосов
/ 11 октября 2019

Я вставил следующие три buttons в свою электронную таблицу Excel:

enter image description here

Я использую немецкую версию Excel: Schaltfläche= Кнопка

Как видите, buttons подсчитывается 1,2,3, и каждый дополнительный button получит следующий более высокий счетчик.

Теперь я запускаюследующий VBA для удаления всех buttons:

Sub Delete_Buttons()
Sheet1.Select
Sheet1.Buttons.Delete
End Sub

После запуска этого VBA я снова вставляю buttons:

enter image description here

Как видите, счет buttons начинается с 3.

Как я могу сбросить счетчик кнопок и снова сделать счет, начинающийся с 1?

Ответы [ 2 ]

0 голосов
/ 11 октября 2019

Вы также можете использовать:

Sub create_new()

    Dim counter As Long, MaxValue As Long, i As Long
    Dim btn As Button, btnNew As Button
    Dim FullBtnName As String

    counter = 3
    MaxValue = 0
    'You could change sheet name
    With ThisWorkbook.Worksheets("Sheet1")
        'Loop all butons in the sheet
        For Each btn In .Buttons
            'Split the name to get its number
            FullBtnName = btn.Name

            If CInt(Split(FullBtnName, " ")(1)) > MaxValue Then
                'Get the max number
                MaxValue = CInt(Split(FullBtnName, " ")(1))
            End If

        Next btn
        'Loop 3 times to create 3 shhets
        For i = 1 To 3

            Set btnNew = .Buttons.Add(.Range("A" & i + 5).Left, .Range("A" & i + 5).Top, .Range("A" & i + 5).Width, .Range("A" & i + 5).Height)
            'Change button name & caption
            With btnNew
                .Caption = "Button " & MaxValue + i
                .Name = "Button" & MaxValue + i
            End With

        Next i

    End With

End Sub
0 голосов
/ 11 октября 2019

или вы можете использовать подпрограмму, которая "упорядочивает" текст кнопок по их Left свойству

, в этом примере используется SortedList объект

Sub Rename_Buttons()        
    With CreateObject("System.Collections.SortedList")

        Dim btn As Button
        For Each btn In Sheet1.Buttons
            .Add btn.Left, btn
        Next

        Dim j As Long
        For j = 0 To .Count - 1
            .GetValueList()(j).Text = "Button" & j + 1
        Next

    End With
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...