Макрос копирует значения ячеек из одних ячеек, но не из других - PullRequest
0 голосов
/ 11 апреля 2020

Я пытался создать макрос, который копирует некоторые значения из одних ячеек в другие. У меня есть код, который получает следующую строку в таблице, а затем копирует значения ячеек и вставляет их в таблицу. Это работает только для половины я копирую sh для копирования. Он копирует и вставляет значения из ячеек B4 и B5, но не F5 и F7 (см. Ниже)

Sub YesTrade()
    Dim lastRow As Long
    Dim currentDate As String

    currentDate = Date
    lastRow = Worksheets("Trades").Cells(Rows.Count, 1).End(xlUp).Row
    Worksheets("Trades").Cells(lastRow + 1, 1).Value = Date

    Worksheets("Calculator").Range("B4").Copy Worksheets("Trades").Cells(lastRow + 1, 2)
    Worksheets("Calculator").Range("B5").Copy Worksheets("Trades").Cells(lastRow + 1, 3)
    Worksheets("Calculator").Range("F5").Copy Worksheets("Trades").Cells(lastRow + 1, 4)
    Worksheets("Calculator").Range("F7").Copy Worksheets("Trades").Cells(lastRow + 1, 5)
End Sub

Ответы [ 3 ]

1 голос
/ 12 апреля 2020

Почему бы не использовать простое .Value свойство Range объекта?

Worksheets("Trades").Cells(lastRow + 1, 2).Value = Worksheets("Calculator").Range("B4").Value
Worksheets("Trades").Cells(lastRow + 1, 3).Value = Worksheets("Calculator").Range("B5").Value
Worksheets("Trades").Cells(lastRow + 1, 4).Value = Worksheets("Calculator").Range("F5").Value
Worksheets("Trades").Cells(lastRow + 1, 5).Value = Worksheets("Calculator").Range("F7").Value
0 голосов
/ 12 апреля 2020

Полагаю, ваша проблема в том, что вы копируете / вставляете некоторые формулы, которые в целевом листе дают ноль

Затем вы можете последовать предложению Михаила Турчина (использовать свойство Value) и сократить код с использованием With ...End With синтаксис

Sub YesTrade()
    Worksheets("Trades").Cells(Rows.Count, 1).End(xlUp).Offset(1).Value = Date
    With Worksheets("Calculator")
        Worksheets("Trades").Cells(Rows.Count, 1).End(xlUp).Offset(, 1).Resize(, 4).Value = Array(.Range("B4"), .Range("B5"), .Range("F5"), .Range("F7"))
    End With
End Sub

или (возможно) более читабельным образом:

Sub YesTrade()
    Worksheets("Trades").Cells(Rows.Count, 1).End(xlUp).Offset(1).Value = Date
    With Worksheets("Calculator")
        Worksheets("Trades").Cells(Rows.Count, 1).End(xlUp).Offset(, 1).Resize(, 4).Value = Array(.Range("B4"), _
                                                                                                  .Range("B5"), _
                                                                                                  .Range("F5"), _
                                                                                                  .Range("F7"))
    End With
End Sub
0 голосов
/ 12 апреля 2020

Я рекомендую использовать PasteSpecial или Destination. Вот один пример с PasteSpecial, который копирует и вставляет только значения:

   'Copy values
   Worksheets("Calculator").Range("F5").Copy
   'Paste Values with PasteSpecial
   Worksheets("Trades").Cells(lastRow + 1, 4).PasteSpecial Paste:=xlPasteValues

Пример с назначением:

   'Copy values
   Worksheets("Calculator").Range("F5").Copy Destination:=Worksheets("Trades").Cells(lastRow + 1, 4)

Надеюсь, это поможет решить вашу проблему. Если это не так, предоставьте больше информации о значениях в ваших ячейках.

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