簡體   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