Делать все значения ячеек в диапазоне отрицательными - PullRequest
0 голосов
/ 08 февраля 2019

В настоящее время я пытаюсь сделать две вещи.

1) Поменять значения в двух столбцах.Значения изначально указаны как долгота, а затем широта.Я хочу, чтобы Latitude был указан первым, и я выполнил это в первой части кода.

2) Проблемная область.Долготы публикуются как положительное значение, но должны быть отрицательными, поскольку отрицательное значение обеспечит правильное местоположение.Я нашел ответ на

Преобразование положительных значений столбца в отрицательные значения VBA

, чтобы сделать отрицательными все значения в диапазоне и включить значения пустых ячеек в диапазоне.Я пытался изменить код в соответствии с моими потребностями, но получаю ошибку времени выполнения «1004» - метод «Range» объекта «_Global» не удался.

Если бы кто-нибудь мог мне помочь, это было бы очень признательно!

Public Sub CorrectLongitude()

    Dim tempRange As Variant
    Dim Longitude As Range
    Dim Latitude As Range

    '1) Swap Longitude and Latitude

    Worksheets("Raw_Data").Activate

    Set Longitude = Worksheets("Raw_Data").UsedRange.Columns("AR")
    Set Latitude = Worksheets("Raw_Data").UsedRange.Columns("AS")

    tempRange = Longitude.Cells
    Longitude.Cells.Value = Latitude.Cells.Value
    Latitude.Cells.Value = tempRange

    '2) Make Longitude values negative
    'Variable "Latitude is used as Latitude now contains the longitude values from above

    For Each Latitude In Range(Range("AS"), Range("AS" & Rows.Count).End(xlUp))

        If Not IsEmpty(Latitude.Value) Then If IsNumeric(Latitude.Value) Then Latitude.Value = -Abs(Latitude.Value)

        Next

End Sub

1 Ответ

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

Вы фактически коллируете диапазон Range(Range("AS"),Range("AS1000")).Вам не хватает ссылки на первую строку.

For Each Latitude In Range(Range("AS1"), Range("AS" & Rows.Count).End(xlUp))

Редактировать: личное предложение, не используйте For each Latitude, поскольку у вас есть Latitude в качестве определенного диапазона в другом месте, и это может сбить вас с толку VBA /,Я обычно делаю Dim cel as Range // For each cel in ....Если вы попытаетесь использовать Latitude.Cells.Value после цикла For, результат будет сильно отличаться от того, который вы вызывали до этого.

Возможно, вы сможете сделать For each cel in Latitude, предполагая, что с помощьюUsedRange в Set Latitude = ... включает все необходимые вам строки.

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