VBA - Как вывести переменную для конкретной строки и столбца в Excel? - PullRequest
0 голосов
/ 28 января 2019

Этот код должен найти правильную ячейку (в столбце, соответствующем ее 'длине' и следующей пустой строке), в которой нужно вывести переменную.

Я получаю сообщение об ошибке:

диапазон методов объекта _workheet не удалось

в строках 13 и далее, содержащих «outputcolumn»

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

Private Sub OutputRowAndColumn()

    'Choose correct column: Find the length column and name this outputcolumn
    Dim cell As Range, outputcolumn As Integer
    Set cell = Range("FindLength").Find(Range("Length").Value, LookIn:=xlValues)
    If Not cell Is Nothing Then
        outputcolumn = cell.Column
    End If

    MsgBox "Output column is number " & outputcolumn & "."

    'Choose correct row: If the cell to the left of "cell" is empty then this is the first row of output otherwise find next empty cell down
    If Sheet1.Range(outputcolumn & "4").Offset(0, 1).Value = "" Then
        outputrow = 4 ''' error msg '''
    ElseIf Sheet1.Range(outputcolumn & "5").Offset(0, 1).Value = "" Then
        outputrow = 5
    Else
        outputrow = Sheet1.Range(outputcolumn & "4").Offset(0, 1).End(xlDown).Row + 1
    End If

    MsgBox "Output row is number " & outputrow & "."

    'Copy values 1, 2 and 3 from sheet 2 to sheet 1
    Sheet1.Range(outputcolumn & outputrow).Offset(0, 1).Value = Sheet2.Range("Value1").Value ''' error msg '''
    Sheet1.Range(outputcolumn & outputrow).Offset(0, 2).Value = Sheet2.Range("Value2").Value
    Sheet1.Range(outputcolumn & outputrow).Offset(0, 3).Value = Sheet2.Range("Value3").Value

End Sub

Ответы [ 2 ]

0 голосов
/ 28 января 2019

outputcolumn - это числовое значение (вы определили его как Integer, но вы всегда должны определять переменные, содержащие номера строк или столбцов как long, чтобы избежать ошибок переполнения).

Допустим, outputcolumn получает число 2 (столбец B).Вы пишете Sheet1.Range(outputcolumn & "4").Чтобы получить доступ к диапазону по его адресу, вам нужно написать что-то вроде Range("B4"), но вы пишете Range(2 & "4"), что означает Range("24"), и это неверный адрес для Range.

Вы можете попытаться перевести номер столбца 2 в B, но есть более простой способ доступа к ячейке, если вы знаете номер строки и столбца: просто используйте свойство cells:

If Sheet1.Cells(4, outputcolumn).Offset(0, 1).Value = "" Then
' (or)
If Sheet1.Cells(4, outputcolumn+1).Value = "" Then

Просто обратите внимание, что порядок параметров - строка, столбец.

0 голосов
/ 28 января 2019

«outputcolumn» является числовым в вашем случае, и при использовании .Range () это должна быть правильная буквенно-цифровая ссылка на ячейку, например «C5», а не все числовые.

Я не пробовал напрямуюно изменение этого ...

If Not cell Is Nothing Then
    outputcolumn = cell.Column
End If

... на это ...

If Not cell Is Nothing Then
    outputcolumn = Split(cell.Address, "$")(1)
End If

... поможет вам.

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