【问题标题】:Excel VBA - How to use ByValExcel VBA - 如何使用 ByVal
【发布时间】:2018-04-26 20:18:12
【问题描述】:

代码审查人员正在帮助优化我的代码,并说我应该使用以下代码以避免重复代码。我不确定如何正确使用它...据我所知,当我希望代码运行时,我必须输入 ConvertToNumeric 但我不确定如何更改变量,例如要查找的工作表或列最后一个单元格。不过这个概念对我来说很有意义。

    Private Sub ConvertToNumeric(ByVal sheetToUse As Worksheet, ByVal columnToFindLastCellOn As String)
        Dim helperCell As Range
        Set helperCell = sheetToUse.Range("AK1")
            helperCell.Value = "1"
            helperCell.Copy

        Dim lastCell As Range
        Set lastCell = sheetToUse.Cells(Rows.Count, columnToFindLastCellOn).End(xlUp)

        Dim modifyRange As Range
        Set modifyRange = sheetToUse.Range(lastCell, lastCell.End(xlUp))
        modifyRange.PasteSpecial Paste:=xlPasteAll, Operation:=xlMultiply, SkipBlanks:=False, Transpose:=False

        helperCell.ClearContents
    End Sub

【问题讨论】:

  • 我认为您需要更好地了解何时以及如何使用ByRefByVal。有manygoodexplanations的用途。
  • 你在哪里说你不明白如何使用 sub?例如ConvertToNumeric(wsh,colNum),其中wsh 是带有工作表对象的变量,colNum 是带有列号(?) 的字符串。
  • 您在 CR 得到的答案确实包括对 ConvertToNumeric 的调用。如果需要,请随时对该答案发表评论,以获得作者的澄清。
  • @MathieuGuindon 不幸的是,CR 说我需要 50 个代表来评论任何事情,所以我无法回应

标签: vba excel


【解决方案1】:

要使用Code Review 中提到的 sub,你可以这样称呼它

ConvertToNumeric Worksheets(2), "A"

ConvertToNumeric Worksheets("Sheet1"), 3

  • sheetToUse 是您要使用的工作表
  • columnToFindLastCellOn 是最后使用的单元格所基于的列字母(或数字)

【讨论】:

  • 或点赞Call ConvertToNumeric(Worksheets("Sheet1"), 3),以便更容易找到代码中的调用(因为Call 关键字变为蓝色)
  • 感谢大家的帮助。我好像误用了。我在做 ConvertToNumeric(ByVal "Sheet2",ByVal "A")。
  • @Mistella 在技术上是正确的,但是 Call 在被任意/不一致地使用或省略时会变得很烦人。人们会做Call DoSomething,但他们会做MsgBox "hello"——但两者都是“电话”。 helperCells.ClearContent 也是一个“呼叫”,modifyRange.PasteSpecial 也是如此,但我们从未看到那些出于某种原因使用 Call 关键字的人。 IMO 如果您需要语法高亮来识别调用,那么您的代码可能还有其他可读性问题。根据经验,任何可执行指令都会包含对某物的“调用”。
  • @MathieuGuindon 我通常将Call 用于自定义 subs/functions,因为我倾向于忘记搜索/查找(我知道,ctrl+f)并通过滚动查找对自定义 subs 的调用。 ...
猜你喜欢
  • 2014-06-30
  • 1970-01-01
  • 2014-02-20
  • 1970-01-01
  • 2018-05-01
  • 1970-01-01
  • 2019-12-08
  • 1970-01-01
  • 2020-05-28
相关资源
最近更新 更多