VBA - как выбрать столбец, содержащий определенную ячейку и назвать его выходной столбец? - PullRequest
0 голосов
/ 25 января 2019

В другом листе есть ячейка, значение которой находится в диапазоне от 1 до 100, я определил ее имя как «SpanLength» в менеджере имен.На листе, который меня сейчас интересует, я хочу найти ячейку, которая содержит то же значение, что и «SpanLength», то есть значение от 1 до 100, в пределах диапазона, который я определил как «FindSpanLength».Затем я хочу назвать столбец, что эта ячейка находится в «outputcolumn», чтобы я мог использовать этот столбец далее в сценарии.Как я могу это сделать?

Строка кода перед End Sub вызывает сообщение об ошибке «Неверное количество аргументов или неправильное присвоение свойства»

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

Sub OutputMaximums()

Dim spanlengthcell As Range
Set spanlengthcell = Range("FindSpanLength").Find("SpanLength")
Range("spanlengthcell").Column(1) = outputcolumn 

End Sub

Новый код с сообщением об ошибке 1004 (метод «Диапазон» объекта «_Worksheet» не выполнен):

Sub OutputMaximums()

Dim spanlengthcell As Range, outputcolumn As Long
Set spanlengthcell = OUTPUT.Range("FindSpanLength").Find(Range("SpanLength").Value)
If Not spanlengthcell Is Nothing Then
outputcolumn = spanlengthcell.Column
End If

End Sub

Ответы [ 3 ]

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

Когда вы присваиваете значение переменной, переменная находится слева от знака равенства.

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

Рекомендуется также указать ряд Find параметров, поскольку они могут иметь неожиданные настройки, когда они последний раз использовались на листе.

Sub OutputMaximums()

Dim spanlengthcell As Range, outputcolumn As Long

Set spanlengthcell = Range("FindSpanLength").Find(Range("SpanLength").Value)
If Not spanlengthcell Is Nothing Then
    outputcolumn = spanlengthcell.Column
End If

End Sub
0 голосов
/ 25 января 2019
Option Explicit

Sub test()

    Dim rngSearch As Range, rngFound As Range
    Dim strSearch As String
    Dim ColumnNo As Long

    strSearch = "Bingo"

    With ThisWorkbook.Worksheets("Sheet1")

        Set rngSearch = .UsedRange

        Set rngFound = rngSearch.Find(strSearch)

        If rngFound Is Nothing Then
            MsgBox strSearch & " does not excist in range."
        Else
            ColumnNo = rngFound.Column

            MsgBox "Text appears in column " & ColumnNo & "."
        End If

    End With

End Sub
0 голосов
/ 25 января 2019
Sub ShowNamedRange()

'The named Range "SpanLenght" must be on the Sheet "SheetWithNamedRange"!

Debug.Print Sheet("SheetWithNamedRange").Range("SpanLength").Address
Debug.Print Sheet("SheetWithNamedRange").Range("SpanLength").Column

End Sub

и после прочтения вопроса снова:

Sub SearchRange()
    Dim rngSearch As Range
    Dim rngFound As Range
    Dim strSearch As String

    strSearch = Sheets("SheetWithNamedRange").Range("SpanLength").Value
    Set rngSearch = Sheets("SheetWithFINDRange").Range("FindSpanLength")
    Set rngFound = rngSearch.Find(strSearch)

    If Not (rngFound Is Nothing) Then _
       MsgBox "Found in column " & rngFound.Column & _
         " on the sheet """ & rngFound.Parent.Name & """!"
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...