Переменные не будут преобразованы в целые числа - PullRequest
1 голос
/ 29 января 2020

В настоящее время возится с макросами в Excel. Тот, который генерирует диапазон, который заполняет 3 столбца клеток 1-9. Другой, который строит эти числа как боевой корабль с x, y и v для значения.

Я получил работающую часть генерации чисел, и я застрял в бите отрисовки.

В настоящее время проблема заключается в том, что я получаю ошибку «13», что означает, что мои переменные не совпадают. Но я использую CInt для преобразования варианта в int. При отладке кажется, что for l oop получает все значения правильно, но не конвертирует.

Вот код, который у меня есть, и скриншот всего этого.

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 ]

2 голосов
/ 29 января 2020

Хм, хорошо, я напомню то, что я упомянул в моих комментариях выше:


"Это застревает в строке Xboard = CInt (Xboardv) с ошибкой "13" "

Вы создаете массив значений с помощью Xboardv = Table.Cells.Value. Размер массива 1 To 15, 1 To 1, и вам нужно использовать эти номера индексов в качестве параметров строк и столбцов, когда вы ссылаетесь на любой элемент массива. Итак, в основном: Xboard = CInt(Xboardv(<X>,<Y>)).

"Это было сделано, но теперь он делает это только для первого значения массива из-за того, что он вызывается как (1,1)"

Это потому, что вы постоянно ссылаетесь на один и тот же элемент. Однако вы уже создали al oop с переменной r. Так что вы можете использовать это для вызова различных элементов: Xboard = CInt(Xboardv(r,1))


Я пренебрег тем фактом, что ваша структура несколько странная, и вы создаете тот же массив в al oop. Так что переместите это за пределы вашего l oop и, возможно, используйте вместо него For R = Lbound(Xboard) to Ubound(Xboard) l oop. И вы можете просто обращаться к значениям, не преобразовывая их тоже.

Кстати, вообще не нужно Integer переменных. Вместо этого используйте Long.

0 голосов
/ 29 января 2020

В чем причина начала преобразования?
В ячейку 'D4' я поместил значение 325 и запустил следующий фрагмент кода:

Dim b As Integer

b = Range("D4").Value

Значение b равно 325, без проблем. Преобразование не требуется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...