Office中国论坛/Access中国论坛

标题: 想学第一个VBA程序 [打印本页]

作者: renyucai1963    时间: 2011-9-7 13:13
标题: 想学第一个VBA程序
请大家教我一个最简单的程序,第一次用。
请帮个忙!
谢谢。
作者: roych    时间: 2011-9-7 20:26
Sub Test()
Msgbox"这是一个最简单的程序"
End Sub

Sub Test2()
Dim i As Long
i = 1
Do Until i > 5
MsgBox "我打算弹5次"
i = i + 1
Loop
End Sub
实际上,应当先了解VB语法,熟悉后程序写起来就方便多了。
作者: renyucai1963    时间: 2011-9-7 21:20
roych 发表于 2011-9-7 20:26
Sub Test()
Msgbox"这是一个最简单的程序"
End Sub

程序运行的非常好,谢谢版主。
请版主帮助看看,这段代码如何用:
假设Field1是数值字段
Field2是文本字段
for i=1 to 1000000
cnn.execute "Insert into aTable (Field1,Field2) VALUES(cstr(i),'项目" & cstr(i) & "')"
next
是把这段代码放在模块里,还是什么地方?请教一教。
谢谢。
作者: roych    时间: 2011-9-8 00:38
可以新建模块放进去再调用。——别忘了加上Sub 函数名()噢。
也可以在写入按钮的单击事件里。
最好在前面定义Dim i As Long,否则很容易因为变量类型未定义而出错。
此外,当然需要把相应的变量改回你的表名称和字段名称。
作者: renyucai1963    时间: 2011-9-8 08:07
非常感谢版主。
作者: renyucai1963    时间: 2011-9-9 13:38
本帖最后由 renyucai1963 于 2011-9-9 13:42 编辑

[attach]46660[/attach][attach]46660[/attach]

Sub REN_A()
For i = 1 To 10
cnn.Execute "Insert into 表1 (字段1) VALUES(cstr(i))"
Next
End Sub
版主,请帮助在看看,出现上面的提示,是那里出了问题,请帮助改一改。
作者: roych    时间: 2011-9-10 18:05
要把变量分离开来写。
Sub REN_A()
For i = 1 To 10
cnn.Execute "Insert into 表1 (字段1) VALUES('" & i & "')"
Next
End Sub
作者: renyucai1963    时间: 2011-9-11 17:11
roych 发表于 2011-9-10 18:05
要把变量分离开来写。
Sub REN_A()
For i = 1 To 10

版主,问题还是提示“要求对象”。
请问那里出了问题。
作者: roych    时间: 2011-9-11 18:38
哦,不好意思,之前复制你的代码时没仔细看。你没有定义数据连接对象。
Sub REN_A()
Dim cnn As New ADODB.Connection
For i = 1 To 10
cnn.Execute "Insert into 表1 (字段1) VALUES('" & i & "')"
Next
End Sub
作者: renyucai1963    时间: 2011-9-12 08:40
本帖最后由 renyucai1963 于 2011-9-12 08:48 编辑

[attach]46667[/attach]
roych 发表于 2011-9-11 18:38
哦,不好意思,之前复制你的代码时没仔细看。你没有定义数据连接对象。
Sub REN_A()
Dim cnn As New ADOD ...


Option Compare Database

Sub REN_A()
Dim cnn As New ADODB.Connection
Dim i As Long
For i = 1 To 10
cnn.Execute "Insert into 表1 (序号) VALUES('" & i & "')"
Next
End Sub
[attach]46666[/attach]
版主,在帮助看看,出现上面对话框,是那里有问题,我上传了附件,如可以的话,帮助修改一下。
谢谢。
作者: roych    时间: 2011-9-12 13:43
噢。大概是没有执行命令的缘故吧。此外,你的附件中序号为数值型,因此需要在原先的基础上去掉单引号。
  1. Sub REN_A()
  2. '定义数据连接
  3. Dim cnn As ADODB.Connection
  4. '定义ADO命令
  5. Dim cmd As New ADODB.Command
  6. Dim i As Long
  7. '设置为当前工程连接
  8. Set cnn = CurrentProject.Connection
  9. For i = 1 To 10
  10. '设置命令文本并执行之。
  11. cmd.CommandText = "Insert into 表1 (序号) VALUES(" & i & ")"
  12. cnn.Execute cmd.CommandText
  13. Next
  14. End Sub
复制代码
用Docmd.RunSQL会更简洁些,以下代码供参考。
  1. Sub REN_A()
  2. DoCmd.SetWarnings False
  3. For i = 1 To 10
  4. DoCmd.RunSQL "Insert into 表1 (序号) VALUES(" & i & ")"
  5. Next
  6. End Sub
复制代码

