空时合并单元格

时间:2013-04-30 11:58:08

标签: excel vba excel-vba

我试图让我的代码正确但在某些时候失败:我有一张excel表,根据顶部单元格中写入的值,将单元格与下面的单元格合并,但是从合并的单元格中删除一个值,我希望单元格取消合并。 我尝试使用sub来保持我的代码有点干净(不知道正确的规则,但我尝试):

Public Sub LetItMerge(Target As Object)  
    If Target.Value = Empty Then  
            Call unMergeCell(Target)          
    Else  
            If (Target.Value = VV Then Call MergeCell(Target)  
    End If  
End Sub
Sub unMergeCell(m As Object)
    m.Resize(1, 1).UnMerge
    m.Borders(xlInsideHorizontal).LineStyle = XlLineStyle.xlContinuous
End Sub
Sub MergeCell(n As Object)
        n.Resize(2).Merge                   'merge cells
        n.VerticalAlignment = xlCenter      'center text
        n.HorizontalAlignment = xlCenter    'center text
End Sub

1 个答案:

答案 0 :(得分:0)

对您的代码进行一些小调整,这似乎对我有用。

Worksheet_Change事件会在工作表发生更改时触发。根据更改的单元格的值,它将运行您的unMergemergeCell子程序。

Public Sub Worksheet_Change(ByVal Target As Range)
    'Use the target.cells(1) since a merged cell.'
    If Target.Cells(1).Value = vbNullString Then
            Call unMergeCell(Target)
    Else
            If Target.Value = VV Then Call MergeCell(Target)
    End If
End Sub

Sub unMergeCell(m As Range)
    m.Resize(1, 1).UnMerge
    m.Borders(xlInsideHorizontal).LineStyle = XlLineStyle.xlContinuous
End Sub

Sub MergeCell(n As Range)
        n.Resize(2).Merge                   'merge cells
        n.VerticalAlignment = xlCenter      'center text
        n.HorizontalAlignment = xlCenter    'center text
End Sub

更新#1

如果您有多个工作表,那么您可以将上述代码放在标准代码模块中,并将其从Sub Worksheet_Change(...重命名为其他内容,例如Sub LetItMerge(Target as Range)

然后,在每个工作表的代码模块中,每个工作表仍然需要一个Change事件宏,如下所示:

Sub Worksheet_Change(ByVal Target as Range)
    LetItMerge Target
End Sub

现在,每个工作表上的_Change事件将触发此LetItMerge例程,该例程确定要执行哪个unMergeMergeCells子例程。