2009-10-20 21 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

賽第一輪()總是產生在0和1之間(十進制)號碼所以,如果你想得到一個隨機數從1到6,嘗試用這個替換您選擇案例線:

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

的「數學部分」發現1和6之間的數字,和Int()將其轉換爲整數。

一般來說,公式爲

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

約翰打我重新RND的評論,但不是唯一的問題。

首先是一個風格問題。如果你有一個選擇案例陳述,總是包括一個案例。在你的代碼中,這是執行的內容。如果您使用調試程序逐步完成代碼,您會發現自己的問題。

此外,對於範圍內的每個單元似乎並不像您希望的那樣。在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) 

然後你可以看到調試器中的隨機數字是什麼