2009-10-20 3 views
2

По какой-то причине ничего не происходит, когда я запускаю этот макрос. Что я могу сделать неправильно?VBA и частные функции

(я пытаюсь заполнить каждую ячейку в диапазоне с произвольно выбранной строки.)

Sub ktr() 

    Dim dataRange As Range 

    Set dataRange = Range("A1:V35") 

    For Each cell In dataRange 
     response = azerothSays() 
     cell.Value = response 
    Next cell 

End Sub 

Private Function azerothSays() 

    Dim result As String 

    Select Case Rnd(6) 
     Case 1 
      result = "CELIBACY" 
     Case 2 
      result = "WORMS" 
     Case 3 
      result = "AGING" 
     Case 4 
      result = "MARRIAGE" 
     Case 5 
      result = "CHEMISTRY" 
     Case 6 
      result = "DISINTIGRATE" 
    End Select 

    azerothSays = result 

End Function 

ответ

4

Rnd() всегда производит (десятичное) число между 0 и 1. Таким образом, если вы хотите чтобы получить случайное число от 1 до 6, попробуйте заменить свою Выбрать строку Case с этим:

Select Case Int((6 * Rnd) + 1) 

«математика часть» находит число между 1 и 6, и Int() преобразует его в целое число.

В общем, формула

Int ((upperbound - lowerbound + 1) * Rnd + lowerbound) 
0

Джон избил меня на комментарий повторно RND, но это не единственная проблема.

Во-первых, это стилистическая проблема. Если у вас есть оператор case case, всегда включайте случай else. В вашем коде это то, что было бы выполнено. Если бы вы перешли через код с помощью отладчика, вы бы видели проблему самостоятельно.

Также для каждой ячейки в диапазоне, похоже, не действует так, как вы хотите. В Excel 2004 вы получите пустое значение назад

Я бы действительно посмотрел примеры в справке Excel. Он имеет один для примера свойств клетки, который показывает, как устанавливать значения в диапазоне.

В этом случае больше похоже (в зависимости от того, какой вариант базы установлен в)

for row = 1 to 21 
    for col = 1 to 35 
     dataRange.Cells(Row, col).Value = azerothSays() 
    next 
next 

Для отладки проще я бы закодированы бит Rando в функции, как

Dim r as integer 
r = Int((6 * Rnd) + 1) 
Select Case (r) 

Тогда вы может видеть, что случайное число находится в отладчике

Смежные вопросы