Сохранение текущего значения ячейки, добавление формулы, затем изменение формата на пользовательский

Я пытаюсь сохранить текущее значение ячейки в переменной, изменить ее новое значение на формулу, а затем отформатировать ячейку с помощью пользовательского типа хранимой переменной.

Например: Ячейка B3 говорит "Привет" «Привет» хранится в переменной sValue Ячейка B3 изменяется на равную D3 (= D3) Пользовательский тип формата завершен, чтобы по-прежнему читать «Hello».

Тем не менее, я получаю

Ошибка выполнения «13»:

Несоответствие типов

По значению.

Обновленный код на основе комментариев:

Private Sub Worksheet_Change(ByVal Target As Range)

Dim sValue As Long

If Not Intersect(Target, Range("B3:B41")) Is Nothing Then
    sValue = Target.Value
    Target.Formula = "=D" & Target.Row
    Target.NumberFormat = Chr(34) & sValue & Chr(34)
End If
End Sub

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

когда вы вручную меняете ячейку, Target будет ячейкой, которая только что изменилась, а не ячейкой, в которую вы только что вошли.

Scott Craner 14.12.2020 23:55

Это полезно знать, поэтому по существу измените ActiveCell.Value на Target.Value и Target.Formula.

Kevin P. 14.12.2020 23:57

правильно, используйте Target вместо всех ActiveCell и удалите Offset

Scott Craner 14.12.2020 23:58

Вам также нужно будет экранировать \ любую букву, которая используется в качестве короткой руки формата. Например H это час и будет читаться как таковой. Таким образом, вам нужно будет сделать замену для каждого, который может быть использован, а это довольно много.

Scott Craner 15.12.2020 00:00

должно быть Target.NumberFormat =

Scott Craner 15.12.2020 00:01

Не уверен, что вы имеете в виду, я понимаю, что вы говорите о сокращении, но где это мешает в моем случае? Также все еще получаю ошибку в моей переменной.

Kevin P. 15.12.2020 00:03

см. мой последний комментарий об ошибке. например, Hello будет выглядеть как {somenumber}ello, где {somenumber} будет числом от 0 до 23.

Scott Craner 15.12.2020 00:04

Я обновил пост новыми подробностями. Итак, я не могу просто сохранить значение ячейки в виде строки переменной?

Kevin P. 15.12.2020 00:09

Вы обновили код, но не проблема. Поскольку ошибка, вероятно, теперь другая.

Scott Craner 15.12.2020 00:12

Помогает ли то, что моя переменная всегда будет текстовой? Я думаю, что неправильно использовал Long.

Kevin P. 15.12.2020 00:15

Да, это должна быть строка, но она все равно не будет правильно отформатирована. Это исправит ошибку.

Scott Craner 15.12.2020 00:19

Поэтому я изменил его на String и получил ошибку времени выполнения «28»: недостаточно места в стеке.

Kevin P. 15.12.2020 00:24

Теперь вам нужно отключить события и снова включить после внесения изменений.

Scott Craner 15.12.2020 00:25

Кстати: я был неправ, что мне нужен побег.

Scott Craner 15.12.2020 00:31
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
14
88
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

судя по комментариям:

Private Sub Worksheet_Change(ByVal Target As Range)

    Dim sValue As String
    
    If Not Intersect(Target, Range("B3:B41")) Is Nothing Then
        Application.EnableEvents = False
        On Error GoTo safeout
        sValue = Target.Value
        Target.Formula = "=D" & Target.Row
        Target.NumberFormat = Chr(34) & sValue & Chr(34)
    End If
safeout:
    Application.EnableEvents = True
End Sub

Другие вопросы по теме