【问题标题】:Excel VBA rangeExcel VBA范围
【发布时间】:2015-01-27 06:46:34
【问题描述】:

对于下面的代码,我设置的范围似乎没有出来。 基本上我想连接从 A2 到 A23 的值。我的数据进入单元格 A24。

我将单元格 A24 命名为“WrapNarrEnd”,因为有时我想添加额外的行,所以我希望“WrapNarrEnd”保持不变。我尝试在“WrapNarrEnd”之前使用偏移值到达单元格一一切正常,直到倒数第二行,我不确定我哪里出错了。有人可以帮帮我吗?

Function ConcatMe(Rng As Range) As String
    Dim cl As Range
    ConcatMe = ""
    For Each cl In Rng
        ConcatMe = ConcatMe & " " & cl.Text
    Next cl
End Function

Sub test2()
    Dim WrapNarrative As Range
    Dim WrapEnd As Range
    Set WrapEnd = Sheets("CA Sweeps").Range("WrapNarrEnd").Offset(-1, 0)
    **Set WrapNarrative = Sheets("CA Sweeps").Range("A2:wrapnarrend")**
    Sheets("CA Sweeps").Range("I24").Value = ConcatMe(WrapNarrative)
End Sub

示例图片:

【问题讨论】:

  • 代码中的双星符号是什么意思?删除双重使代码对我有用,
  • 抱歉 Jeanno,我在双星中添加了我认为代码中断的位置。当我尝试运行整个脚本时,我收到“运行时错误'9':下标超出范围”。

标签: vba excel


【解决方案1】:

范围引用的语法错误。你需要Range(<TopLeftCell>, <BottomRightCell>)

另外,您的ConactMe 功能可以得到改进。

这是你的代码,重构

Function ConcatMe(Rng As Range, Optional Sep As String = vbNullString) As String
    Dim dat As Variant

    If Rng.Columns.Count = 1 Then
        dat = Application.Transpose(Rng.Value)
        ConcatMe = Join(dat, Sep )
    ElseIf Rng.Rows.Count = 1 Then
        dat = Application.Transpose(Application.Transpose(Rng.Value))
        ConcatMe = Join(dat, Sep )
    Else
        ' what do you want to do now?
    End If
End Function


Sub test2()
    Dim WrapNarrative As Range
    Dim WrapEnd As Range

    With Sheets("CA Sweeps")
        Set WrapEnd = .Range("WrapNarrEnd").Offset(-1, 0)
        Set WrapNarrative = .Range("A2", "wrapnarrend")
        .Range("I24").Value = ConcatMe(WrapNarrative, " ")
    End With
End Sub

【讨论】:

  • Set WrapNarrative = .Range("A2", "wrapnarrend") 我认为可以正常工作。
  • 感谢 Chris 改进的连接。我尝试运行整个脚本,但收到“运行时错误'9':下标超出范围”。我不知道为什么会这样。
  • @Jackson 在哪一行?
  • @Chris。对不起,我的错误,正确粘贴。现在一切都好。干杯。
猜你喜欢
  • 2019-06-16
  • 2015-08-03
  • 2019-12-05
  • 2019-07-22
  • 2017-10-18
  • 2017-10-01
  • 2021-12-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多