Как определить книгу / рабочий лист и функцию условного копирования и вставки - PullRequest
0 голосов
/ 01 мая 2020

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

Мне было интересно, могли бы вы сказать мне, почему я получаю ошибку?

Я получаю:

Ошибка времени выполнения '1004': определяется приложением или объектно-определяемая ошибка

Заранее спасибо

Sub layercopypaste()

Dim rng As Range
Set rng = Application.Range(Cell1:="[L5:M9")

    If ("M4") = 2 Then
      Range("L5:M9").Copy Range("L9")
    ElseIf ("M4") = 3 Then
      Range("L5:M9").Copy Range("L9:L13")
    ElseIf ("M4") = 4 Then
      Range("L5:M9").Copy Range("L9, L13, L17")
    Else
      Range("L5:M9").Copy Range("L9, L14, L19, L21")

End If

End Sub

1 Ответ

0 голосов
/ 01 мая 2020

Здесь есть несколько неправильных вещей.

Во-первых, вы должны использовать явные ссылки, поэтому объявите свои рабочие листы.

Во-вторых, вы фактически никогда не используете диапазон, установленный для переменной , Это также не правильный синтаксис. Set rng = Application.Range(Cell1:="[L5:M9") Удалить Cell1, это именованный аргумент, но это неправильное использование. У вас также есть одна скобка, вы не хотите ни одной. Вам также не нужно приложение.

В-третьих, вам нужен диапазон перед всеми вашими диапазонами. ("M4") выдаст синтаксическую ошибку.

Четвёртый в этой ситуации Range("L5:M9").Copy Range("L9") и Range("L5:M9").Copy Range("L9:L13") сделают то же самое, так как диапазон копирования больше указанных целевых диапазонов.

В-пятых, я предполагаю, что вы хотите вставить в несколько диапазонов эту строку Range("L5:M9").Copy Range("L9, L13, L17"), которая вызовет синтаксическую ошибку, которая не является правильным диапазоном. Вам нужно использовать Union, чтобы сделать это. Хотя вы также получите сообщение об ошибке, поскольку целевой диапазон перекрывает диапазон копирования.

Наконец, это, вероятно, должно быть Select Case, а не If.

Sub layercopypaste()

    Dim myworkbook As Workbook
    Dim mysheet As Worksheet
    Set myworkbook = ThisWorkbook
    Set mysheet = myworkbook.Sheets("Sheet1") 'Or whatever your sheet name is

    With mysheet
        Dim rng As Range
        Set rng = .Range("L5:M9")

        Select Case .Range("M4").Value
            Case 2, 3
                rng.Copy .Range("L9")
            Case 4
                rng.Copy Union(.Range("L11"), .Range("L17"), .Range("L23"))
            Case Else
                rng.Copy Union(.Range("L11"), .Range("L17"), .Range("L23"), .Range("L29"))
        End Select
    End With
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...