设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 2088|回复: 6
打印 上一主题 下一主题

[VBA编程/宏] 关于计算出错的问题

[复制链接]
跳转到指定楼层
1#
发表于 2008-3-14 12:59:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
Private Sub CommandButton1_Click() '保存
'先进行数据校对,保证数据准确
'TextBox2=TextBox3+TextBox4
Dim nVbResult As VbMsgBoxResult
Dim nTempD(3) As Double
For i = 0 To 3
    nTempD(i) = 0
Next
nTempD(0) = Val(TextBox2.Text)
nTempD(1) = Val(TextBox3.Text)
nTempD(2) = Val(TextBox4.Text)
nTempD(3) = (nTempD(1) + nTempD(2))

If nTempD(0) <> nTempD(3) Then
    nVbResult = MsgBox("数据输入有误,是否要保存?" & Chr(13) & "点击‘是’,保存数据;否则不保存。", vbYesNo + vbInformation, "错误信息")
    If nVbResult = vbNo Then
        TextBox2.SetFocus
        TextBox2.SelStart = 0
        TextBox2.SelLength = Len(TextBox2.Text)
        Exit Sub
    End If
End If
end sub

如上代码(代码已简略)。
为什么在输入某些数据时会出错:如输入
TextBox2.Text=8.569
TextBox3.Text=5.569TextBox4.Text=3

而输入8.568=5.568+3 时,则不会。
以前也没有发生过此类事情。如能解答,不胜感激!
我的是OFFICE2003_sp3版的。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
发表于 2008-3-14 13:57:43 | 只看该作者
这个和你定义数组为Double有关
Private Sub CommandButton1_Click() '保存

Dim nVbResult As VbMsgBoxResult
Dim nTempD  
nTempD = 0

nTempD = Val(TextBox3.Text) + Val(TextBox4.Text)

If TextBox2.Text <> nTempD Then
    nVbResult = MsgBox("数据输入有误,是否要保存?" & Chr(13) & "点击‘是’,保存数据;否则不保存。", vbYesNo + vbInformation, "错误信息")
    If nVbResult = vbNo Then
        TextBox2.SetFocus
        TextBox2.SelStart = 0
        TextBox2.SelLength = Len(TextBox2.Text)
        Exit Sub
    End If
End If
End Sub

[ 本帖最后由 tanhong 于 2008-3-14 13:58 编辑 ]
3#
 楼主| 发表于 2008-3-14 14:15:34 | 只看该作者

不是变量定义问题

不是变量定义问题,实际上本来我没有使用变量,直接是val(textbox2.text) 等,就是发生如上问题,使用变量后还是。真不知是什么原因???以前没有这情况的。
4#
发表于 2008-3-14 14:36:04 | 只看该作者
用我改写的代码试了一下,好象不会了
5#
 楼主| 发表于 2008-3-15 19:03:44 | 只看该作者


好像仍旧不行。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
6#
发表于 2008-3-15 20:49:40 | 只看该作者
Private Sub CommandButton1_Click()
'先进行数据校核,保证数据基本准确
'数据1=数据2+数据3+数据4+数据6
Dim nVbResult As VbMsgBoxResult
'Dim i As Integer
'-------------------------------------------------------------
'Dim nTempD As Double
'变量不应该定义为布尔,而是字符串,这是造成出错的一个原因
Dim nTempD As String
'------------------------------------------------------------
nTempD = 0
nTempD = (Val(TextBox3.Text) + Val(TextBox4.Text) + Val(TextBox5.Text) + Val(TextBox6.Text))
'--------------------------------------------------------------
'If Val(TextBox2.Text) <> nTempD Then
'
'TextBox2文本框因为不用计算,只是进行文本比较所以不用进行转换, _
  这是造成出错的第二的原因,修这两处问题后就可以解决问题
'--------------------------------------------------------------
If TextBox2.Text <> nTempD Then
'Dim nTempD(5) As Double
'For i = 0 To 5
'    nTempD(i) = 0
'Next
'nTempD(0) = Val(TextBox2.Text)
'nTempD(1) = Val(TextBox3.Text)
'nTempD(2) = Val(TextBox4.Text)
'nTempD(3) = Val(TextBox5.Text)
'nTempD(4) = Val(TextBox6.Text)
'nTempD(5) = (nTempD(1) + nTempD(2) + nTempD(3) + nTempD(4))
'
'If nTempD(0) <> nTempD(5) Then
    nVbResult = MsgBox("数据输入有误,是否要保存?" & Chr(13) & "点击‘是’,保存数据;否则不保存。", vbYesNo + vbInformation, "错误信息")
    If nVbResult = vbNo Then
        TextBox2.SetFocus
        TextBox2.SelStart = 0
        TextBox2.SelLength = Len(TextBox2.Text)
        Exit Sub
    End If
End If
'Sheet1.Range("b1").Value = nTempD(0)
'Sheet1.Range("b2").Value = nTempD(1)
'Sheet1.Range("b3").Value = nTempD(2)
'Sheet1.Range("b4").Value = nTempD(3)
'Sheet1.Range("b5").Value = nTempD(4)
'Sheet1.Range("c2").Value = nTempD(5)
Sheet1.Range("b1").Value = Val(TextBox2.Text)
Sheet1.Range("b2").Value = Val(TextBox3.Text)
Sheet1.Range("b3").Value = Val(TextBox4.Text)
Sheet1.Range("b4").Value = Val(TextBox5.Text)
Sheet1.Range("b5").Value = Val(TextBox6.Text)
Sheet1.Range("c2").Value = nTempD
End Sub

修改后成果:
游客,如果您要查看本帖隐藏内容请回复

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
7#
 楼主| 发表于 2008-3-15 22:16:49 | 只看该作者
谢谢版主的指点,原因我已经找到了。
就是数据类型设置时,数据只需单精度,而我设成了双精度。
这单精度与双精度的数据在转换时大概会造成误差,而显示却又正确。
让人一时没有考虑到这方面而无从着手。

再次谢谢版主。以后有机会再请教。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-5-20 23:17 , Processed in 0.084908 second(s), 31 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表