2011-09-08 83 views
0

我需要开发一个模型使用蒙特卡洛协议,将随机开始时间0100和2300.我试图在Microsoft Access中创建此程序,将产生一个随机开始时间以及一个随机活动类型(Transit,Observe,Query)。活动类型不仅应该是随机的,还应该加权(Transit = 0.25,Observe = 0.35,Query = 0.40)。我正在编写程序,以便用户可以按下命令按钮以生成至少有30个随机开始时间和活动类型(即1700 Transit,1500 Query等)的列表的报告。我知道如何在Access中创建一个随机数字生成器,但我很困难,因为我希望用户能够生成多个开始时间和活动类型。例如,我想问一个问题:“你会喜欢多少个开始时间?”和“你想要多少种活动类型?”在文本框中。如果我可以创建用户朋友界面,我也愿意在Excel中进行操作。任何帮助将不胜感激Microsoft Access VB随机生成器

回答

0

Excel或Access ...它对应用程序开发无关紧要,无论如何它都是VBA。问题是:最终会为最终用户提供哪些服务:Excel或Access。我个人从来没有考虑访问的终端用户工具本身(比如没有开发的应用程序了。所以我清楚地宁愿的Excel在这种情况下

所以战略上,你想有一个对话窗口,

  1. 捕捉用户输入
  2. 产生一个或多个组随机数
  3. 呈现结果给终端用户

因此,在Excel或Access中,步骤1,2是完全相同的 - 打开表单编辑器,移动文本字段,选项按钮和命令按钮(对于Access不绑定到表),然后编写代码按钮来创建输出

1

你没有指定你想要的输出,但希望这段代码能让你开始创建随机时间&加权活动的过程。您可以确定用户界面。

Sub CreateRandom() 
    Dim intNumTimesNeeded As Integer 
    Dim y As Integer 
    Dim activity As String 
    Dim StartMinute As Integer 
    Dim FirstTime As Integer 
    Dim EndTime As Integer 
    Dim StartTime As Date 

    FirstTime = 1 * 60 ' first time is 1:00 am 
    EndTime = 23 * 60 ' last time is 11:00 pm 

    intNumTimesNeeded = 10 

    For x = 1 To intNumTimesNeeded 
     Randomize 
     y = Rnd() * 100 
     Select Case y 
      Case Is >= 60 
       activity = "Query" 
      Case Is > 25 
       activity = "Observe" 
      Case Else 
       activity = "Transit" 
     End Select 

     StartMinute = Int((EndTime - FirstTime + 1) * Rnd() + FirstTime) 

     StartTime = DateAdd("n", StartMinute, "01/01/1900") 

     Debug.Print Format(StartTime, "hh:mm") & " - " & activity 
    Next 

End Sub