Почему я получаю ошибку компиляции в этом макросе - PullRequest
0 голосов
/ 16 апреля 2019

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

Что мне нужно, чтобы выяснить, это сделатьиметь 1) "d8 = d" в правильном порядке, если он должен быть перемещен вверх 2) правильный ли синтаксис для диапазона копирования / вставки?

3) как мне сказать, что копировать / вставлять какзначения по одной строке за раз?

Вот лист с ячейками, которые я хочу скопировать / вставить как значения enter image description here

Даст ли мне этот код то, что яВы хотите подключить выпадающий список, вычислить формулы, копировать и вставлять по одной строке за раз?

Sub Copy_Paste()
Sheets("MS Wall Summary Weekly View").Activate
    Dim vRws As Long, vRng As Range
    Dim d As Range, d8 As Range, Wst As Worksheet
    Dim vRng2 As Range, vRws2 As Long, i As Long

Set Wst = Worksheets("MS Wall Summary Weekly View")
Set d8 = Wst.Range("D8")

With Wst
   vRws = .Cells(.Rows.Count, "A").End(xlUp).Row
    Set vRng = Range(.Cells(2, "A"), .Cells(vRws, "A"))
End With

For Each d In vRng.Cells

d8 = d
Sheets("Email").Activate
With ActiveSheet
    vRws2 = .Cells(.Rows.Count, "U").End(x1Up).Row
    For i = 8 To vRws2
        Set vRng2 = Range("U" & i & "AC" & i)
            vRng2.Copy
                vRng2.PasteSpecial Paste:=xlPasteValues
End With

Next d
Next i

1 Ответ

2 голосов
/ 16 апреля 2019

Приятная особенность ошибок компиляции в том, что они точно указывают, где существует ошибка. У вас были опечатки и неправильная сборка строк в отмеченных строках ниже

  1. Ошибка 1: ...End(x1Up) (вы поменяли число 1 на букву l).
  2. Ошибка 2: Set vRng2 = Range (""U" & i:"AC"& i"). У вас есть двойные кавычки вокруг U, и вы не заключили : в кавычки. Вы также оставили i внутри кавычек. Пожалуйста, смотрите правильный метод в коде ниже

Option Explicit

Sub Copy_Paste()
Sheets("MS Wall Summary Weekly View").Activate
    Dim vRws As Long, vRng As Range
    Dim d As Range, d8 As Range, Wst As Worksheet
    Dim vRng2 As Range, vRws2 As Long, i As Long

Set Wst = Worksheets("MS Wall Summary Weekly View")
Set d8 = Wst.Range("D8")

With Wst
   vRws = .Cells(.Rows.Count, "A").End(xlUp).Row
    Set vRng = .Range(.Cells(2, "A"), .Cells(vRws, "A"))
End With

For Each d In vRng.Cells

d8 = d
Sheets("Email").Activate
With ActiveSheet
    vRws2 = .Cells(.Rows.Count, "U").End(xlUp).Row '< -- Here
    For i = 8 To vRws2
        Set vRng2 = .Range("U" & i & "AC" & i)      '< -- Here
    Next d

Несколько других проблем с первого взгляда

  1. Объявите вашу переменную листа MS Wall Summary Weekly View сразу и удалите строку .Activate в начале
  2. Вы не используете свой блок With полностью. Ваши Range свойства должны иметь префикс с точкой
  3. Вы объявили d8 как диапазон, но вы установили его равным d. Вам может понадобиться пересмотреть цель, так как это недопустимый диапазон
  4. Построить диапазон из нескольких ячеек проще с использованием свойства Cells ( При ошибке 2: выше ). Вместо этого вы можете использовать .Range(.Cells(i, "U"), .Cells(i, "AC")) (обратите внимание на точку квалификатора, идущую против блочной переменной With ActiveSheet)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...