проблема объявления переменной как определенной ячейки на листе - PullRequest
0 голосов
/ 12 февраля 2019

Очень плохо знаком с VBA.У меня возникли проблемы с объявлением переменной в качестве определенной ячейки на листе.

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

Sub findcomponents()

    Dim raw As Worksheet
    Dim res As Worksheet
    Dim temp As Worksheet
    Dim testname As String
    Dim finalrow1 As Integer
    Dim finalrow2 As Integer
    Dim i As Integer



    Set raw = Worksheets("rawdata")
    Set res = Worksheets("resultcomponents")
    Set temp = Worksheets("uploadtemplate")

    testname = raw.Range("E2").Value


    finalrow1 = raw.Range("A10000").End(xlUp).Row
    finalrow2 = res.Range("A10000").End(xlUp).Row

    For i = 2 To finalrow2
        If res.Cells(i, 4) = testname Then
            Range(Cells(i, 2), Cells(i, 4)).Copy
            temp.Range("A10000").End(xlUp).Cells("A2").Paste
        End If
    Next i

    End Sub

Я ожидаю, что значением будет строка в ячейке E2 Редактировать: я добавил оставшуюся частькод.Когда я бегу, это ничего не делает.Предполагается взять строку testname и пройтись по списку на листе res и вернуть совпадения.Я поместил часы в строку testname, потому что я думал, что это покажет мне, что она сравнивает правильную строку, а значение в строке наблюдения говорит

да, строка вставки неверна.Я также попробовал temp.Range ("A10000"). End (xlUp) .Offset (1, 0) .Paste, и это тоже его злит.

Исправление работает с редактированием имени листа.Но есть больше, чем 1 совпадение на рабочем листе res.Вот почему я подумал, что поиск последней строки (но я должен иметь смещение 1 строки) вернет все совпадения.Это работает, чтобы вернуть все значения.temp.Range ("A10000"). End (xlUp) .Offset (1, 0) .PasteSpecial xlPasteValues ​​

Есть ли лучший способ сделать это, не используя Range ("A10000"). End (xlUp)

1 Ответ

0 голосов
/ 12 февраля 2019

Ваша ключевая проблема с оператором вставки.

Вы можете использовать один из двух следующих способов для вставки (хотя следует отметить, что есть другие)

Range.Copy PasteRange

или

Range.Copy
PasteRange.PasteSpecial (paste type (values, formats, etc.))

Также обновлены более стандартные блоки переменных / имена переменных для расчетов Last Row.Также обратите внимание, что я также обновил расчет Last Row, чтобы он стал немного более динамичным.Наконец, замена Integer на Long


Option Explicit

Sub findcomponents()

Dim raw As Worksheet: Set raw = ThisWorkbook.Sheets("rawdata")
Dim res As Worksheet: Set res = ThisWorkbook.Sheets("resultcomponents")
Dim temp As Worksheet: Set temp = ThisWorkbook.Sheets("uploadtemplate")

Dim testname As String
Dim LR1 As Long, LR2 As Long, LR3 As Long, i As Long

LR1 = raw.Range("A" & raw.Rows.Count).End(xlUp).Row  '<-- This variable is never used??
LR2 = res.Range("A" & res.Rows.Count).End(xlUp).Row  '<-- Updated for standard Last Row (LR) calculation

For i = 2 To LR2
    If res.Cells(i, 4) = raw.Range("E2") Then
        res.Range(res.Cells(i, 2), res.Cells(i, 4)).Copy  '<-- Qaulified Ranges!!
        LR3 = temp.Range("A" & temp.Rows.Count).End(xlUp).Offset(1).Row
        temp.Range("A" & LR3).PasteSpecial xlPasteValues '<-- Correct Paste Method
    End If
Next i

End Sub

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

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