2012-11-13 264 views
3

我寫了一個粗略的函數來根據範圍選擇和連接單元格。Excel VBA合併單元格功能

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合併一個單元塊?

+0

爲什麼在完成並置之前合併要連接的單元格? –

+0

我將一堆行連接到一個單元格中,文本很長並且不可見,所以我試圖在連接字符串正在寫入的列上合併相同數量的行,因此其完全可見 – keeg

+0

而不是合併,行,你不能只是調整行的大小?也許我不明白你的目標是在這裏。 – Marc

回答

3

通常合併單元格不是一個好主意。這是一種整形格式化方法,可能會對VBA代碼造成嚴重破壞。

免責聲明不談,提出幾點建議

  • 使用給你想要改變的範圍
  • 使用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