当前在excel中搞乱宏。产生一个范围的区域,以1-9填充3列单元格。 另一个绘制这些数字的图形就像战斗舰,x,y和v为值。
我已经使数字生成部分正常工作,并且卡在绘图位上。
当前的问题是我得到一个错误“ 13”,这意味着我的变量不匹配。
但是我正在使用CInt
将变体转换为int
。
调试似乎在for循环中正确地获取了所有值,但只是没有进行转换。
这是我到目前为止的代码以及整个过程的屏幕截图。
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
答案 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,没问题。无需转换。