Excel VBA Выполнение расчетов с использованием отдельной рабочей книги - PullRequest
0 голосов
/ 23 февраля 2011

Я пытаюсь написать небольшой код, который будет собирать информацию из рабочей книги Excel, а затем определять все вычисления в отдельной рабочей книге.Это включает создание столбцов, генерацию значений и создание графика, когда пользователь нажимает кнопку, которую я уже создал.Я уже могу выполнить эти операции, если информация находится в той же книге (и листе), что и расчеты.Я также могу выбрать конкретный лист в другой книге.Вопрос в том, как мне объединить эти два бита кода для работы?

Вот код для открытия второй книги:

Dim file_path As String
Dim excel_title As String
Dim second_excel_title As String

file_path = "C:\Work\EXCEL_TEST\"
excel_title = "test_info"
second_excel_title = "test_calculation"

Set wbs = Workbooks
wbs.Open (file_path & excel_title)
Set wb = wbs.Item(excel_title)
wb.Sheets.Add after:=wb.Sheets(wb.Sheets.Count)

wb.Sheets("Sheet1").Select

В качестве теста я собирался сделать3 на 3 блока чисел (1 - 9) в рабочей тетради test_info, а затем выполнить случайные вычисления над ними (например, вычитание и умножение) и вывести ответы в test_calculation.

Спасибо,

Джесси

Ответы [ 2 ]

1 голос
/ 23 февраля 2011

Вот подпрограмма, основанная на вашем коде с несколькими модами для демонстрации со ссылкой на wb и листы, добавление данных и диаграмм

Sub zx()
    Dim file_path As String
    Dim excel_title As String
    Dim second_excel_title As String
    Dim wb As Workbook
    Dim sh1excel As Worksheet, sh2excel As Worksheet
    Dim cht1 As Chart, cht2 As Chart
    Dim i As Long, j As Long

    Set sh1excel = ThisWorkbook.ActiveSheet
    file_path = "C:\Users\Chris\Documents\"
    excel_title = "test_info"
    second_excel_title = "test_calculation"

    Set wb = Workbooks.Open(file_path & excel_title)

    Set sh2excel = wb.Sheets.Add(After:=wb.Sheets(wb.Sheets.Count))
    wb.Activate
    sh2excel.Activate

    ' Put some data in test_info at C3:D5
    For i = 0 To 2
    For j = 0 To 2
        sh2excel.Cells(i + 3, j + 3) = i * 3 + j + 1
    Next j, i

    ' Calculate from test_info into second_excel_title
    For i = 0 To 2
    For j = 0 To 2
        sh1excel.Cells(i + 3, j + 3) = sh2excel.Cells(i + 3, j + 3) ^ 2
    Next j, i

    ' or put it as a formula
    For i = 0 To 2
    For j = 0 To 2
        sh1excel.Cells(i + 3, j + 3) = "=[" & wb.Name & "]" & sh2excel.Name & "!" & sh2excel.Cells(i + 3, j + 3).Address & "^2"
    Next j, i

    ThisWorkbook.Activate
    'Add a chart into second_excel_title
    Set cht1 = ThisWorkbook.Charts.Add
    cht1.Activate
    cht1.Name = "DatafromThisBook"
    Do While cht1.SeriesCollection.Count > 0
        cht1.SeriesCollection.Item(1).Delete
    Loop
    cht1.SetSourceData Source:=sh1excel.Range("C3:E5")

    Set cht2 = ThisWorkbook.Charts.Add
    cht2.Activate
    cht2.Name = "DatafromOtherBook"
    Do While cht2.SeriesCollection.Count > 0
        cht2.SeriesCollection(1).Delete
    Loop
    cht2.SetSourceData Source:=sh2excel.Range("C3:E5")


End Sub
0 голосов
/ 23 февраля 2011

Добавьте в основную рабочую книгу (которая не должна рассчитывать данные) следующий код:

Private Sub Workbook_Open()
    Application.Calculation = xlManual
    Application.CalculateBeforeSave = False
End Sub

Это заставит Excel ничего не вычислять.

С другой стороны, убедитесь, что в рабочей книге «Расчеты» есть автоматическая опция, например:

Private Sub Workbook_Open()
    Application.Calculation = xlCalculationAutomatic
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...