我试图让我的代码正确但在某些时候失败:我有一张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
答案 0 :(得分:0)
对您的代码进行一些小调整,这似乎对我有用。
Worksheet_Change
事件会在工作表发生更改时触发。根据更改的单元格的值,它将运行您的unMerge
或mergeCell
子程序。
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
例程,该例程确定要执行哪个unMerge
或MergeCells
子例程。