我不能得到这个工作,我试图计算工作所需的材料基于这些数字,但当我点击计算按钮什么都没有发生,我已经删除并重新创建了按钮和字段,它应该打印到…我试过把第一行代码打印到文本框中……我甚至打开了另一个表单,将它复制到这个表单中,并将我的按钮更改为那个表单,它就工作了……所以按钮没有坏…但是另一个表单上的计算按钮也不会填充那个文本框。我试过括号…我试过将答案传递给不同的文本框…我很困惑……
有一段时间我的方框是LSqFt的,它不会自我修正,所以我想这可能是个问题,但它也不会去其他方框…
Private Sub Calculate1_Click()
Dim Wall1 As Integer, Wall2 As Integer, AStuds1 As Integer, AStuds2 As Integer, Roof1 As Integer, Roof2 As Integer
Dim Frames1 As Integer, Frames2 As Integer, Ptch As Integer, SqFt1 As Integer, LinSF As Integer
Wall1 = ((Nz(H1LX) * 0.75) * 1.15) * Nz(H1Hx)
Wall2 = ((Nz(H2LX) * 0.75) * 1.15) * Nz(H2Hx)
AStuds1 = Nz(H1ASX)
AStuds2 = Nz(H2ASX)
Frames1 = ((Wall1 * 0.05) + Wall1) + AStuds1
Frames2 = ((Wall2 * 0.05) + Wall2) + AStuds2
Ptch = Eval(Pitch)
SqFt1 = SFX
Roof1 = Round((SQ((Ptch) / 12) + 1) * SqFt1)
Roof2 = Roof1 / 2
LinSF = Round((Frames1 + Frames2) + Roof2 + (Wall1 / 2))
LSqFt1 = Wall1
End Sub
首先,您将所有都设置为整数,从而不给小数留下空间。
你可能需要:
Dim Wall1 As Double, Wall2 As Double, ' ... etc.
接下来,您可能需要更具表现力(假设H1Lx等是控件):
Wall1 = Nz(Me!H1LX.Value, 0) * 0.75 * 1.15 * Nz(Me!H1Hx.Value, 0)
第三,尽可能避免使用Eval
。如果您尝试转换英尺/英寸,请参阅我的文章:
高精度转换和格式化英制距离(英尺和英寸)
对于舍入,使用一个更好的函数:
将值向上、向下、四舍五入或四舍五入到有效数字
完整代码在我的仓库GitHub:
VBA。圆的
最后,仔细检查你的秘密函数SQ
。
在我得到你的回应之前,我设法修复了那部分,只是为了意识到我的一些公式是错误的,但我确实通过将一些改为双精度来工作。也实现了一些"x";当时还不存在控制手段。通过将我的LnSqFt更改为每一行,直到我找到一个不能工作的行,并摆弄它直到它工作....我一定要检查这些链接,因为我在表格上还有空白要填,尤其是我有一个非常难的公式来得出正确的答案……我不知道怎么得到它…
Dim Wall1 As Integer, Wall2 As Integer, Ptch As Double, Roof1 As Double, Roof2 As Double, Roof3 As Double, Roof4 As Double
Dim AStuds1 As Integer, AStuds2 As Integer, Frames1 As Integer, Frames2 As Integer, SqFt1 As Integer
Dim LinSF As Integer, EXSht As Integer, RFSht As Integer, StudsH1a As Integer, StudsH2a As Integer
Wall1 = (Nz(H1LX) * 0.75) * Nz(H1H)
Wall2 = (Nz(H2LX) * 0.75) * Nz(H2H)
AStuds1 = Nz(H1ASX)
AStuds2 = Nz(H2ASX)
Frames1 = Wall1 + AStuds1
Frames2 = Wall2 + AStuds2
Ptch = Eval(Pitch)
SqFt1 = SFX
Roof1 = (Ptch * Ptch) + 1
Roof2 = Sqr(Roof1)
Roof3 = Round((Roof2 * SqFt1) + 8)
LinSF = Round((Frames1 + Frames2) + (Roof3 * 0.75))
LnSqFt = LinSF
StudsH1a = Round(Wall1 / H1H) + AStuds1
StudsH2a = Round(Wall2 / H2H) + AStuds2
StudsH1 = StudsH1a & " - 2x4x" & H1H
StudsH2 = StudsH2a & " - 2x4x" & H2H
Concrete = Round(SqFt1 / 52) & " - Yards"
TrueW = TrueW + 2
TrueL = TrueH + 2
eval行总是以小数形式出现,下半部分是12,我需要至少3位小数才能为调用它的其他数学运算得出正确的数字。除了那个数字,我不希望其他数字有小数。实际上,我需要确保其中一些是8号、10号、12号或16号,因为这些是板的尺寸,它应该返回工作所需的材料,而不是实际尺寸……明白了吗?
它所指的形式
最终,这将是一个更大的订单表单的子表单,我希望它传递材料列表…现在我只需要把材料弄对。链接是超级有用的,我将利用这些东西,因为我得到的代码调整。不幸的是,我只使用Access大约2周,所以我的代码到处都是
再次感谢!