问题见下面帖子的2楼图片
http://club.excelhome.net/viewthread.php?tid=594375&pid=3987121&page=1&extra=page%3D1
Sub ll()
  Dim D As Double, L As Double, t As Double
  With Sheet1
    D = .Cells(1, 3)
    L = .Cells(2, 3)
    t = .Cells(3, 3)
    temp = a1(D, L, t, 10)
'目标需求,  D, L, t 不要发生变化  
    temp = B1(D, L, t, 10)
'目标需求,  D, L, t 不要发生变化  
  End With
End Sub
''
Function a1(D, L, t, kk)
  D = D / kk
  L = L / kk
  t = t / kk
End Function
''
Function B1(D1, L1, t1, kk)
  D1 = D1 / kk
  L1 = L1 / kk
  t1 = t1 / kk
End Function这种变量传递,D, L, t经过Function传递后,数据发生变化.

解决方案 »

  1.   

    现的解决方法是将其变量作了调整.
    Sub ll()
      Dim D As Double, L As Double, t As Double
      With Sheet1
        D = .Cells(1, 3)
        L = .Cells(2, 3)
        t = .Cells(3, 3)
        temp = a1(D, L, t, 10)
        temp = B1(D, L, t, 10)
      End With
    End SubFunction a1(D, L, t, kk)
      D1 = D / kk
      L1 = L / kk
      t1 = t / kk
    End FunctionFunction B1(D1, L1, t1, kk)
      D = D1 / kk
      L = L1 / kk
      t = t1 / kk
    End Function发此帖的目的是,
    请各位大侠对这类问题,提出几条注意事项.以免这种弱智问题经常发生.
      

  2.   

    看不到图片。
    印象中楼主也不算菜鸟了,可怎么就不知道 ByVal 呢!你 1F 贴出来的代码,Function a1() 和 Function B1() ,不得不说:很垃圾!
      

  3.   

    参数引用用Byval即可。VB默认是传地址。
      

  4.   

    要想达到主贴中所说的‘目的’,有两个方法:①函数不更改的情况下,改变调用方法(但不是最好的):
     temp = a1(byval D, byval L, byval t, 10)
     temp = B1(byval D, byval L, byval t, 10)②改变函数参数的声明(推荐这种方式):
    Function a1(byval D, byval L, byval t, byval kk)
      D = D / kk
      L = L / kk
      t = t / kk
    End FunctionFunction B1(byval D1, byval L1, byval t1, byval kk)
      D1 = D1 / kk
      L1 = L1 / kk
      t1 = t1 / kk
    End Function上面的代码是从楼主那儿复制来改的,我也懒得加“类型声明”了。
    注意变量多数情况下都应该有明确的数据类型
      

  5.   


    嘿,野路子只是根据感觉学-------------
    一直没感觉到Byval的厉害.在编程中全都给省略了.结果出现问题,找了半天原因.以后需要注意ByVal的用法了.
      

  6.   

    你的子程序定义并不能算错(不一定要用byval),但你要懂什么是传值,什么是传地址。Sub ll()
      Dim D As Double, L As Double, t As Double
      With Sheet1
        D = .Cells(1, 3)
        L = .Cells(2, 3)
        t = .Cells(3, 3)
        temp = a1((D), (L), (t), 10)
        temp = B1((D), (L), (t), 10)
      End With
    End SubFunction a1(D, L, t, kk)
      D1 = D / kk
      L1 = L / kk
      t1 = t / kk
    End FunctionFunction B1(D1, L1, t1, kk)
      D = D1 / kk
      L = L1 / kk
      t = t1 / kk
    End Function
      

  7.   

    byval的用法我也需要学习。传递数值还是地址我一直没有搞清楚过