VBA和私有函数

出于某种原因,当我运行这个macros时没有任何反应。 我可能会做错什么?

(我想用随机select的string填充范围内的每个单元格。)

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 

Rnd()总是产生一个介于0和1之间的(十进制)数字。所以,如果你想得到一个从1到6的随机数,可以尝试用下面的代替你的Select Case行:

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

“math部分”find1到6之间的数字,Int()将其转换为整数。

一般来说,公式是

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

约翰打败了我对RND的评论,但这不是唯一的问题。

首先是一个风格问题。 如果你有一个select案例陈述总是包括一个案件。 在你的代码中,这是执行的内容。 如果你用debugging器遍历代码,你会看到自己的问题。

对于范围内的每个单元格,似乎也不像您希望的那样工作。 在Excel 2004中,你会得到一个空的值

我真的会看看Excel帮助中的例子。 它有一个单元格属性的例子,说明如何设置范围内的值。

在这种情况下更像(取决于什么选项基地设置)

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

为了使debugging更容易,我将在函数中编码rando位

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

然后你可以看到在debugging器中的随机数字是什么