【问题标题】:VBA - custom number formats from arrays - error after certain array numberVBA - 来自数组的自定义数字格式 - 特定数组编号后的错误
【发布时间】:2020-06-26 22:49:49
【问题描述】:

我无法弄清楚为什么我的代码不起作用。我先贴一下吧:

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.value”。请看下面的屏幕:

我的代码是在每个单元格值之前添加数字、点和空格。它适用于前 9 个单元格,但我不知道为什么它在第 10 个单元格处出现错误:“运行时错误 '1004' 无法设置 Range 类的 NumberFormat 属性”。

奇怪的行为是,当我在数组中输入字母时效果很好,但是对于数字,它就不行了:(

我尝试了多种方法(例如,尝试将数组中的“10”值拆分为两个单独的部分,例如“1”和“0”),但在几个小时没有成功后,我放弃了。

我有两个问题: 1)有谁知道为什么会弹出这个错误,我怎样才能绕过它继续我的宏? 2)有没有什么方法可以给数组赋值而不需要单独输入每一行?数字和自定义字符,如字母或符号?

提前感谢您的帮助!

【问题讨论】:

  • @Gary'sStudent 我已经尝试删除一些格式,但没有那么多......这不是原因。即使我在完全“新鲜”的工作簿上尝试,也会出现问题。
  • Excel 告诉我们 \10\._@ 不是有效格式!
  • @ExcelHero 它不一定是数字格式,我只是认为使用它们是明智的,就好像单元格(字符串)的值改变了,格式仍然存在。您认为使用公式并将公式结果作为字符串存储在单元格中会更好吗?
  • 视情况而定。是否希望最终结果显示在与原始数据完全相同的范围内?还是可以使用新范围内的公式并将原始未更改的数据保留在原始范围内并将结果保留在新范围内?
  • 我想用新值完全代替旧值。如果值在 A1:A10 范围内,则新的“列出”值应在同一范围内......我不明白为什么 Excel 不允许我将数组中的“10”放入数字格式......我试图使用格式 \1\0... 而不是 \10 但它不起作用...

标签: arrays excel vba number-formatting


【解决方案1】:

试试这个。它使用不同的数字格式:"1." @

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

这是如何工作的:

Dim f 创建一个变体变量。

下一行使用方括号表示的 Excel 的 Evaluate 方法创建一个包含 999 个字符串的二维数组,该数组将用作数字格式。这一行还将该数组分配给f

最后一行将一组单独的数字格式一次性分配给您在工作表上的当前范围选择。

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." @

【讨论】:

  • 它有效,谢谢!我已将您的帖子标记为答案。还有一个问题——是否有任何快速或简单的方法可以将许多值存储在一个数组中?例如,我想在一个数组中存储 50 个不同的字母组合(字符串)。我想在代码中分配它们 - 我需要重复“arr(1) = xxx”50 次还是有更简单的方法可以做到这一点?或者如果不是更容易,那么在代码中看起来“更干净”?
  • 是的,您可以使用循环。或者更简单的是,我在答案中将 999 个不同的字符串存储在一个数组中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多