Новый макрос vba генерирует сообщение об ошибке при вводе дроби - PullRequest
0 голосов
/ 09 февраля 2020

Я пытаюсь автоматически отформатировать столбец при вводе дроби. Excel по умолчанию конвертировал дробь 5/2 в 2,50, что хорошо в определенных обстоятельствах, но мне действительно нужно было ввести начальную цену выбора, что означает, что если введено 5/2, фактический расчет будет be = 5/1 + 1 (3,50), поэтому он добавляет также к первоначальной ставке 1. 15/8 будет = 15/8 + 1 (2,88) и т. Д.

На листе у меня есть следующий код VBA.

Private Sub Worksheet_Change(ByVal Target As Range)



    On Error GoTo err_handler



    Application.EnableEvents = False

    If Target = Empty Then GoTo exit_handler



    If Not Intersect(Target, Columns("Q")) Is Nothing Then

        With Target

            .Formula = Evaluate(.Formula & "+1")

        End With

    End If



exit_handler:

    Application.EnableEvents = True



Exit Sub



err_handler:

    MsgBox Err.Number & ": " & Err.Description

    Resume exit_handler



End Sub

ОК, решено большое спасибо , Кажется, это прекрасно работает

Ответы [ 2 ]

0 голосов
/ 10 февраля 2020

Извините, возможно, выложили ответ выше, где был оригинальный код.

Этот код, похоже, решил проблему, поэтому большое спасибо за ввод

Private Sub Worksheet_Change(ByVal Target As Range)



    On Error GoTo err_handler



    Application.EnableEvents = False

    If Target = Empty Then GoTo exit_handler



    If Not Intersect(Target, Columns("Q")) Is Nothing Then

        With Target

            .Formula = Evaluate(.Formula & "+1")

        End With

    End If



exit_handler:

    Application.EnableEvents = True



Exit Sub



err_handler:

    MsgBox Err.Number & ": " & Err.Description

    Resume exit_handler



End Sub
0 голосов
/ 09 февраля 2020

Я не уверен, что вы поняли, как именно использовать функцию, даже если я могу ошибаться ... Чтобы работать так, как вы, sh, вы должны действовать следующим образом:

  1. Создайте событие Worksheet_Change для листа, на котором вы собираетесь работать. Он будет вызывать только указанную выше функцию.

    Private Sub Worksheet_Change(ByVal Target As Range) Starting_Price Target End Sub

Если вы не знаете, как создать такое событие, не стесняйтесь спрашивать;

Затем вы должны поместить указанный выше код в тот же модуль листа . Точно так же, как он или немного изменен для использования только VBA (без RegExp):

Private Sub Starting_Price(ByVal Target As Range) On Error GoTo err_handler Application.EnableEvents = False If Target = Empty Then GoTo exit_handler If Not Intersect(Target, Columns("P")) Is Nothing Then With Target If Target.HasFormula Then .Formula = .Formula & "+1" End If End With End If

exit_handler: Application.EnableEvents = True Exit Sub err_handler: MsgBox Err.Number & ": " & Err.Description Resume exit_handler End Sub

Будьте внимательны, чтобы ввести (только в столбце P: P) ваша дробь, как формула: = 5/2;

Убедитесь, что ваша книга Excel имеет тип .xlsm.

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