Перетаскивание динамических данных из Sheet2 в Sheet1, а затем в Sheet3..10 - PullRequest
0 голосов
/ 26 октября 2010

Итак, у меня есть Sheet1 и Sheet2, Sheet1 - настройки, установленные пользователем, а Sheet2 - таблица значений, сгенерированных различными значениями в Sheet1. Теперь можно создать Sheet3..10, который будет извлекать значение из Sheet2 на основе вычислений на нем.

Проблема, с которой я сталкиваюсь, заключается в том, что, скажем, Sheet3!H20 обновляется с Sheet2!I15, как я могу получить Sheet3!H20, чтобы иметь =VALUE вместо =Sheet2!I15, чтобы Sheet4..10 мог повторно использовать эту таблицу

Я пытался Workbook_SheetCalculate(ByVal Sh As Object)

Private Sub Workbook_SheetCalculate(ByVal Sh As Object)
    Select Case Sh.Name
        Case "Sheet1"
        Case "Sheet2"
        Case Else
            ThisWorkbook.Worksheets("Sheet2").Range("$C$14").Value = "=" & Sh.Range("$D$23").Value

            Sh.Range("$H$20").Value = "=" & ThisWorkbook.Worksheets("Sheet2").Range("$I$15").Value
    End Select
End Sub

Но когда я делаю это, он просто постоянно пересчитывает, и в итоге Excel вылетает. Я также попытался войти на каждый рабочий лист с помощью Worksheet_Calculate, и когда я это сделал, я получил ошибку времени выполнения, поскольку Range отсутствует в объекте Worksheet.

А идеи?

Ответы [ 2 ]

1 голос
/ 26 октября 2010

попробуйте поместить этот код в начало вашего макроса ...

Application.Calculation = xlManual

, а затем в конце поставить

Application.Calculation = xlAutomatic

Чтобы убедиться, что все вычисления выполняются без вызовабесконечный цикл, затем попробуйте что-то вроде этого.

1.Объявьте глобальную переменную с именем IsCalculation
2. Оберните ваш код в оператор if

if not IsCalculating then
    IsCalculating = true
    Application.Calculation = xlManual

    `put your code here`

    Application.Calculation = xlAutomatic
    Application.Calculate
    IsCalculating = false
end if
0 голосов
/ 26 октября 2010

Я попробую переменную IsCalculating.Чтобы заставить его работать на ночь, я придумал это ..

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    Select Case Sh.Name
        Case "Settings"
        Case "Year To Date"
        Case "Federal Table"
            Select Case ActiveSheet.Name
                Case "Settings"
                Case "Year To Date"
                Case "Federal Table"
                Case "State Table"
                Case "CO Table"
                Case "IA Table"
                Case Else
                    ActiveSheet.Range("$H$20") = "=" & Worksheets("Federal Table").Range("$I$15").Value
            End Select
        Case "State Table"
            Select Case ActiveSheet.Name
                Case "Settings"
                Case "Year To Date"
                Case "Federal Table"
                Case "State Table"
                Case "CO Table"
                Case "IA Table"
                Case Else
                    ActiveSheet.Range("$H$21") = "=" & Worksheets("State Table").Range("$H$6").Value
            End Select
        Case "CO Table"
        Case "IA Table"
        Case Else
            If Worksheets("Federal Table").Range("$C$14").Value <> Sh.Range("$D$23").Value Then
                Worksheets("Federal Table").Range("$C$14").Value = "=" & Sh.Range("$D$23").Value
                Worksheets("State Table").Range("$H$2").Value = "=" & Sh.Range("$D$23").Value
            End If
    End Select
End Sub

Но мне это кажется просто небрежным.

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