Squeak.ru - шаблоны программирования

'End(xlDown)' ведет себя странно

Я подозреваю, что .end(xlDown) ведет себя немного странно.

Dim rfound As Range

Set rfound = Columns("B:B").Find(What:=Me.ComboBox1.Value, _
LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext)

If ComboBox1.Value <> "" And WorksheetFunction.CountIf(Range("B:B"), _
ComboBox1.Value) > 0 And rfound.Offset(0, 1).Value <> "" Then
rfound.Offset(0, 1).End(xlDown).Offset(1, 0).Value = TextBox1.Value

После CommandButton1_click код будет искать в столбце B любые совпадающие критерии, а затем OffSet в правой ячейке, если все мои условия соблюдены. Однако он подсказывает мне сообщение Run-time error '1004': Application defined or object-defined error.

Я понятия не имею, где проблема. Для иллюстрации:

введите здесь описание изображения

27.12.2012

  • Пожалуйста, дайте мне время подумать над ответами. Спасибо. 28.12.2012
  • Используя .end(xlUp), обратитесь к моему последнему изображению выше, если я хочу вставить «Продукт» и «Описание» в «Компанию А», это невозможно. 29.12.2012
  • Ну, вы отредактировали свой вопрос после того, как мы указали, что не так с вашим кодом - мы вряд ли догадаемся, что вы собирались изменить заранее. Если вы ожидаете постоянной помощи, то я думаю, что разумно относиться к тем, кто вам помогает, соответствующим образом. 29.12.2012
  • Думаю, мне не следовало так рьяно редактировать свой вопрос. Я верну свой вопрос в состояние, в котором он останется без редактирования. Да, действительно, я должен пересматривать себя, задавая любой вопрос, спасибо за напоминание @brettdj 29.12.2012

Ответы:


1

Ваш текущий код

  1. Предположительно находит B2 как rfound (Примечание: было бы лучше проверить, существует ли rfound после Find с помощью `If Not rfound Is Nothing Then)
  2. Тогда C2 равно rfound.Offset(0, 1)
  3. rfound.Offset(0, 1).End(xlDown) найти последнюю ячейку в столбце C, так как все остальные ячейки пусты
  4. rfound.Offset(0, 1).End(xlDown).Offset(1, 0) пытается ввести значение в ячейку на одну строку ниже самой последней строки - никак не может.

Вместо этого смотрите снизу вверх, т.е.

Then rfound.Offset(0, 1).End(xlDown).Offset(1, 0).Value = TextBox1.Value
использовать
Then Cells(Rows.Count, rfound.Offset(0, 1).Column).End(xlUp).Offset(1, 0) = TextBox1.Value

27.12.2012
  • Есть ли у вас время, чтобы подробно изучить этот вопрос? Я могу опубликовать свой код здесь, если хотите. Спасибо. 27.12.2012
  • Да, сэр. Но есть еще одна часть моего кода, которая будет вставлять другие НОВЫЕ данные в столбцы B, C и D, которые используют .end(xlUp). 27.12.2012

  • 2

    Мои три копейки...

    Красота не в том, чтобы писать сложные коды, а в том, чтобы разбить их на простые для понимания строки, чтобы было легче понять, что делает код. Также это помогает в отладке, если возникает ошибка...

    1. Вы уже знаете, что вам нужно писать в Col C, так зачем усложнять, используя Offset
    2. Проверьте, существует ли rfound, как предложил brttdj
    3. Используйте xlUp, чтобы найти последнюю строку.

    См. этот пример. (НЕ ПРОВЕРЕНО)

    Sub Sample()
        Dim rfound As Range
        Dim lRow As Long
    
        With ThisWorkbook.Sheets("Sheet1")
            Set rfound = .Columns(2).Find(What:=Me.ComboBox1.Value, _
            LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext)
    
            If Not rfound Is Nothing Then
                If ComboBox1.Value <> "" And _
                WorksheetFunction.CountIf(.Range("B:B"), ComboBox1.Value) > 0 And _
                rfound.Offset(, 1).Value <> "" Then
    
                    '~~> Find the next available row in Col C
                    lRow = .Range("C" & .Rows.Count).End(xlUp).Row + 1
    
                    '~~> Directly write to the cell
                    .Cells(lRow, 3).Value = TextBox1.Value
                End If
            Else
                MsgBox "Not Found"
            End If
        End If
    End Sub
    
    27.12.2012
  • lRow = .Range("C" & .Rows.Count).End(xlUp).Row + 1 будет искать последнюю ячейку перед пустой в этом столбце. Чего я не хочу, чтобы это произошло. 29.12.2012
  • В этом случае вы можете использовать xlDown, но убедитесь, что вы выполняете правильную обработку ошибок, чтобы проверить, не достигли ли вы конца строк, что и происходит в данный момент. :) 29.12.2012
  • Да, в конце концов мне удалось решить свои проблемы благодаря всем вашим идеям. Еще раз большое спасибо! 29.12.2012
  • Новые материалы

    Угловая структура архитектуры
    Обратите внимание, что эта статья устарела, я решил создать новую с лучшей структурой и с учетом автономных компонентов: https://medium.com/@marekpanti/angular-standalone-architecture-b645edd0d54a..

    «Данные, которые большинство людей используют для обучения своих моделей искусственного интеллекта, поставляются со встроенным…
    Первоначально опубликовано HalkTalks: https://hacktown.com.br/blog/blog/os-dados-que-a-maioria-das-pessoas-usa-para-treinar-seus-modelos-de-inteligencia-artificial- ja-vem-com-um-vies-embutido/..

    Сильный ИИ против слабого ИИ: различия парадигм искусственного интеллекта
    В последние годы изучению и развитию искусственного интеллекта (ИИ) уделяется большое внимание и прогресс. Сильный ИИ и Слабый ИИ — две основные парадигмы в области искусственного интеллекта...

    Правильный способ добавить Firebase в ваш проект React с помощью React Hooks
    React + Firebase - это мощная комбинация для быстрого и безопасного создания приложений, от проверки концепции до массового производства. Раньше (знаете, несколько месяцев назад) добавление..

    Создайте API с помощью Python FastAPI
    Создание API с помощью Python становится очень простым при использовании пакета FastAPI. После установки и импорта вы можете создать приложение FastAPI и указать несколько конечных точек. Каждой..

    Веселье с прокси-сервером JavaScript
    Прокси-серверы JavaScript — это чистый сахар, если вы хотите создать некоторую общую логику в своих приложениях, чтобы облегчить себе жизнь. Вот один пример: Связь клиент-сервер Мы..

    Получить бесплатный хостинг для разработчиков | Разместите свой сайт за несколько шагов 🔥
    Статические веб-сайты — это веб-страницы с фиксированным содержанием и его постоянным содержанием. Но теперь статические сайты также обрабатывают динамические данные с помощью API и запросов...