作者: renyucai1963    时间: 2011-9-13 22:53
roych 发表于 2011-9-12 13:43
噢。大概是没有执行命令的缘故吧。此外,你的附件中序号为数值型,因此需要在原先的基础上去掉单引号。用Do ...

版主,你好。
请问ACCESS里面可有求平均差的函数(STDEV)或者有其他的方法?请讲一讲。
作者: roych    时间: 2011-9-14 16:15
Excel里的部分统计函数,在Access里都有相应的SQL聚合函数,例如标准方差是:StDev ()或者StDevP,详细请在做查询时,右击窗格,点击生成器\函数\内置函数。具体用法则参考帮助文件,在这里不一一列出了。
作者: renyucai1963    时间: 2011-9-14 17:15
roych 发表于 2011-9-14 16:15
Excel里的部分统计函数,在Access里都有相应的SQL聚合函数,例如标准方差是:StDev ()或者StDevP,详细请在 ...

谢谢版主的回答。
作者: renyucai1963    时间: 2011-9-17 11:09
本帖最后由 renyucai1963 于 2011-9-17 11:20 编辑

[attach]46703[/attach]
roych 发表于 2011-9-14 16:15
Excel里的部分统计函数,在Access里都有相应的SQL聚合函数,例如标准方差是:StDev ()或者StDevP,详细请在 ...

[attach]46702[/attach]
版主,标准差按列可以求出。我想按行求出,我是这样设置的。
运行出现对话框:标准表达式数据类型不匹配。
我把标准差的数据类型:单精度,双精度,按个设置也不行,请帮助看看。谢谢。

作者: roych    时间: 2011-9-17 11:24
不是在条件里设置的。是在字段的窗格上输入以下内容:
标准差之方差:StDev([编号])

作者: renyucai1963    时间: 2011-9-17 11:28
本帖最后由 renyucai1963 于 2011-9-17 11:30 编辑

[attach]46706[/attach][attach]46704[/attach]
这是附件

作者: renyucai1963    时间: 2011-9-17 11:33
roych 发表于 2011-9-17 11:24
不是在条件里设置的。是在字段的窗格上输入以下内容:
标准差之方差:StDev([编号])

版主,能否给个截图,费心帮个忙。
作者: renyucai1963    时间: 2011-9-17 11:34
本帖最后由 renyucai1963 于 2011-9-17 11:35 编辑

[attach]46707[/attach]
帮助看看。
作者: roych    时间: 2011-9-17 11:46
表的设计不合理。
首先,Access不是Excel,聚合函数是不能对多个字段进行数据处理的。因此,应当设置为:
编号   组别     数据
1       组别1    1
2       组别1    2
3       组别1    3
4       组别1    4
5       组别1    5
6       组别1    6
7       组别2    2
8       组别2    3
9       组别2    4
10     组别2    5
11     组别2    6
12     组别2    7
…………………………
然后按组别分组,对数据进行标准方差计算。
作者: roych    时间: 2011-9-17 12:08
大体做了一个,详见附件的测试查询。请留意表2和表1的区别。
作者: renyucai1963    时间: 2011-9-18 12:10
Sub shuangseqiu()
DoCmd.SetWarnings False
Dim i As Integer, j As Integer, k As Integer, l As Integer, m As Integer, n As Integer
Dim sum As Integer
Const z = 3
For i = 1 To z
For j = i + 1 To z + 1
For k = j + 1 To z + 2
For l = k + 1 To z + 3
For m = l + 1 To z + 4
For n = m + 1 To z + 5
sum = i + j + k + l + m + n
DoCmd.RunSQL "Insert into 双色球数据库 ( 壹,贰,叁,肆,伍,陆,和值) VALUES(" & i & " ," & j & "," & k & "," & l & "," & m & "," & n & "," & sum & ")"
Next n
Next m
Next l
Next k
Next j
Next i
End Sub
作者: renyucai1963    时间: 2011-9-19 23:11
版主,请问如何把数据库放到U盘上。
作者: renyucai1963    时间: 2011-9-20 16:32
本帖最后由 renyucai1963 于 2011-9-20 16:32 编辑

版主,你好:
我在单位电脑上建了一个ACCESS数据库,我想在家的电脑上操作或查询单位电脑上的数据库,请问如何操作和设置?
请给讲一讲,谢谢。
作者: roych    时间: 2011-9-21 00:22
如果可以访问单位的网络,那么把它存放在共享位置,再建立链接数据库(单击文件\外部数据\链接)即可。
作者: renyucai1963    时间: 2011-9-21 08:32
roych 发表于 2011-9-21 00:22
如果可以访问单位的网络,那么把它存放在共享位置,再建立链接数据库(单击文件\外部数据\链接)即可。

版主,在【我的电脑】有个[共享文档]里边有共享视频、共享图像、共享音乐 是否可以用这个?
因有个隐私问题,只能在自己的电脑上。请指点。谢谢。
作者: roych    时间: 2011-9-21 18:45
系统自带的文件夹并不是共享文件夹,而是该电脑所有用户可以访问的文件夹。

