2010-02-03 71 views
4

正如標題所示:我嘗試將2個單元格的內容合併到Excel中的第3個。有類似的問題here on SO,但這些解決方案不保持字符格式不變。例如,部分源單元格內容格式爲粗體和紅色,其他部分正常。當我合併他們像合併2個Excel單元格保留字符格式完整的內容(使用VBA)

Range("A3") = Range("A1") & Range("A2") 

然後任何格式的A1和A2丟失。我需要的是一種保持格式完整的解決方案。這將成爲更大的VBA程序的一部分,所以我需要一個VBA解決方案,請不要使用公式。 Excel版本是2002(XP)。

回答

3

Doc,這是一個有趣的問題。我被困住了自己,但看到了價值,所以經過一番探索後,這裏是我發現的。從vbaexpress我對單元格格式有了基本的瞭解,我在下面對它進行了修改。

Sub Merge_Cells() 
Dim iOS As Integer 
Dim rngFrom1 As Range 
Dim rngFrom2 As Range 
Dim rngTo As Range 
Dim lenFrom1 As Integer 
Dim lenFrom2 As Integer 

    Set rngFrom1 = Cells(1, 1) 
    Set rngFrom2 = Cells(1, 2) 
    Set rngTo = Cells(1, 3) 
    lenFrom1 = rngFrom1.Characters.Count 
    lenFrom2 = rngFrom2.Characters.Count 

    rngTo.Value = rngFrom1.Text & rngFrom2.Text 

    For iOS = 1 To lenFrom1 
    With rngTo.Characters(iOS, 1).Font 
     .Name = rngFrom1.Characters(iOS, 1).Font.Name 
     .Bold = rngFrom1.Characters(iOS, 1).Font.Bold 
     .Size = rngFrom1.Characters(iOS, 1).Font.Size 
     .ColorIndex = rngFrom1.Characters(iOS, 1).Font.ColorIndex 
    End With 
    Next iOS 
    For iOS = 1 To lenFrom2 
    With rngTo.Characters(lenFrom1 + iOS, 1).Font 
     .Name = rngFrom2.Characters(iOS, 1).Font.Name 
     .Bold = rngFrom2.Characters(iOS, 1).Font.Bold 
     .Size = rngFrom2.Characters(iOS, 1).Font.Size 
     .ColorIndex = rngFrom2.Characters(iOS, 1).Font.ColorIndex 
    End With 
    Next iOS 

End Sub 

只需更換3個單元格()與您的特定單元格。也許有人可以找到一種更清潔的方式,但是當我測試這個時,它按照我理解你(和我)的意願工作。
希望這有助於...

+0

感謝克雷格,這個答案和我在過去一個小時裏找到的解決方案非常相似。有一個缺點:它非常慢(這意味着,對於200-300個字符,用戶可以看到格式化的發生),所以我希望別人找到更好的解決方案。 – 2010-02-03 17:29:44

+2

如果您在開始時添加這些速度,速度會發生怎樣的變化? application.screenupdating =假 application.enableevents =假 application.calculation = xlmanual 然後,在端 application.calculation = xlautomatic 應用。screenupdating = true application.enableevents = true – guitarthrower 2010-02-03 17:40:41

+0

@guitarthrower:很好,這有幫助!至少,可見的效果消失了,這就是所尋找的。如果沒有人找到更好的解決方案,我會在明天接受克雷格的答案。 – 2010-02-03 18:01:08

0

我知道沒有辦法直接做到這一點,但它不會很難將範圍複製到新範圍,然後循環通過原始範圍的每個字符的interior屬性並複製屬性。這應該爲結果範圍內的每個字符保留顏色,字體樣式等。

家庭時間正在招手,所以我沒有時間掀起一個例子,但我確信其他人編輯/如果需要回答。

1

這有點在黑暗中拍攝的,但如果你能以某種方式寫一個宏,將執行以下操作,它似乎將做工精美:

  1. 複製整個範圍(例如,A1:B200)以合併。
  2. 打開一個新的Word文檔。
  3. 粘貼(在Word中創建一個表格)。
  4. 選擇表格。
  5. 用空白分隔符(或任何你想要的)來「轉換爲文本」。
  6. 複製結果文本。
  7. 在Excel中粘貼到所需位置(例如,C1)。

我知道你可以爲Excel和Word編寫VBA宏,但是我懷疑你可以從Excel控制一個Word文檔。但是,您可能會編寫一個C#控制檯應用程序,可以打開並控制兩個文檔。

+0

@DanM:實際上,我正在使用的VBA程序確實可以控制Excel中的Word!我沒有問題將Excel單元格的內容複製到Word,保持格式不變。其任務是讓用戶從單獨的工作表中選擇一些(格式化!)樣板,將它們合併到一個單元格中,手動替換一些佔位符文本,然後(在完成大約100個單元格的情況下)在Word中生成報表。出於實際的原因,我寧願選擇一種解決方案,在這種解決方案中,Word不會僅用於合併樣板文件,只能在最後報告之後進行。 – 2010-02-04 08:08:29

相關問題