繁体   English   中英

在活动单元格上运行宏

[英]Run macro on active cell

我正在尝试在活动单元中进行这项工作。 我想定义它可以选择的单元格数目,它可以是下面的6个或20个,或者是我在运行宏之前定义的任何数目。”

Sub Macro3()
'
' Macro3 Macro
'
' Keyboard Shortcut: Option+Cmd+z
'
ActiveCell.Select
    Selection.TextToColumns Destination:=ActiveCell, DataType:=xlDelimited, _
    TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
    Semicolon:=False, Comma:=False, Space:=False, Other:=True, OtherChar _
    :=";", FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1))
Selection.Offset(0, 6).Select
Selection.Copy
ActiveCell.Offset(1, 0).Select
Selection.PasteSpecial Paste:=xlAll, Operation:=xlNone, SkipBlanks:=False _
    , Transpose:=True
ActiveCell.Offset(-1, 0).Select
Selection.Offset(0, 6).Select
Selection.ClearContents
End Sub

您似乎在使用“文本到列”来基于分号定界符¹拆分数据,并且仅保留最后一个值。 似乎在完成拆分后您将留下空白行,因此我将为您提供避免这种情况的选项。

Sub Macro3()
' Macro3 Macro
' Keyboard Shortcut: Option+Cmd+z

    Dim vVALs As Variant

    'option 1 - replace active cell with last split value
    With Selection.Cells(1, 1)
        If CBool(Len(.Value)) Then
            vVALs = Split(.Value, Chr(59)) 'split on a semi-colon
            .Cells = vVALs(UBound(vVALs))
        End If
    End With

End Sub

Sub Macro4()
' Macro4 Macro
' Keyboard Shortcut: Option+Cmd+z

    Dim vVALs As Variant

    'option 2 - put last split value into row below, clear active cell
    With Selection.Cells(1, 1)
        If CBool(Len(.Value)) Then
            vVALs = Split(.Value, Chr(59)) 'split on a semi-colon
            .Cells.Offset(1, 0) = vVALs(UBound(vVALs))
            .Cells.ClearContents
        End If
    End With

End Sub

如果当前选择了多个单元格,则使用Selection.Cells(1, 1) 这将采用任何选择集中的第一个单元格,而不管是只有一个单元格还是多个单元格。 可以对其进行修改,以使其在选择集中的多个单元格中循环,但是应应用附加的错误控制,以确保将要执行的操作不会阻塞错误的值选择。

我正在检查所选单元格中的值是否具有至少一个字符,因为即使其中不包含分号,但所有内容都将拆分为至少一个值,但根本不会拆分任何值。

¹ 实际上有一个分号选项,您无需使用其他:来指定它

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM