Значение не скопировано в правильный диапазон - PullRequest
0 голосов
/ 14 февраля 2019

У меня несколько листов в одной книге, и я пытаюсь скопировать определенную ячейку из листа 1, 2 и т. Д. И вставить в столбец G на листе "Заявка".

Лист 1, 2, & x имеют одинаковый формат.

При копировании я бы хотел вставить из первой пустой ячейки до общего количества записей из листа 1/2 / х.

Проблемы:

  1. Значение, вставленное в столбец, переопределяется при обработке нескольких листов.
  2. Скопированный из значения - мне нужен только один компонентклетка, но не уверен, как этого добиться.например, MID (Cell, 5,11)

лист 1, 2 и x - это защищенные листы, которые я импортирую из другого места, и я не хочу писать

Sub AddClaimRef()
Dim nrow As Long
Dim Lastrow As Long


'Add Claim Reference
For x = 1 To Sheets.Count
If Worksheets(x).Range("A2").Value = "STORE NAME:" Then
Worksheets(x).Select
Lastrow = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row
Cells(1, 9).Copy


Worksheets("Claim").Select
nrow = ActiveSheet.Cells(Rows.Count, 7).End(xlUp).Row
Range(Cells(nrow + 1, 7), Cells(Lastrow - 9, 7)).Select
ActiveSheet.Paste
End If
Next


End Sub

Ожидаемый результат -

  1. Mid (ячейка (1,9), 5,11) скопирована с листа 1 - x, но я не знаю, как это сделать. Я был тольковозможность скопировать ячейку (1,9)

  2. Если на листе 1 имеется 100 записей со значением ячейки «SHEET1», то на листе 2 имеется 200 записей со значением ячейки «SHEET2». Я ожидаю, что столбецG, чтобы заполнить значение «SHEET1» из строки 2 в строку 101 и заполнить «SHEET2» из строки 102 в 302

Но на самом деле получается, что строки 2 в строку 101 переопределяются по значению"Лист2"

1 Ответ

0 голосов
/ 14 февраля 2019
  1. NO .Select и NO .Activate и NO .ActiveSheet
  2. Объявите все ваши переменные (x) и квалифицируйте все свои диапазоны [What Sheet?].Cells(.....
  3. Вам необходимо рассчитать последнюю строку на листе для вставки, так как она меняется с каждым циклом
  4. Это установлено для копирования из Range("I9") на каждом листе, который вы просматриваете
  5. Это установлено для вставки на Last Row + 1 на Column G и будет повторять значение, определенное ws.Column A
  6. Правильный отступ вашего кода делает циклыи в дальнейшем будет намного легче следовать / отлаживать / обновлять

Option Explicit

Sub Update()

Dim Claim As Worksheet: Set Claim = ThisWorkbook.Sheets("Claim")
Dim ws As Worksheet, LRp As Long, LRc As Long

For Each ws In Worksheets
    If ws.Name <> Claim.Name Then
        If ws.Range("A2") = "STORE NAME:" Then

            LRc = ws.Range("A" & ws.Rows.Count).End(xlUp).Row
            LRp = Claim.Range("G" & Claim.Rows.Count).End(xlUp).Offset(1).Row
            Claim.Range(Claim.Cells(LRp, 7), Claim.Cells(LRp + LRc - 1, 7)).Value = Mid(ws.Range("I9"), 5, 11)

        End If
    End If
Next ws

End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...