2011-12-08 82 views
1

我有一个电子表格,它包含18列。 我想要做的是当做数据输入时,选项卡将移动到记录结尾,即18col。然后它进入下一行第一列。如果用户想要在记录的中间去,就不允许。如何在Excel电子表格中创建制表顺序

如果可以通过VBA来完成,请帮助我。

感谢

回答

2

如果只需要保持用户从选择所需的范围之外(18列),你甚至不需要VBA。使用表格保护并且不允许用户选择锁定的单元格。以下是表单保护工作原理的快速回顾:http://www.dummies.com/how-to/content/how-to-protect-cell-data-in-excel-2010.html

如果您还需要强制按顺序填充单元格,则需要添加此VBA代码。如果“上一个”单元格填充,它使用事件过程来解锁“下一个”单元格;如果不是,当前单元格移回以前的细胞,使用户可以填写好。

Private Sub Worksheet_SelectionChange(ByVal Target As Range) 
    Dim rngPrev As Range 
    Dim rngNext As Range 
    Const LAST_COL As Long = 18 

    Select Case Target.Column 
     Case Is = 1 
      If Target.Row > 1 Then 
       Set rngPrev = Target.Offset(-1, LAST_COL - 1) 
      Else 
       Set rngPrev = Target 
      End If 
      Set rngNext = Target.Offset(0, 1) 
     Case 2 To LAST_COL - 1 
      Set rngPrev = Target.Offset(0, -1) 
      Set rngNext = Target.Offset(0, 1) 
     Case 18 
      Set rngPrev = Target.Offset(0, -1) 
      Set rngNext = Target.Offset(1, 1 - LAST_COL) 
    End Select 
    If Not IsEmpty(rngPrev.Value) > 0 Then 
     Me.Unprotect 
     rngNext.Locked = False 
     ' note: this line is for testing purposes to show which cells get unlocked 
     rngNext.Interior.ColorIndex = 6 
     Me.Protect 
    Else 
     rngPrev.Activate 
    End If 
End Sub 
+0

感谢凯文,你考虑,并尽快答复。它工作正常。但在第一列开始时就会出错。我将它修改为之前的值isempty。因为有些细胞没有价值。对不起,我不熟悉它。感谢您的帮助 – user1049518

+0

我修改了代码以处理“上一个”单元格中的错误值。同样,只有当您要强制所有单元格按顺序填充时,代码才是必需的。否则,您只需要第一个建议(锁定工作表并且不允许选择锁定的单元格)。 –

+0

非常感谢Rachel,坚持我的问​​题。 – user1049518