VBA和私人职能

时间:2009-10-20 20:35:18

标签: excel 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

2 个答案:

答案 0 :(得分:4)

Rnd()始终生成一个介于0和1之间的(十进制)数字。因此,如果您想获得1到6之间的随机数,请尝试使用以下代码替换Select Case行:

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

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

一般来说,公式是

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

答案 1 :(得分: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)

然后你可以看到调试器中随机数是什么