VBA - пользовательские форматы чисел из массивов - ошибка после определенного номера массива - PullRequest
2 голосов
/ 15 марта 2020

У меня проблемы с попыткой выяснить, почему мой код не работает. Позвольте мне сначала вставить его:

Dim n As Integer
Dim List_number As String

Dim arr_number(1 To 26) As Integer
    arr_number(1) = "1"
    arr_number(2) = "2"
    arr_number(3) = "3"
    arr_number(4) = "4"
    arr_number(5) = "5"
    arr_number(6) = "6"
    arr_number(7) = "7"
    arr_number(8) = "8"
    arr_number(9) = "9"
    arr_number(10) = "10"
    arr_number(11) = "11"
    arr_number(12) = "12"
    arr_number(13) = "13"
    arr_number(14) = "14"
    arr_number(15) = "15"
    arr_number(16) = "16"
    arr_number(17) = "17"
    arr_number(18) = "18"
    arr_number(19) = "19"
    arr_number(20) = "20"
    arr_number(21) = "21"
    arr_number(22) = "22"
    arr_number(23) = "23"
    arr_number(24) = "24"
    arr_number(25) = "25"
    arr_number(26) = "26"
    n = 1

List_number = "\" & arr_number(n) & "\._1@"

Dim myformat As String
Dim cell As Range

    For Each cell In Selection
        List_number = "\" & arr_number(n) & "\._1@"
        myformat = List_number
        cell.NumberFormat = myformat

        n = n + 1

    Next cell

Что я пытаюсь добиться с помощью этого кода, так это создать какой-то простой список в Excel, изменив пользовательский формат с «cell.value» на «myformat.cell». .ценность". Пожалуйста, посмотрите на экран ниже:

enter image description here

Мой код добавляет число, точку и пробел перед каждым значением ячейки. Он отлично работает для первых 9 ячеек, но я понятия не имею, почему он дает ошибку в 10-й ячейке: «Ошибка времени выполнения» 1004 «Невозможно установить свойство NumberFormat Range Class».

Странное поведение что, когда я вводю буквы в свой массив, он прекрасно работает, но с числами это не так: (

Я пробовал несколько вещей (например, пытался разделить мое значение «10» из массива на две отдельные части, например «1» и «0»), но после нескольких часов безуспешных попыток я сдался.

У меня есть два вопроса: 1) Кто-нибудь знает, почему появляется эта ошибка и как ее обойти, чтобы продолжить с моим макросом? 2) Есть ли способ присвоить значения массивам без необходимости вводить каждую строку отдельно? Как для числа, так и для пользовательских символов, таких как буквы или знаки?

Заранее благодарим за помощь!

1 Ответ

4 голосов
/ 15 марта 2020

Попробуйте это. Используется другой числовой формат: "1." @

Sub Kowalski()
    Dim f
    f = [char(34)&row(1:999)&"."&char(34)&" @"]
    Selection.NumberFormat = f
End Sub

Как это работает:

Dim f создает переменную варианта.

В следующей строке используется метод оценки Excel. Обозначается квадратными скобками для создания двумерного массива из 999 строк, которые будут служить числовыми форматами. Эта строка также присваивает этому массиву f.

Последняя строка присваивает в одном go массив отдельных числовых форматов для текущего выбора диапазона на листе.

f массив выглядит так:

f(1,1) = "1." @
f(2,1) = "2." @
f(3,1) = "3." @
f(4,1) = "4." @
f(5,1) = "5." @
.
.
.
f(999,1) = "999." @
...