(注:本块代码,想实现的目的是: 在一石大小的印刷面积内,能最大数量的印刷个数用PrintMax计出,然后把PrintMax用来计算一个txtqty文本框内输入的数值共需要多少石,并用PrintDan计出,然后根本所计出的PrintDan所在区间,求出最终的印刷成本。)之前有请教过另外一段程式的错误原因,是因为变量的申明Single 及Double错误,在大胡子,老驴等朋友的指点下得以解决,此段代码我也以同样的思路去找错,并将变量均申明为Double,但是运行结果是:得到的是空值?
'part2 求印刷成本Dim PVCPrint(3) As Double, PrintDan As Double, PrintMax As Double, PrintCost As Double
'PVCPrint(3)及PrintMAX是一石能印刷的数量, PrintDan是订单数量所印刷的石数,PrintCost是单个产品的印刷成本PVCPrint(0) = (Int(33 / (H + 0.6)) * Int(45 / (W + 0.7)))
PVCPrint(1) = (Int(33 / (H + 0.7)) * Int(45 / (W + 0.6)))
PVCPrint(2) = (Int(33 / (W + 0.6)) * Int(45 / (H + 0.7)))
PVCPrint(3) = (Int(33 / (W + 0.7)) * Int(45 / (H + 0.6)))  PrintMax = PVCPrint(0)
  For i = 0 To 3 Step 1
  If PVCPrint(i) > PrintMax Then
  PrintMax = PVCPrint(i)
  
  End If
  Next i
  
  PrintDan = Val(txtqty.Text) / PrintMax
  
  If 0 < PrintDan <= 200 Then
  PrintCost = 500 / Val(txtqty.Text)
  
  ElseIf 200 < PrintDan <= 600 Then
  PrintCost = 600 / Val(txtqty.Text)
  
  ElseIf 600 < PrintDan <= 1000 Then
  PrintCost = 800 / Val(txtqty.Text)
  
  ElseIf 1000 < PrintDan <= 1500 Then
  PrintCost = 1200 / Val(txtqty.Text)
  
  ElseIf 1500 < PrintDan <= 3000 Then
  PrintCost = 150 / Val(txtqty.Text)
  
  ElseIf 3000 < PrintDan <= 10000 Then
  PrintCost = 0.5 / PrintMax
  
  Else
  
  PrintCost = 0.4 / PrintMax
  MsgBox "印刷成本为:" & PrintCost
  
  End If

解决方案 »

  1.   

    为什么都取整,改下
    PVCPrint(0) = 33 / (H + 0.6) * 45 / (W + 0.7) 
    PVCPrint(1) = 33 / (H + 0.7) * 45 / (W + 0.6) 
    PVCPrint(2) = 33 / (W + 0.6) * 45 / (H + 0.7)
    PVCPrint(3) = 33 / (W + 0.7) * 45 / (H + 0.6)
    可能你的代码有on error resume next 掩盖了报错,注释了再运行就知道了
      

  2.   

    都取整是因为:我只需要整数,如果不取整,到下一步的运算成本就会严重不准确。同时,我没有用错误处理代码,在运行时这一区块的程序根本就不执行或执行过结果也为空值,现在Degbug及程序调试功能我还没自学到,现在正在加快步子。
      

  3.   

    有可能PVCPrint(i)几个值为0吧,不知道H和W都是什么
      

  4.   

    1) W 或 H 比较大时,PVCPrint 会变成 0,PrintMax 可能为 0
    2) Val(txtqty.Text) 为 0 或负数的情况没考虑
    3) MsgBox 应该在 End If 后面
      

  5.   

    感谢孤独剑及VB老鸟一)H及W分别是输入要求的长及宽;
    二)PVCPrint及PrintMax如果较大会导致结果为0这点没考虑到,所以这是一个问题,我已经补充;
    三)Val(txtqty.Text)为0或负数的情况没有考虑进去,这也是不足之处,已经补充;
    四)MsgBox应该在End if 后面,这是语序错误,也是导致我运行无结果的最关键错误!再次感谢两位朋友的指点!工作顺利!