双击以在合并的单元格上插入字符

时间:2014-10-31 12:49:08

标签: excel vba

我想插入或删除" X"通过双击,在一定范围内的内部单元格(" A1:A19")。下面的代码放在" Microsoft Excel Objects \ ThisWorkbook"在项目宏中。

Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
    If Not Intersect(Target, Range("A1:A19")) Is Nothing Then
        If Len(Trim(Target)) = 0 Then
            Target.Value = "X"
            Cancel = True
        ElseIf UCase(Trim(Target)) = "X" Then
            Target.ClearContents
            Cancel = True
        End If
    End If
End Sub

此代码适用于非合并单元格。但是,我的情况是必须合并单元格(列中2乘2),在这种情况下我会收到以下错误:

"运行时错误' 13'" 类型不匹配

如何修改代码以防止这种情况发生?

2 个答案:

答案 0 :(得分:0)

Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
    If Not Intersect(Target, Range("A1:A19")) Is Nothing Then
        If Target.Cells.Count = 1 Then ' handle single cell
            If Len(Trim(Target)) = 0 Then
                Target.Value = "X"
                Cancel = True
            ElseIf UCase(Trim(Target)) = "X" Then
                Target.ClearContents
                Cancel = True
            End If
        Else ' handle merged
            Dim theAddress As String
            theAddress = Split(Target.Address, ":")(0) & ":" & Split(Target.Address, ":")(0)
            If Len(Trim(Range(theAddress))) = 0 Then
                Target.Value = "X"
                Cancel = True
            ElseIf UCase(Trim(Range(theAddress))) = "X" Then
                Target.ClearContents
                Cancel = True
            End If
        End If
    End If
End Sub

答案 1 :(得分:0)

当您的单元格合并时,目标正在返回一系列多个单元格,并且它正在尝试将值放入不能将值放入的单元格中。试试这个:

Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)

Dim myRange As Range

Set myRange = Target.Cells(1, 1)

If Not Intersect(myRange, Range("A1:A19")) Is Nothing Then
    If Len(Trim(myRange)) = 0 Then
        myRange.Value = "X"
        Cancel = True
    ElseIf UCase(Trim(myRange)) = "X" Then
        Target.ClearContents
        Cancel = True
    End If
End If
End Sub

它返回一个范围引用,作为合并范围中的左上角单元格,并允许您根据该值输入值。

相关问题