【问题标题】:Excel VBA merging cells in a functionExcel VBA合并函数中的单元格
【发布时间】:2012-11-13 21:33:40
【问题描述】:

我编写了一个粗略的函数来根据范围选择和连接单元格。

Function GetSkills(CellRef As String, CellRefEnd As String, Delimiter As String)

    Dim CellStart As Range
    Dim CellEnd As Range
    Dim LoopVar As Long
    Dim StartRow As Long
    Dim EndRow As Long
    Dim Concat As String
    Dim Col As Long

    Set CellStart = Worksheets(1).Cells.Range("B" & CellRef)
    Set CellEnd = Worksheets(1).Cells.Range("B" & CellRefEnd)

    Col = CellStart.Column
    StartRow = CellStart.Row
    EndRow = CellEnd.Row

    With Range(CellStart, CellEnd)
        .Merge
        .WrapText = True
    End With

    Concat = ""

    For LoopVar = StartRow To EndRow
        Concat = Concat & Cells(LoopVar, Col).Value
        If LoopVar <> EndRow Then Concat = Concat & Delimiter & " "
    Next LoopVar

    GetSkills = Concat

End Function

在其中我试图合并单元格,当我运行该函数时,我得到一个提示:

选择包含多个数据值。合并到一个单元格中 将只保留最左上角的数据

我单击“确定”,Excel 崩溃、重新启动并再次提示对话框。还有其他方法可以使用 VBA 合并单元格块吗?

【问题讨论】:

  • 为什么要在完成连接之前合并要连接的单元格?
  • 我将一堆行连接到一个单元格中,文本很长且不可见,所以我试图在连接字符串被写入的列上合并相同数量的行所以它完全可见
  • 不是合并行,你不能只调整行的大小吗?也许我不明白你的目的是什么。
  • 另外,您需要在合并单元格并丢失数据之前进行连接。
  • 我还认为您需要从Sub 而不是Function 中对工作表(例如.Merge)进行结构更改。原因是该函数可以从工作表中调用并将其自身合并不存在,并且该函数将在每个重新计算周期中运行。

标签: excel vba


【解决方案1】:

通常合并单元格不是一个好主意。这是一种装饰性的格式化方法,可能会对 VBA 代码造成严重破坏。

除了免责声明,还有一些建议

  • 如果您想更改范围,请使用 Sub 而不是 Function
  • 使用Application.DisplayAlerts 禁止合并单元格消息
  • 你可以大大减少代码

代码

Sub Test()
Call GetSkills(2, 4, ",")
End Sub

Sub GetSkills(CellRef As String, CellRefEnd As String, Delimiter As String)
Dim CellStart As Range
Dim CellEnd As Range
Dim Concat As String

Application.DisplayAlerts = False
Set CellStart = Worksheets(1).Cells.Range("B" & CellRef)
Set CellEnd = Worksheets(1).Cells.Range("B" & CellRefEnd)

Concat = Join(Application.Transpose(Range(CellStart, CellEnd)), Delimiter)

With Range(CellStart, CellEnd)
    .Merge
    .WrapText = True
    .Value = Concat
End With
Application.DisplayAlerts = True
End Sub

【讨论】:

    猜你喜欢
    • 2021-05-10
    • 2013-11-23
    • 1970-01-01
    • 2021-06-14
    • 1970-01-01
    • 2022-08-19
    • 1970-01-01
    • 1970-01-01
    • 2021-11-27
    相关资源
    最近更新 更多