excel表格VBA代码高手请进,帮我优化代码

在同一表格中,我有好几组需要输入时间,我想做到在A列输入“ 大于0的数字 ”或者在C列输入“ * ”,二者符合其一在对应的B列都能自动输入时间。(时间一旦输入后,就不能改变,当然手工去改变还是可以的)
同时到在D列输入“ 大于0的数字 ”或者在F列输入“ * ”,二者符合其一在对应的E列都能自动输入时间,下面的代码可以简单实现我上面的想法。
但该代码有个两个缺陷,
一、改代码从第一行就开始运行,我想要从第儿行开始运行,第一行是表头。
二、就是不能在表格中删除或清除连续单元格内的数据,如果出现上面的情况,显示{运行时错误"13".类型不匹配} 然后, If Target.Value = "*" Then
这段代码显示黄色,在没修改代码的情况下,整个代码便失去作用。
在实际使用中我的表格有时会插入行或者删除行,有时会清除连续单元格的内容,还会复制单元格,请问该代码应当如何修改,才能适应我的操作
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Cells.Count > 6 Then Exit Sub
Application.EnableEvents = False
Select Case Target.Column
Case Is = 1
If Target.Value > 0 Then
With Target.Offset(0, 1)
.Value = Now
.NumberFormatLocal = "yyyy-m-d h:mm;@"
End With
End If
Case Is = 3
If Target.Value = "*" Then
With Target.Offset(0, -1)
.Value = Now
.NumberFormatLocal = "yyyy-m-d h:mm;@"
End With
End If
Case Is = 4
If Target.Value > 0 Then
With Target.Offset(0, 1)
.Value = Now
.NumberFormatLocal = "yyyy-m-d h:mm;@"
End With
End If
Case Is = 6
If Target.Value = "*" Then
With Target.Offset(0, -1)
.Value = Now
.NumberFormatLocal = "yyyy-m-d h:mm;@"
End With
End If
End Select
Application.EnableEvents = True
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Row = 1 Or Target.Cells.Count > 1 Then Exit Sub
Application.EnableEvents = False
Select Case Target.Column
Case Is = 1, 4
If Target.Value > 0 Then
With Target.Offset(0, 1)
.Value = Now
.NumberFormatLocal = "yyyy-m-d h:mm;@"
End With
End If
Case Is = 3, 6
If Target.Value = "*" Then
With Target.Offset(0, -1)
.Value = Now
.NumberFormatLocal = "yyyy-m-d h:mm;@"
End With
End If
End Select
Application.EnableEvents = True
End Sub追问

您的代码很好,很容易修改,可以告诉我这句代码的意思和作用吗If Target.Row = 1 Or Target.Cells.Count > 1 Then Exit Sub
。另外我还想在第1行或第4行只对数字有效(大于0的数字,)而不是文字或符合,这样在实际表格中,就可以减少失误

追答

If Target.Row = 1 Or Target.Cells.Count > 1 Then Exit Sub
当前行等于或者所选择单元格数大于1就退出程序。

追问

难道我上面的代码就缺少这一句,就不能清除数据吗

追答

加Target.Row = 1是为了解决第一个问题
Target.Cells.Count > 6
大于6才退出程序,所以会出错,改成1即可。

温馨提示:内容为网友见解,仅供参考
无其他回答

excel表格VBA代码高手请进,帮我优化代码
Private Sub Worksheet_Change(ByVal Target As Range)If Target.Row = 1 Or Target.Cells.Count > 1 Then Exit Sub Application.EnableEvents = False Select Case Target.Column Case Is = 1, 4 If Target.Value > 0 Then With Target.Offset(0, 1).Value = Now .NumberFormatLocal = "yyyy...

关于excel表格的一些问题,高手请进
用vba实现。代码如下:Sub test()Dim i As Integer Dim j As Integer Dim str As String Dim c1 As Integer Dim c2 As Integer Dim p As Integer str = "优"For i = 2 To EndRow(2)c1 = 0 c2 = 0 For j = 2 To 13 c1 = c1 + 1 If ActiveSheet.Cells(i, j) = str Then...

EXCEL表格高手请进,谢谢
答:编程一步完成 按ALT+F11组合键,打开VB窗口,执行"插入"-"模块",复制下面代码进去,按F5运行程序即得到结果。Sub Demo() Dim LastRow As Long Dim i As Long Dim TempArr As Variant With CreateObject("scripting.dictionary") LastRow = Cells(Rows.Count, 1).End(xlUp)...

EXCEL问题,高手请进!
ThisWorkbook.Names.Add Name:="abcd", RefersTo:=Cells(Target.Row, 1).Resize(1, 10)End Sub 注:代码中thisworkbook...resize(1,10)为同一行,resize(1,10)中10为列数,可改成任意[1,255]之间的数值 ②在工作表中,选中所有数据,格式>条件格式,公式输入=row(abcd)=row(),然后点格式,图案...

EXCEL高手请进,求VBA代码,统计关于单元格间隔的问题~
鼠标右键Sheet1的标签,选【查看代码】。在代码窗口粘贴下面的代码:Sub ouyangff()n = [a65536].End(3).Row For i = 0 To 4 For j = 1 To n If Cells(j, 1) = i Then k = j Next Cells(i + 1, 3) = n - k Next End Sub 按 Alt + F11 回到 Excel 这时你可以按Alt +...

Excel中,如何用VBA来执行以下功能,高手请进,若能完美运行,我将增加100...
以下代码必须放到Excel对象下的对应工作表中。就是VBA编辑器左上角工程框那里可以选到的,双击对应工作表。我是根据你的操作顺序来做的,应该是先输重量,有必要再改客户名吧。首先是K列值变动就会拷贝上一行数据,当然ID号是递增的。K列一次粘贴多个数据也OK 之后客户名改变即改变C列改变时,这时会...

excel表格问题请教(高手请进!)
假设是在B1单元格中输入数字,用下面代码:Private Sub Worksheet_Change(ByVal Target As Range)If Target.Row <> 1 Or Target.Column <> 2 Then Exit Sub Range("A" & Range("A65536").End(xlUp).Row + 1) = Target End Sub

excel VBA高手请进!这些代码怎么整改?
需要先定义X的类型 在复制X=1之前加入Dim x As Integer即可 如下 Sub a()Dim x As Integer x = 1 MsgBox getChar(x)End Sub

excel vba如何用条件运行宏(高手请进)
你希望用户点数值调节键,宏二就自动运行,是吗?使用worksheet_change事件,然后调用“宏二”就可以了。现在数值调节键不是宏来的,也可以用宏来控制——宏xx可以控制B1单元格的值 宏xx可以调用宏二中的代码。这个宏xx就是你要的连续自动运行200次,也就是B1的数字连续变化200次,宏二也运行200次。

EXCEL表格问题~~高手请进,急!!!
我猜你的意思是在a1不断地输入数值,b1中累加。用函数公式貌似无法解决,只有用VBA了 ALT+F11,粘贴以下代码4 1 4 Private Sub Worksheet_SelectionChange(ByVal Target As Range)If [a1] <> 0 Then [b1] = [b1] + [a1][a1] = ""End If End Sub ...

相似回答
大家正在搜