【问题标题】:Call function/Sub in code vba在代码 vba 中调用函数/子
【发布时间】:2016-08-03 15:40:28
【问题描述】:

我在 VBA 中编写了一个代码,它从工作簿中获取值并将它们复制到另一个工作簿。因此,例如在单元格 G20 中,我将有 45 678 然后代码将这个数字四舍五入为 46 000,然后我需要一个函数来删除最后 3 个数字,如果数字足够大,则使用下面提供的 If 语句。 我认为内容是正确的,但我认为我称其为正确的方式。

DSA.Worksheets(1).Range("G10").Value = Application.WorksheetFunction.Round(tax_declaration.Worksheets(1)Range("I72").Value, -3)
DSA.Worksheets(1).Range("G11").Value = Application.WorksheetFunction.Round(Val(Application.WorksheetFunction.Sum(Range("I25:I27"))), -3)

Call thousand(DSA.Worksheets(1).Range("G10"))

End Sub

Sub thousand(i As Variant)

If Right(i, 3) = "000" Then
  i = Left(i, Len(i) - 3)
End If

End Sub`

如何创建像我的 If 语句这样的函数,并使用它来循环遍历我的所有 'DSA.Worksheets(1)Ranges' ? - 我有几个。

提前致谢!

【问题讨论】:

  • 你是什么意思 - 遍历所有工作表?还是在同一个工作表中循环多个范围?
  • 我的意思是在同一个工作表中循环遍历多个范围,如果不清楚,抱歉!

标签: excel vba rounding truncate


【解决方案1】:

我不完全确定你的意思,但不是 sub 只是使用一个函数并传递不同的 i:

Function thousand(i As Variant) As Variant

If Right(i, 3) = "000" Then
  thousand = Left(i, Len(i) - 3)
End If

End Function

那么你只需按照debug.print thousand(DSA.Worksheets(1).Range("G10")) 的方式做一些事情

【讨论】:

  • 当我尝试运行 marco 时,我收到一条错误消息,提示“Argument not optional”为千。我更改了函数以将千位声明为 Variant,但我仍然得到“Debug.Print thousand(DSA.Worksheets(1).Range("G10")) 的参数不是可选的,你知道为什么吗?我想我可能需要在某处添加一个‘Set’!
猜你喜欢
  • 2018-02-11
  • 2019-01-31
  • 1970-01-01
  • 1970-01-01
  • 2013-07-24
  • 1970-01-01
  • 1970-01-01
  • 2015-11-06
  • 1970-01-01
相关资源
最近更新 更多