Как применить макрос только к выбранной строке

#excel #vba #row #apply #selected

#excel #vba #строка #применить #выбранный

Вопрос:

Я действительно новичок в maccros. Я создал его с помощью автоматической записи, но, похоже, я не могу использовать его только для выбранной строки, он продолжает делать это в той же строке, что и запись. Мне действительно нужна ваша помощь, чтобы решить эту проблему, и помогите мне лучше понять, как на самом деле работает maccros

Мой макрос выглядит следующим образом:

 Sub COPIERVALEURS()
'
' COPIERVALEURS Macro
'
' Touche de raccourci du clavier: Ctrl Shift V
'

    Range("A34:H34").Select
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks     _
        :=False, Transpose:=False
    Range("M34:N34").Select
    Application.CutCopyMode = False
    Selection.Copy
    Range("K34").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks     _
        :=False, Transpose:=False
    Range("S34:T34").Select
    Application.CutCopyMode = False
    Selection.Copy
    Range("Q34").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks     _
        :=False, Transpose:=False
    Range("Y34:Z34").Select
    Application.CutCopyMode = False
    Selection.Copy
    Range("W34").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks     _
        :=False, Transpose:=False
    Range("AE34:AF34").Select
    Application.CutCopyMode = False
    Selection.Copy
    Range("AC34").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks     _
        :=False, Transpose:=False
    ActiveWindow.SmallScroll ToRight:=5
    Range("AI34:AJ34").Select
    Application.CutCopyMode = False
    Selection.Copy
    Range("AG34").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks     _
        :=False, Transpose:=False
    Range("AK34").Select
    Application.CutCopyMode = False
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks     _
        :=False, Transpose:=False
End Sub
 

Ответ №1:

Я пытаюсь понять вашу логику, чтобы помочь вам, насколько это возможно. Выберите строку, в которой вы хотите, чтобы этот код выполнял действие, импортируйте точку останова в строку With , выполните и отладьте код, чтобы проверить, соответствует ли он вашим требованиям. Чтобы выбрать строку, нажмите на номер каждой строки слева от вас.

Код:

 Option Explicit

Sub test()

    Dim RowNo As Long

    With ThisWorkbook.Worksheets("Sheet1")

        RowNo = Selection.Row '<- Here you get the row number you have select

        .Range("M" amp; RowNo amp; ":N" amp; RowNo).Copy '<- Copy range M:N of the RowNo you have selct
        .Range("K" amp; RowNo).PasteSpecial Paste:=xlPasteValues '<- Paste in Column K row the one tou have select

        .Range("S" amp; RowNo amp; ":T" amp; RowNo).Copy
        .Range("Q" amp; RowNo).PasteSpecial Paste:=xlPasteValues

        .Range("Y" amp; RowNo amp; ":Z" amp; RowNo).Copy
        .Range("W" amp; RowNo).PasteSpecial Paste:=xlPasteValues

        .Range("AE" amp; RowNo amp; ":AF" amp; RowNo).Copy
        .Range("AC" amp; RowNo).PasteSpecial Paste:=xlPasteValues

        .Range("AI" amp; RowNo amp; ":AJ" amp; RowNo).Copy
        .Range("AG" amp; RowNo).PasteSpecial Paste:=xlPasteValues

        Application.CutCopyMode = False

    End With

End Sub
 

Комментарии:

1. Привет, большое спасибо за вашу помощь. Я обновил свой код, используя ваш, и он работает отлично.

2. @nicmdm рад слышать, что я помогаю. я отредактировал ваш ответ (добавьте «.» перед диапазоном). если ответ поможет вам, пожалуйста, проголосуйте, чтобы помочь другим.

3. для чего нужен «.»? Я только что проверил код еще раз, есть только «Range», а не «.Range», но он все еще работает. Я искал тему голосования, но не могу найти, где проголосовать, здесь тоже есть какая-нибудь помощь? 🙂

4. Как вы можете видеть из моего кода, я создал оператор «With» в начале кода. «.Range» указывает, что диапазон является частью листа, используемого в операторе with.

5. Хорошо, я понимаю, что вы имеете в виду. Однако я все еще в замешательстве, почему он работает правильно без «.» Мне придется попробовать с «.», чтобы понять разницу

Ответ №2:

Спасибо Ошибка 1004, это мне очень помогло, окончательный код теперь такой, как показано ниже, и работает отлично, благодаря вам:

 Option Explicit

Sub COPIERVALEURS()

' COPIERVALEURS Macro
' Touche de raccourci du clavier: Ctrl Shift V

    Dim RowNo As Long

    With ThisWorkbook.Worksheets("PAQ")

        RowNo = Selection.Row '<- Here you get the row number you have select

        .Range("A" amp; RowNo amp; ":H" amp; RowNo).Copy
        .Range("A" amp; RowNo amp; ":H" amp; RowNo).PasteSpecial Paste:=xlPasteValues
        .Range("M" amp; RowNo amp; ":N" amp; RowNo).Copy
        .Range("K" amp; RowNo).PasteSpecial Paste:=xlPasteValues
        .Range("S" amp; RowNo amp; ":T" amp; RowNo).Copy
        .Range("Q" amp; RowNo).PasteSpecial Paste:=xlPasteValues
        .Range("Y" amp; RowNo amp; ":Z" amp; RowNo).Copy
        .Range("W" amp; RowNo).PasteSpecial Paste:=xlPasteValues
        .Range("AE" amp; RowNo amp; ":AF" amp; RowNo).Copy
        .Range("AC" amp; RowNo).PasteSpecial Paste:=xlPasteValues
        ActiveWindow.SmallScroll ToRight:=5
        .Range("AI" amp; RowNo amp; ":AJ" amp; RowNo).Copy
        .Range("AG" amp; RowNo).PasteSpecial Paste:=xlPasteValues
        .Range("AK" amp; RowNo).Copy
        .Range("AK" amp; RowNo).PasteSpecial Paste:=xlPasteValues

    End With

End Sub