Как мне заставить VBA скопировать диапазон ячеек, ПОДОЖДИТЕ, ЧТО ЯЧЕЙКИ ВЫЧИТАЮТ и вставить в другой диапазон?

Этот код войдет в лист и переключит ячейку на определенную функцию, связанную с диапазоном, который я собираюсь скопировать. Затем он вставит значения на другой лист в определенную ячейку. Я меняю ActiveCell (строка 6) с каждым копированием и вставкой. Этот код не ждет, пока ячейки будут скопированы для расчета. Поэтому на всем листе у меня одинаковые значения ячеек. Любая помощь была бы замечательной :) Я попробовал «Application.Calculate», и это не сработало. Этот код копирует и вставляет 100 различных тикеров для акций, которые я включил пять серий кодов, но они продолжают записывать цену каждой акции.

Sheets("Investing").Select
    ActiveWindow.SmallScroll Down:=21
    Sheets("Homepage").Select
    Range("J2").Select
    Application.CutCopyMode = False
    ActiveCell.FormulaR1C1 = "=Investing!R[268]C[-9]"
    Range("J3").Select
    Sheets("Investing").Select
    ActiveWindow.SmallScroll Down:=-12
    Range("A249:B260").Select
    Selection.Copy
    Sheets("Daily Strategies").Select
    Range("E5").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Sheets("Homepage").Select
    Range("J2").Select
    Application.CutCopyMode = False
    ActiveCell.FormulaR1C1 = "=Investing!R[269]C[-9]"
    Range("J3").Select
    Sheets("Investing").Select
    Range("A249:B260").Select
    Selection.Copy
    Range("D283").Select
    Sheets("Daily Strategies").Select
    Range("G5").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Sheets("Homepage").Select
    Range("J2").Select
    Application.CutCopyMode = False
    ActiveCell.FormulaR1C1 = "=Investing!R[270]C[-9]"
    Range("J3").Select
    Sheets("Investing").Select
    Range("A249:B260").Select
    Selection.Copy
    Sheets("Daily Strategies").Select
    Range("I5").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Sheets("Homepage").Select
    Range("J2").Select
    Application.CutCopyMode = False
    ActiveCell.FormulaR1C1 = "=Investing!R[271]C[-9]"
    Range("J3").Select
    Sheets("Investing").Select
    Range("A249:B260").Select
    Selection.Copy
    Sheets("Daily Strategies").Select
    Range("K5").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Sheets("Homepage").Select
    Range("J2").Select
    Application.CutCopyMode = False
    ActiveCell.FormulaR1C1 = "=Investing!R[272]C[-9]"
    Range("J3").Select
    Sheets("Investing").Select
    Range("A249:B260").Select
    Selection.Copy
    Sheets("Daily Strategies").Select
    Range("M5").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False

I


person AND AND AND    schedule 19.06.2020    source источник
comment
This code isn't waiting for the cells that will be copied to calculate - какой у вас режим расчета?   -  person GSerg    schedule 19.06.2020
comment
@ VBasic2008 Я обновил для вас свою серию статей. Я не хочу включать весь код, потому что это один и тот же процесс, просто вставляя другое уравнение в J2 и копируя, а затем вставляя то, что вычисляет это уравнение.   -  person AND AND AND    schedule 19.06.2020
comment
нет, нет, нет ... Вы должны очистить свой код после записи макросов. Прочтите сначала Как избежать выбора и Как копировать без буфера обмена   -  person Rafał B.    schedule 19.06.2020
comment
Мне нужны формулы в ячейках A249:B260 листа Investing и / или объяснение того, как там меняются значения, если это неочевидно. Если 268 - первое число, какое последнее или оно динамическое?   -  person VBasic2008    schedule 19.06.2020
comment
@ VBasic2008 369 - последняя ячейка, из которой он извлекает данные. Биржевой тикер находится в 268, 269, 270 и т. Д. Эта акция помещается в J2, на которую ссылается другая ячейка, чтобы подтянуть старые цены акций. Затем старые цены на акции выдают сигналы покупки / продажи, которые присутствуют в A249: B260. Эти сигналы покупки / продажи меняются для каждого тикера акций в 268, 269 и т. Д. Мой код проходит и меняет тикеры акций идеально, но идет слишком быстро и не позволяет Excel вычислять различные сигналы покупки / продажи для каждой акции. Извините, это много и очень сложно, дайте мне знать, если я могу объяснить больше   -  person AND AND AND    schedule 19.06.2020
comment
Почему не pastespecial.values?   -  person Solar Mike    schedule 20.06.2020
comment
@SolarMike, как ты это делаешь?   -  person AND AND AND    schedule 20.06.2020


Ответы (1)


Расчет в рабочей тетради

  • Скопируйте код в стандартный модуль (например, Module1).
  • Настройте константы, включая книгу.
  • Если это не сработает, поэкспериментируйте с закомментированными строками, содержащими Calculate, одну за другой.

Код

Option Explicit

Sub insertVarious()

    'Application.CalculateFullRebuild

    Const hpgName As String = "Homepage"
    Const hpgCell As String = "J2"

    Const invName As String = "Investing"
    Const invAddr As String = "A249:B260"
    Const invAddr2 As String = "A270:A371"

    Const dstName As String = "Daily Strategies"
    Const dstFirst As String = "E5"

    Dim wb As Workbook: Set wb = ThisWorkbook

    Dim hpg As Range: Set hpg = wb.Worksheets(hpgName).Range(hpgCell)
    Dim inv As Range: Set inv = wb.Worksheets(invName).Range(invAddr)
    Dim inv2 As Range: Set inv2 = wb.Worksheets(invName).Range(invAddr2)
    Dim UB1 As Long: UB1 = inv.Rows.Count
    Dim UB2 As Long: UB2 = inv.Columns.Count
    Dim NoA As Long: NoA = inv2.Rows.Count

    Dim Daily As Variant: ReDim Daily(1 To UB1, 1 To NoA * UB2)
    Dim Curr As Variant, j As Long, k As Long, l As Long
    For j = 1 To NoA
        hpg.Value = inv2.Cells(j).Value
        'hpg.Parent.Calculate
        'inv.Parent.Calculate
        Curr = inv.Value
        GoSub writeDaily
    Next j

    wb.Worksheets(dstName).Range(dstFirst).Resize(UB1, NoA * UB2) = Daily

    MsgBox "Data transferred.", vbInformation, "Success"

    Exit Sub

writeDaily:
    For k = 1 To UB1
        For l = 1 To UB2
            Daily(k, (j - 1) * 2 + l) = Curr(k, l)
        Next l
    Next k
    Return

End Sub
person VBasic2008    schedule 19.06.2020
comment
Я хочу поблагодарить вас за то, что вы попробовали это, я очень ценю это, но это не позволяет A249: B260 рассчитывать даже после того, как я попробовал прокомментированные строки. Этот код невероятно быстрый и отличный, помимо того, что он не позволяет им вычислять. А у вас есть какие-нибудь другие идеи? Я сделаю все, что вам нужно, чтобы разобраться с этим. - person AND AND AND; 20.06.2020
comment
Он все еще просто не рассчитывается каждый раз, когда J2 изменяется со значениями в A270: A371. Если бы был способ скопировать их всех после того, как они смогли вычислить, это было бы потрясающе. - person AND AND AND; 20.06.2020