Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.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
Excel 插入、复制、删除_Excel_Vba - Fatal编程技术网

Excel 插入、复制、删除

Excel 插入、复制、删除,excel,vba,Excel,Vba,我正在处理一个包含项目列表的Excel文档。因为很多人都在使用这个文档,所以我需要注册更改的人、时间和地点。所有这些都是用Excel中的VBA实现的 当有人更改单元格中的值时,作者姓名将写入列中,日期和时间将写入列中,并且已更改的单元格将获得一个较厚的红色边框。2人检查变更后;基准、时间和红色边框将被删除 在此之前,一切正常,但当有人想要插入新行、删除完整行或粘贴完整行时,通过鼠标右键单击功能会发生错误 “错误13:类型不匹配” 我不明白出了什么问题 下面是excelvba代码 比尔。克莱 P

我正在处理一个包含项目列表的Excel文档。因为很多人都在使用这个文档,所以我需要注册更改的人、时间和地点。所有这些都是用Excel中的VBA实现的

当有人更改单元格中的值时,作者姓名将写入列中,日期和时间将写入列中,并且已更改的单元格将获得一个较厚的红色边框。2人检查变更后;基准、时间和红色边框将被删除

在此之前,一切正常,但当有人想要插入新行、删除完整行或粘贴完整行时,通过鼠标右键单击功能会发生错误

“错误13:类型不匹配”

我不明白出了什么问题

下面是excelvba代码

比尔。克莱


Private子工作表\u selection更改(ByVal目标作为范围)
'-----------------------------
'设置选择标尺
'-----------------------------
[GesRij]=目标行
[GesKol]=目标.列
'-----------------------------
'计算LastRow和LastColumn
'-----------------------------
最后一排一样长
将最后一列变长
暗淡的StartCell As范围
尺寸检查\u 01,检查\u 02
aw_name=ActiveWorkbook.name
设置sh_name=工作表(“Blad1”)
设置StartCell=范围(“A2”)
'查找最后一行和最后一列
LastRow=sh_name.Cells(sh_name.Rows.Count,StartCell.Column)。End(xlUp)。Row
LastColumn=sh_name.Cells(StartCell.Row,sh_name.Columns.Count)。End(xlToLeft)。Column
'-----------------------------
"明显变化",
'-----------------------------
sh_name=“Blad1”
使用ActiveWorkbook.Sheets(sh_名称)
对于i=2到最后一行
Check_01=工作簿(aw_名称).工作表(sh_名称).单元格(i,8).值
Check_02=工作簿(aw_名称).工作表(sh_名称).单元格(i,9).值
如果(勾选01=“1”)和(勾选02=“1”),则
"数据清晰",
.Range(单元格(i,1),单元格(i,2)).ClearContents
“清晰的标记
.Range(单元格(i,3),单元格(i,6)).Borders.Color=vbBlack
.Range(单元格(i,3),单元格(i,6)).Borders.LineStyle=xlContinuous
.Range(单元格(i,3),单元格(i,6)).Borders.Weight=xlThin
工作簿(aw_名称).工作表(sh_名称).单元格(i,8).Value=“”
工作簿(aw_名称).Sheets(sh_名称).Cells(i,9).Value=“”
如果结束
接下来我
以
端接头
私有子工作表_更改(ByVal目标作为范围)
'-----------------------------
'注册日期、时间和变更作者
'-----------------------------
将Bereik调暗为范围,控制为范围
暗淡的数据旧的,数据新的
迪姆·沃乌名字
迪姆什胡的名字
设置Bereik=ActiveWorkbook.Sheets(“Blad1”).Range(“C:F”)
设置控件=相交(目标,Bereik)
使用ActiveWorkbook.Sheets(1)
如果没有控制,那就什么都不是了
"写数据",
.Range(“A”&Target.Row)=日期值(现在)
.Range(“B”和Target.Row)=时间值(现在)
.Range(“G”和Target.Row)=ThisWorkbook.BuiltinDocumentProperties(“上一个作者”)
“马克·维吉金
DataNew=Target.Value
如果DataOld DataNew,则
Target.Borders.LineStyle=xlContinuous
Target.Borders.Weight=xlThick
Target.Borders.Color=vbRed
如果结束
如果Target.Cells.Count>1,则
出口接头
如果结束
ClOud=Target.Value
如果结束
以
端接头

当您收到错误时,是否会突出显示特定行?错误出现在“注册日期、时间和更改作者”一节中,代码为:“如果DataOld DataNew,那么我已经读了几遍代码,但我看不出DataOld被分配到了哪里?@DS_London,那么可能需要吗?@Chronocidal可能需要。。。但是DataOld是声明的,只是没有分配给任何东西。
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
 
'-----------------------------
' Set selection rulers
'-----------------------------

    [GesRij] = Target.Row
    [GesKol] = Target.Column
    
'-----------------------------
' Calculate LastRow & LastColumn
'-----------------------------

    Dim LastRow As Long
    Dim LastColumn As Long
    Dim StartCell As Range
    Dim Check_01, Check_02
                
    aw_name = ActiveWorkbook.Name
        
    Set sh_name = Worksheets("Blad1")
    Set StartCell = Range("A2")
        
        'Find Last Row and Column
          LastRow = sh_name.Cells(sh_name.Rows.Count, StartCell.Column).End(xlUp).Row
          LastColumn = sh_name.Cells(StartCell.Row, sh_name.Columns.Count).End(xlToLeft).Column

'-----------------------------
'Clear changes
'-----------------------------

    sh_name = "Blad1"
                         
    With ActiveWorkbook.Sheets(sh_name)
    
          For i = 2 To LastRow

            Check_01 = Workbooks(aw_name).Sheets(sh_name).Cells(i, 8).Value
            Check_02 = Workbooks(aw_name).Sheets(sh_name).Cells(i, 9).Value
                               
            If (Check_01 = "1") And (Check_02 = "1") Then
                'Clear data
                .Range(Cells(i, 1), Cells(i, 2)).ClearContents
                
                'Clear marker
                .Range(Cells(i, 3), Cells(i, 6)).Borders.Color = vbBlack
                .Range(Cells(i, 3), Cells(i, 6)).Borders.LineStyle = xlContinuous
                .Range(Cells(i, 3), Cells(i, 6)).Borders.Weight = xlThin
                
                Workbooks(aw_name).Sheets(sh_name).Cells(i, 8).Value = ""
                Workbooks(aw_name).Sheets(sh_name).Cells(i, 9).Value = ""
            End If
        Next i
    End With
    
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)

'-----------------------------
' Registrate date, time and author of the change
'-----------------------------

    Dim Bereik As Range, Controle As Range
    Dim DataOld, DataNew
 
    Dim aw_name
    Dim sh_name
    
    Set Bereik = ActiveWorkbook.Sheets("Blad1").Range("C:F")
    Set Controle = Intersect(Target, Bereik)
    
    With ActiveWorkbook.Sheets(1)
                              
        If Not Controle Is Nothing Then
            'Write data
              .Range("A" & Target.Row) = DateValue(Now)
              .Range("B" & Target.Row) = TimeValue(Now)
              .Range("G" & Target.Row) = ThisWorkbook.BuiltinDocumentProperties("Last Author")
            
            'Markeer wijziging
              DataNew = Target.Value
    
                If DataOld <> DataNew Then
                    Target.Borders.LineStyle = xlContinuous
                    Target.Borders.Weight = xlThick
                    Target.Borders.Color = vbRed
                End If
    
                If Target.Cells.Count > 1 Then
                    Exit Sub
                End If
            
            ClOud = Target.Value
        End If
    End With
End Sub