VBA Superscript Excel - PullRequest
       30

VBA Superscript Excel

0 голосов
/ 09 апреля 2020

Я хочу создать макрос для увеличения номера надстрочного индекса. Если у меня есть ячейка a12 с 12 надстрочными буквами, я бы хотел, чтобы она сделала ее 13. То, что у меня есть в настоящее время, будет делать это только с числами, но не в том случае, если к ней прикреплен текст.

Sub Up_One() 
    ActiveCell.value = ActiveCell.value + 1 
End Sub 

Sub Down_One() 
    ActiveCell.value = ActiveCell.value - 1 
End Sub

1 Ответ

0 голосов
/ 09 апреля 2020

Если вы создаете сноски (так, чтобы ваши верхние индексы были в конце), то, возможно, что-то вроде этого, которое

  • Перебирает символы в ячейке, начиная с конца.
  • Выход из l oop после попадания в символ, не являющийся верхним индексом, в противном случае символы сохраняются во временной переменной.
  • Проверяет, является ли временная переменная числом, и, если да, увеличивается на один.
  • Заменяет старое число новым.
  • Повторно применяет формат верхнего индекса.
Sub IncrementFootnote()

    With ActiveCell
        If .HasFormula Or TypeName(.Value) <> "String" Then Exit Sub

        Application.ScreenUpdating = False

        ' extract superscript text, starting from the end
        Dim i As Long
        For i = .Characters.Count To 1 Step -1
            If .Characters(i, 1).Font.Superscript Then
                Dim temp As String
                temp = .Characters(i, 1).Text & temp
            Else
                Exit For
            End If
        Next

       ' if a number, increment, replace the old number, and superscript
        If IsNumeric(temp) Then
            Dim newNumber
            newNumber = temp + 1

            .Replace temp, newNumber

            Dim pos As Long
            pos = InStrRev(.Value, newNumber)

            .Characters(pos, Len(newNumber)).Font.Superscript = True
        End If
    End With
End Sub

Чтобы вычесть одно, просто измените newNumber = temp + 1 на newNumber = temp - 1.

Обратите внимание, что

If .HasFormula Or TypeName(.Value) <> "String" Then Exit Sub

проверяет, является ли ячейка действительно текстовой, поэтому она пропускает формулы, а также только цифры .

enter image description here

...