【问题标题】:make automatic move between columns and cell?在列和单元格之间自动移动?
【发布时间】:2020-01-29 08:57:26
【问题描述】:

可以在列和单元格之间自动移动吗?

例如:
我只想要 A、B、C 列(A 列-项目编号 B-LP 列(牌照)C 列位置 我想从 A2 列扫描条形码和光标到 B2 列从 B 列到 C2 列但从 C2 列我想回到 A3 列下一个像自动的单元格是可能的吗? 现在我有这个,但我仍然必须使用 Ctrl+a 然后我回到 A3 列。

【问题讨论】:

  • 在哪个触发器上自动移动?需要什么东西来触发这个动作应该是什么?
  • 自动从 D2 移动到 A3...再次从 D3 移动到 A4
  • 例如活动单元格 A2 我扫描条形码编号转到 A2。从 A2 直接转到 B2 然后转到 C2 从 C2 转到 D2 从 D2 我想自动移动到 A3 并扫描新栏代码
  • Sub next12() ' ' next12 Macro ' ' 键盘快捷键:Ctrl+d ' ActiveCell.Select ActiveCell.Offset(0, 1).Range("A1").Select ActiveCell.Offset(1 , -4).Range("A1").Select ActiveCell.Select End Sub ' 键盘快捷键:Ctrl+d '选择一个角色的得分 Sub SelectScore() '给定一个角色的得分,选择'其左边的角色 ActiveCell.Offset (1, -3).选择结束子
  • Sub next12() ' ' next12 Macro ' ' 键盘快捷键:Ctrl+d ' ActiveCell.Select ActiveCell.Offset(0, 1).Range("A1").Select ActiveCell.Offset(1 , -4).Range("A1").Select ActiveCell.Select End Sub ' 键盘快捷键:Ctrl+d '选择一个角色的得分 Sub SelectScore() '给定一个角色的得分,选择'其左边的角色 ActiveCell.Offset (1, -3).选择结束子

标签: excel vba


【解决方案1】:

如果扫描仪设置为按 Enter,请在 Worksheet_Change 事件中使用这段代码:

Private Sub Worksheet_Change(ByVal Target As Range)
   If Target.Cells.count = 1 Then
        If Target.Column = 1 Or Target.Column = 2 Then
            Target.Offset(0, 1).Select
        ElseIf Target.Column = 3 Then
            Target.Offset(1, -2).Select
        End If
   End If
End Sub

如果您修改 A:C 列之外的内容,它不会移动选择。

【讨论】:

  • 是的,确实如此。但是我观察到这样的条件是没有必要的,其实……
  • 但我建议检查 Target 是否只是一个单元格或多个单元格的范围。因为此代码破坏了复制整行的能力。仅当 Target 是单个单元格时才允许运行此代码。
  • 正确,再次。我会更新它...即使在扫描后回车的情况下几乎不可能出现这种情况。
  • 不是在扫描的情况下,但如果您以后需要使用该数据,该事件仍然处于活动状态,并且会很烦人。
  • 我能想象的最简单的例子是你需要删除一行(例如,扫描仪扫描错误)。如果不检查多个单元格,如果您删除一行,它将引发错误。现在它应该可以正常工作。当然,通过代码手动移动单元格光标总是会造成混淆,并可能导致不良行为。
【解决方案2】:

简单的替代方法是将列 A 到 C 格式化为表(列表对象)。并将 Excel 选项中的选项 Cell Movement After Enter 更改为 right 而不是向下。然后输入数据将从 C 列转到下一行的 A:

图 1:输入值并用 Enter 确认。因为 C 列是表中的最后一个,所以它在下一行 A 列重新开始。


单元格移动方向也可以通过代码改变

Application.MoveAfterReturnDirection = xlToRight

所以你可以例如。如果工作簿打开则更改它,如果它关闭则将其更改回来,因此它不会影响您的所有工作簿。

Option Explicit

Dim MoveAfterReturnDirection_ORIGINAL As Long

Private Sub Workbook_Open()
    MoveAfterReturnDirection_ORIGINAL = Application.MoveAfterReturnDirection
    Application.MoveAfterReturnDirection = xlToRight
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Application.MoveAfterReturnDirection = MoveAfterReturnDirection_ORIGINAL
End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-16
    • 2016-01-19
    • 1970-01-01
    相关资源
    最近更新 更多