Кнопка умножения данных диапазона и кнопка, удаляющая это умножение - PullRequest
0 голосов
/ 21 февраля 2019

У меня есть две кнопки: «умножить на 0» и «показать исходное значение».

Для кнопки «умножить на 0» у меня есть приведенный ниже код, который отлично работает.Что мне нужно, так это код второй кнопки, из-за которого диапазон, умноженный на 0, возвращается к его исходному номеру.

Public Sub MultiplyByZero()

Dim rngData As Range

Set rngData = ThisWorkbook.Worksheets("Input Sheet LC").Range("I76:O103")
rngData = Evaluate(rngData.Address & "*0")

End Sub

Спасибо за вашу помощь!

Ответы [ 2 ]

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

Использование формулы вместо константы:

Public Sub MultiplyByZero()
    Dim rngData As Range, rngWork AS Range

    Set rngData = ThisWorkbook.Worksheets("Input Sheet LC").Range("I76:O103")
    For Each rngWork In rngData.Cells
        With rngWork
            If .HasFormula Then
                If Right(.Formula,2) <> "*0" Then .Formula = .Formula & "*0"
            Else
                .Formula = "=" & .Value & "*0"
            End If
        End With
    Next rngWork
End Sub

Public Sub DivideByZero()
    Dim rngData As Range, rngWork AS Range

    Set rngData = ThisWorkbook.Worksheets("Input Sheet LC").Range("I76:O103")
    For Each rngWork In rngData.Cells
        With rngWork
            If .HasFormula Then
                If Right(.Formula,2) = "*0" Then .Formula = Mid(.Formula, 1, Len(.Formula)-2)
            End If
        End With
    Next rngWork
End Sub

Это изменит 10 на =10*0, а затем обратно на =10

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

Следующий код может вам помочь.

  1. Объявите глобальную переменную с именем arr , чтобы вы могли вызывать ее из любого места - Dim arr As Variant
  2. Перед умножением на ноль мы сохраняем значения в этом массиве - arr = .Range ("A1: A5")
  3. В любое время мы можем принестивозвращаемые значения - .Range ("B1: B5"). Значение = обр.

    Option Explicit
    Dim arr As Variant
    
    Public Sub MultiplyByZero()
    
        Dim rngData As Range
        Dim cell As Range
    
        With ThisWorkbook.Worksheets("Sheet1")
    
            arr = ""
    
            Set rngData = .Range("A1:A5")
    
            arr = .Range("A1:A5")
    
            rngData = Evaluate(rngData.Address & "*0")
    
        End With
    
    End Sub
    
    Public Sub RestoreValues()
    
        With ThisWorkbook.Worksheets("Sheet1")
    
            If Not IsEmpty(arr)=True Then
                .Range("A1:A5").Value = arr
            Else
                MsgBox "Array is empty."
            End If
    
        End With
    
    End Sub
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...