变量不会转换为整数

时间:2020-01-29 16:24:30

标签: excel vba

当前在excel中搞乱宏。产生一个范围的区域,以1-9填充3列单元格。 另一个绘制这些数字的图形就像战斗舰,x,y和v为值。

我已经使数字生成部分正常工作,并且卡在绘图位上。

当前的问题是我得到一个错误“ 13”,这意味着我的变量不匹配。 但是我正在使用CInt将变体转换为int。 调试似乎在for循环中正确地获取了所有值,但只是没有进行转换。

这是我到目前为止的代码以及整个过程的屏幕截图。

enter image description here

Sub random()
Dim MyRange As Range
Dim c As Integer, r As Integer
Set MyRange = Workbooks("test random gen").Sheets("Sheet1").Range("G16:I30")
For c = 1 To MyRange.Columns.Count
For r = 1 To MyRange.Rows.Count
Randomize
MyRange.Cells(r, c) = Int((9 - 1 + 1) * Rnd + 1)
Next r
Next c
End Sub

Sub Button6_Click()
Dim Board As Range
Dim Table As Range
Dim c As Integer, r As Integer
Dim Xboard As Integer, Yboard As Integer, Vboard As Integer
Dim Xboardv As Variant, Yboardv As Variant, Vboardv As Variant

Set Table = Workbooks("test random gen").Sheets("Sheet1").Range("G16:G30")
Set Board = Workbooks("test random gen").Sheets("Sheet1").Range("M16:U24")

For r = 1 To Table.Rows.Count
    Xboardv = Table.Cells.Value
    Yboardv = Table.Cells.Offset(columnOffset:=1).Value
    Vboardv = Table.Cells.Offset(columnOffset:=2).Value

    Xboard = CInt(Xboardv)
    Yboard = CInt(Yboardv)
    Vboard = CInt(Vboardv)

    Board.Cells(Xboard, Yboard).Value = (Vboard)

Next r

End Sub

2 个答案:

答案 0 :(得分:2)

嗯,我要回顾一下我在上面的评论中提到的内容:


“它被卡在Xboard = CInt(Xboardv)行上,错误为” 13“”

您正在使用Xboardv = Table.Cells.Value创建一个值数组。数组的大小为1 To 15, 1 To 1,在引用数组中的任何元素时,都需要将这些索引号用作行和列参数。基本上就是Xboard = CInt(Xboardv(<X>,<Y>))

“这样做了,但现在只对数组的第一个值执行了,因为它被称为(1,1)”

那是因为您经常引用相同的元素。但是,您已经使用r变量allready创建了一个循环。因此,您可以使用它来调用不同的元素:Xboard = CInt(Xboardv(r,1))


我忽略了一个事实,即您的结构有些奇怪,并且您正在循环中创建相同的数组。因此,请将其移出循环,并可能使用For R = Lbound(Xboard) to Ubound(Xboard)循环。而且,您只需寻址值即可,而不必也进行转换。

顺便说一句,根本不需要Integer变量。请改用Long

答案 1 :(得分:0)

进行转换的原因是什么?
在单元格“ D4”中,我输入了值325,然后运行以下代码:

Dim b As Integer

b = Range("D4").Value

b为325,没问题。无需转换。