关键词不能为空

当前您在: 主页 > 英语 >

VBA随机数源码汇总

作者:高考题库网
来源:https://www.bjmy2z.cn/gaokao
2021-02-28 08:36
tags:

-

2021年2月28日发(作者:dream什么意思)






(defun rnd(rMin rMax)



(vla-eval (vlax-get-acad-object)





)



(+ rMin(* (getvar



)




;;;(setq ArgLst ’(



;;;



;;;


用法:


(MsgBox Arglst)



(defun Msgbox(ArgLst / Msg Style Title Helpfn Ctxt)



(mapcar ’set (list ’Msg ’Style ’Title ’Helpfn ’Ctxt) ArgLst)



(vla-eval (vlax-get-acad-object)



(strcat



Msg



(if Style (strcat



(if Title (strcat



(if Helpfn (strcat



(if Ctxt (strcat





)



(getvar



)




(defun StrConv(Str conv)



(vla-eval (vlax-get-acad-object)



(strcat



)



(getvar



)




;| (X-vbfun typ vbfun) =


运行简 单的


vb


函数


- v1.0 b ----------


梦断江南


.2004.9



参数


: typ




函数返回值的

vb


类型


.



vbfun =


简单的


vb


函数


.



返回


:


设置于




变量中的值


.



实例


:(x-vbfun



variant



(rnd)) ;


出错


.


显示设置系统变量出错


.!!



(x-vbfun



double



(rnd)) ;->0.533424 :


取得随机数


.ok



(x-vbfun



integer



(msgbox(



x-vbfun


;;->


6.0

< br>:


显示信息框,参数详


vb


函< /p>


数参考


.ok.



(x-vbfun



single



(msgbox(


出错


.


显示设置系统变量出错


.!!



要点


: typ


必须于



vbfun


返回值类型相一致


!!!



参考


: /forum/?s=&threadid=259492



|;



(DEFUN X-vbfun (typ vbfun / typlst)



(setq


typlst


’((


.



.



YTE


.



.




(


.



.



.



.



.




(vla-eval (vlax-get-acad-object)



(strcat



(cdr(assoc (strcase (vl-symbol-name typ)) typlst))





(vl-prin1-to-string vbfun)





)



)



(getvar



)



< /p>


提醒一点,好像都没有想过把


User


系 列变量还原,?




好像用

< p>
Users1



5


要好些 吧?




Msgbox


用下面的代替,也可以




(vlax-invoke-method


(vlax-create-object





7



This


Question:



实际上



的功能也很强大,







发现一个办法,可以不用传递系统变量了




(setq a (vlax-create-Object



(vlax-put-property a



(vla-eval a




前面的




(setq a (vla-GetInterfaceObject (vlax- get-acad-object)



(vlax-put- property a



只运行一次





你应该只运行




(vla-eval a



VB


的随机数是“伪随机数”







< br>VB


的随机数,也是通过一种算法进行运算的,每一次的数的顺序都一样




你可以把




(setq a (vla- GetInterfaceObject (vlax-get-acad-object)



(vlax-put-property a




放在启动时加载




调用时运行


(vla-eval a


即可




< /p>


例,在



文件里加入




(setq Tls-VBScript (vlax- create-Object



(vlax-put- property Tls-VBScript




(defun Rnd() (vla-eval Tls-VBScript




嗯,的确可以了:





另外,



已经 有实例。那么



对象如何取得?




如果用



(setq a (vla-GetInterfaceObject (vlax- get-acad-object)



(vla-eval a


可以,但是


(vla-eval a

却又不行了,


why






(vla- GetInterfaceObject (vlax-get-acad-object)


可以获得




另外,


(setq a (vla- GetInterfaceObject (vlax-get-acad-object)

< br>总容易引起内存不


足的错误,好像


(setq a (vlax-create-Object


不会,没有过多的测试,

< br>:






对于没有返回值的过程要调用


Scr iptControl


对象的


ExecuteStatemen t


方法




不 过对于


Randomize


好像没什么用,

Randomize


作用于过程,如果做出来了的话,调用


Randomize



Rnd


是两个过 程,没有效果




< br>另外,我上面的方法有问题,


ScriptControl


对象不能做全局变量,只能做局部变量,否则总


会引起内存不足(太大了)

< p>


Rnd


不能用这种方法,其他的可以

< p>




下面做成函数调用


VBS


函数




调用格式:




(tls-


eval ’msgbox ’(




(defun tls- vbs()



(setq Tls-VBScript (vlax-create-Object



(vlax- put-property Tls-VBScript



Tls-VBScript



)



(defun tls-join(chrs fchr / pstr)



(setq pstr



(foreach i Chrs (setq pstr (strcat pstr i fchr)))



(substr pstr 1 (- (strlen pstr) (strlen fchr)))



)



(defun tls-eval(funname args)



(vla-eval (tls-vbs) (strcat (vl-prin1-to-string funname)


join (mapcar ’vl


-prin1-to-string args)




)






*** ************************************************** **************************


************* ************************************************** ****************


****************


********************************************* **********************************


***** ************************************************** ************************


*************** *












Label


标签中随机产生


1-80


的数,用空格来控制随机数的停止与 开始。谢谢了


!






Private




Sub




Form_KeyPress(KeyAscii




As




Integer)















ize















If




KeyAscii




=




32




Then























n




=




Int(Rnd()




*




80




+




1)















End




If







End




Sub












Private




Sub




Form_Load()















view




=




True







End




Sub





Public




IsRnd




As




Boolean












Private




Sub




Form_KeyPress(KeyAscii




As




Integer)















If




KeyAscii




=




32




Then























IsRnd




=




Not




IsRnd















End




If















If




IsRnd




Then























d




=




True















Else























d




=




False















End




If







End




Sub












Private




Sub




Form_Load()















IsRnd




=




False















d




=




False







End




Sub












Private




Sub




Timer1_Timer()















n




=




Int(Rnd()




*




80




+




1)







End




Sub












以上是 我做的,这里有一个


timer


控件






*** ************************************************** **************************


************* ************************************************** ****************


****************


********************************************* **********************************


***** ************************************************** ************************


*************** *




vb


随机数排序问题






vb


随机数排序问题



1.


随机产生


10



[1,100]


的自然数


.

这是个数要显示在


label





2.


对这是个数进行排序

< p>
,


排序结果显示在另一个


label





3.


把排序结果存入到文件中



(



output


语 句的那个


).





第一个我做了一下


,


就是显示在


label


里的时候就只能显示一个数字了


.


如果用


print

< br>语句在


form


上显示就可以显示


10



.


第一步的代码是这样滴


.



Dim a(1 To 10) As Integer



Randomize



For i = 1 To 10



a(i) = Int(Rnd * 100 + 1)



Print a(i)



Next i




而且



倒数第一行和第二行语句我觉得应该顺序应该是先是


next i


然后



print a(i)


可是一换过



,


就 出错说下标越界


.




我很困惑


....



要是你也不明白我后面说的什么


,


就帮我重做一下吧< /p>


!!




== ================================================== ===========================


============ ================================



新建



Form1 ,


添加



Label1 , Label2




Command1 ,


复制以下代码:




Private Sub Command1_Click()



Form_Load



Dim a(1 To 10) As Integer, m As Integer



Randomize



For i = 1 To 10



a(i) = Int(Rnd * 100 + 1)



n = n +



Next i



x = MsgBox(


单击“是” 选择升序


,


单击“否”选择降序


.


排序




If x = vbYes Then



m = 100



n =


排序结果

< br>(


升序


):



For j = 1 To 10



For i = 1 To 10



If a(i) <= m Then m = a(i)



Next i



For i = 1 To 10



If a(i) = m Then



n = n +



a(i) = 1000



End If



Next i



m = 100



Next j



Else



m = 1



n =


排序结果


(


降序


):



For j = 1 To 10



For i = 1 To 10



If a(i) >= m Then m = a(i)



Next i



For i = 1 To 10



If a(i) = m Then



n = n +



a(i) = 0



End If



Next i



m = 1



Next j



End If



Open



Write #1, n



Close #1



MsgBox


结果已经输出到



c: .


结果




End Sub




Public Sub Form_Load()



ze = True



ze = True



n =


自然数


:



n =


排序结果


:



n =



End Sub






***************************************** **************************************


* ************************************************** ****************************


*********** *****


********************************* **********************************************


******************************************* ************************************


*** *************


现数据库中有一表记录了姓名


,


卡号两个记录


,


请问如何实现从数据库 中取出所有的记录


,



过按下按钮


command1



,

随机在这些记录中抽取其中一条记录并显




将所有记录读取到一个数组或者一个集合中,


找出最大记录数,


然后用随机数生成一个这个


0


和最大数之间的一个< /p>


ID


,安这个


ID


从数组或集合中取出就可以了





type




tRecord















Name




as




string















Code




as




Long







end




type












Private




Sub




Command2_Click()















dim




gRecord()




as




tRecord















dim




Index




as




Long























dim




oRecord




as




tRecord









-


-


-


-


-


-


-


-



本文更新与2021-02-28 08:36,由作者提供,不代表本网站立场,转载请注明出处:https://www.bjmy2z.cn/gaokao/679931.html

VBA随机数源码汇总的相关文章