目前正在搞乱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
最佳答案
嗯,好吧,我将回顾一下我在上面的评论中提到的内容:
"It is getting stuck on the Xboard = CInt(Xboardv) line with the error "13""
您正在使用
Xboardv = Table.Cells.Value
创建一个值数组.数组大小为 1 To 15, 1 To 1
当您引用数组中的任何元素时,您需要使用这些索引号作为行和列参数。所以基本上:Xboard = CInt(Xboardv(<X>,<Y>))
."That did it but now it only does it for the first value of the array due to it being called out as (1,1)"
那是因为你一直在引用同一个元素。但是,您使用
r
创建了一个循环。变量已经存在。所以你可以用它来调用不同的元素:Xboard = CInt(Xboardv(r,1))
我忽略了这样一个事实,即您的结构有些奇怪,并且您正在循环中创建相同的数组。所以把它移到你的循环之外,并可能使用
For R = Lbound(Xboard) to Ubound(Xboard)
而是循环。而且您可以只处理值而不必转换它们。顺便说一句,不需要
Integer
变量。使用Long
反而。
关于excel - 变量不会转换为整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59971449/