例如A用户登录这台电脑,电脑会自动建议关于A用户的桌面和A用户的“我的文档”。切换成B用户后,同样会进行这样的操作。但是如果A、B用户均是用户权限而不是管理员权限,在域管理里面,A用户将无法访问B用户的桌面和B用户的“我的文档”等。但是,系统自带的“共享文档”则是大家都可以互相访问的位置(跟其它盘符或位置是一样的)。

这个跟我们通常所说的共享文档不是一码事。

我们所说的共享文档,是建立在服务器或者局域网里某个已经打开的电脑上,对指定用户进行了权限分配的文件夹或者文档。因此,这就要求文档所在的电脑和访问的电脑(或者说,服务器和客户端)必须是在同一个网络中。

例如,单位里有四台电脑,通过路由器连接在一起,那么任意一台电脑,建立了一个文件夹,再把属性改为“共享”,其它电脑即可从这个文件夹拷贝到所需的文件。这些文档就是共享文档。

再如,我现在建立一个共享文档,告诉你IP地址,你能不能访问到呢?不能。为什么?因为你不是同一个IP段的,换句话说,我们不是同一个网络的,除非我开通广域网(Internet),并且你还可能需要通过黑客注入等方式,才有可能访问得到。

关于网络知识,你应当买书来看看,或者通过其它方式进行相应的培训。这些已经超出我的解答范围了,也超出这个论坛的解答范围了。
作者: renyucai1963    时间: 2011-9-21 20:26
roych 发表于 2011-9-21 18:45
系统自带的文件夹并不是共享文件夹,而是该电脑所有用户可以访问的文件夹。

例如A用户登录这台电脑,电脑 ...

谢谢版主的耐心解答,耽误了你的时间。
作者: renyucai1963    时间: 2011-9-24 12:34
本帖最后由 renyucai1963 于 2011-9-24 12:44 编辑

版主,你好:
请教个问题:ACCESS数据库是否可以存放576,5760条数据?


[attach]46745[/attach]
作者: roych    时间: 2011-9-24 18:23
理论上对记录条数没限制,我见过最多的是250W左右,——因此500W也未必不可能。但由于文件大小限制在2G左右,记录条数比较多的时候,应当随时压缩数据库。
如果非要保留在一个表的话,个人建议把后台设置为SQL Sever,用Access做前台就是了。此外,拆分成多个数据库,也是可以尝试的一个选择(通过链接表和联合查询,很容易获取到全部信息的)。
作者: renyucai1963    时间: 2011-9-24 19:26
roych 发表于 2011-9-24 18:23
理论上对记录条数没限制,我见过最多的是250W左右,——因此500W也未必不可能。但由于文件大小限制在2G左右 ...

版主,我电脑上有一个SQL SEVER 数据库,是存放单位的东西的,不知是否可以用?
第二个问题:我是否把SQL SEVER数据库建在同桌的电脑上,因为在一个网上,是否可以?
请告知?
谢谢,版主。
作者: 玛瑙绿    时间: 2011-9-29 10:33
哇,大哥,你后面的那个好像一点都不简单啊... 好难...
作者: roych    时间: 2011-9-30 22:17
玛瑙绿 发表于 2011-9-29 10:33
哇,大哥,你后面的那个好像一点都不简单啊... 好难...

不是说我吧?
作者: renyucai1963    时间: 2011-11-13 12:52
本帖最后由 renyucai1963 于 2011-11-13 12:53 编辑

Sub shuangseqiu()
DoCmd.SetWarnings False
Dim i As Integer, j As Integer, k As Integer, l As Integer, m As Integer, n As Integer, o As Integer
Dim sum As Integer
Const z = 28
For i = 1 To z
For j = i + 1 To z + 1
For k = j + 1 To z + 2
For l = k + 1 To z + 3
For m = l + 1 To z + 4
For n = m + 1 To z + 5
For o = 1 To 16
sum = i + j + k + l + m + n
DoCmd.RunSQL "Insert into 表1( 壹,贰,叁,肆,伍,陆,和值,篮球) VALUES(" & i & " ," & j & "," & k & "," & l & "," & m & "," & n & "," & sum & "," & o & ")"
Next o
Next n
Next m
Next l
Next k
Next j
Next i
End Sub
33选6 16选1
作者: renyucai1963    时间: 2012-9-28 09:58
renyucai1963 发表于 2011-11-13 12:52
Sub shuangseqiu()
DoCmd.SetWarnings False
Dim i As Integer, j As Integer, k As Integer, l As Integ ...

[attach]50454[/attach]
作者: renyucai1963    时间: 2012-11-17 20:01
[attach]50681[/attach]





欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3