Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 空时取消合并合并单元格_Vba_Excel - Fatal编程技术网

Vba 空时取消合并合并单元格

Vba 空时取消合并合并单元格,vba,excel,Vba,Excel,我试图正确地编写代码,但在某一点上失败了:我有一个excel工作表,根据顶部单元格中写入的值将单元格与下面的单元格合并,但当从合并单元格中删除值时,我希望单元格取消合并。 我尝试与sub合作以保持代码整洁(不知道正确的规则,但我尝试): 对代码进行一些小的调整,这似乎对我有效 只要工作表上有更改,就会触发工作表\u Change事件。根据已更改单元格的值,它将运行unMerge或mergeCell子例程 Public Sub Worksheet_Change(ByVal Target As Ra

我试图正确地编写代码,但在某一点上失败了:我有一个excel工作表,根据顶部单元格中写入的值将单元格与下面的单元格合并,但当从合并单元格中删除值时,我希望单元格取消合并。 我尝试与sub合作以保持代码整洁(不知道正确的规则,但我尝试):


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

只要工作表上有更改,就会触发
工作表\u 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

如果您有多个工作表,则可以将上述代码放在标准代码模块中,并将其从
子工作表\u Change(…
重命名为
子工作表(目标范围)

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

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

现在,每个工作表上的
\u Change
事件将触发此
LetItMerge
例程,该例程确定要执行的
未合并
合并单元格
子例程。

括号中的变量可能应该是
范围
变量,而不是
对象
变量。您可能将未合并代码添加到
工作表\u Change
事件。当我想更改边框时,是否需要“对象”呢?我有12张工作表(每个月一张)因此,我认为将其放在模块中更有效?
目标
是一个
范围
变量,可能应该以这种方式传递,而不是作为
对象
,即使后者不会立即导致任何错误。您仍然需要在每个工作表上使用
工作表更改
事件宏。我将在下面修改我的答案w来回答这个问题!谢谢你-这些调整是我无法解决的问题。
Sub Worksheet_Change(ByVal Target as Range)
    LetItMerge Target
End Sub