2009-10-20 4 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 사이 (10 진수) 수를 생산하고, 당신이 원하는 경우 1에서 6까지 임의의 숫자를 얻기 위해,이 당신의 선택 사례 라인을 교체하려고 :

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

은 "수학 부분은"1과 6 사이의 숫자를 찾아 내고, 지능() 정수로 변환합니다. 일반적으로

는 공식은 요한이 RND 다시 주석으로 날 이길

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

입니다하지만 유일한 문제가되지 않습니다.

첫 번째는 문체 문제입니다. select case 문을 사용하는 경우 항상 다른 case가 포함됩니다. 당신이 코드에서 이것을 실행했을 것입니다. 디버거를 사용하여 코드를 밟은 경우 직접 문제를 보았을 것입니다.

또한 범위 내의 각 셀에 대해 원하는대로 작동하지 않는 것 같습니다. Excel 2004에서는 빈 값을 반환합니다.

Excel 도움말의 예제를 실제로 보겠습니다. 범위에 값을 설정하는 방법을 보여주는 셀 속성 예제에 대한 예제가 있습니다. 더 나는 그런

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

로 함수의 란도 비트를 코딩 한 것입니다 디버깅을 쉽게하려면

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

을 (로 설정되어 어떤 옵션 기준에 따라)와 같은이 경우

당신 디버거에서 난수가 무엇인지 볼 수 있습니다.