2015-06-11 1 views
0

Я пытаюсь определить формулу в своем кодировании VBA, чтобы учесть определенное значение из определенного рабочего листа внутри моей книги. Не могли бы взглянуть на мой код и рассказать мне, что я делаю неправильно?Определение значения одной ячейки для использования в автоматическом вычислении

' Macro used to create the labour demand 
' 
' define variables and tables 

Dim wb As Workbook 
Set wb = Application.ActiveWorkbook 
Dim LabourDemand As Worksheet 
Set LabourDemand = Sheets("Labour Demand") 
Dim LaborPerFTE As Double 
Set LaborPerFTE = Application.ActiveWorkbook.Worksheets("FTE Calculation").Range("C34").Value 

' define connection string 

Dim connectionString As String 
connectionString = "ODBC;DSN=Excel Files;DBQ=" & Application.ActiveWorkbook.FullName & ";DefaultDir=" & Application.ActiveWorkbook.Path & ";Dri" 

' clear out the old table 

LabourDemand.Cells.Clear 

И тогда это значение должно быть использовано для расчетов следующим

'create new table 

    With LabourDemand.ListObjects.Add(SourceType:=0, Source:=Array(Array(_ 
     connectionString), Array("verId=1046;MaxBufferSize=2048;PageTimeout=5;")), _ 
     Destination:=LabourDemand.Range("$A$1")).QueryTable 
     .CommandType = 2 
     .CommandText = "SELECT `'Merged demand$'`.Category, `'Merged demand$'`.`Test Name`, `'Labor and equipment times$'`.`Equipment used`, `'Merged demand$'`.SampleDemandN, `'Merged demand$'`.SampleDemandN1, `'Merged demand$'`.SampleDemandN2, `'Merged demand$'`.SampleDemandN3, `'Labor and equipment times$'`.`Typical Batch Size`, `'Labor and equipment times$'`.typical, `'Labor and equipment times$'`.`Minimum batch size`, `'Labor and equipment times$'`.`1`, `'Labor and equipment times$'`.`Maximum batch size`, `'Labor and equipment times$'`.Max " _ 
     & " ,'=(([@[SampleDemandN]]/[@[Typical Batch Size]])*[@typical])/LaborPerFTE' as 'Labour needed for N (Typical)'" _ 
     & " ,'=(([@[SampleDemandN]]/[@[Maximum batch size]])*[@Max])/LaborPerFTE' as 'Labour needed for N (MAX)'" _ 
     & " ,'=(([@[SampleDemandN]]/[@[Minimum batch size]])*[@1])/LaborPerFTE' as 'Labour needed for N (MIN)'" _ 
     & " ,'=([@[SampleDemandN1]]/[@[Typical Batch Size]])*[@typical]' as 'Labour needed for N+1 (Typical)'" _ 
     & " ,'=([@[SampleDemandN1]]/[@[Maximum batch size]])*[@Max]' as 'Labour needed for N+1 (MAX)'" _ 
     & " ,'=([@[SampleDemandN1]]/[@[Minimum batch size]])*[@1]' as 'Labour needed for N+1 (MIN)'" _ 
     & " ,'=([@[SampleDemandN2]]/[@[Typical Batch Size]])*[@typical]' as 'Labour needed for N+2 (Typical)'" _ 
     & " ,'=([@[SampleDemandN2]]/[@[Maximum batch size]])*[@Max]' as 'Labour needed for N+2 (MAX)'" _ 
     & " ,'=([@[SampleDemandN2]]/[@[Minimum batch size]])*[@1]' as 'Labour needed for N+2 (MIN)'" _ 
     & " ,'=([@[SampleDemandN3]]/[@[Typical Batch Size]])*[@typical]' as 'Labour needed for N+3 (Typical)'" _ 
     & " ,'=([@[SampleDemandN3]]/[@[Maximum batch size]])*[@Max]' as 'Labour needed for N+3 (MAX)'" _ 
     & " ,'=([@[SampleDemandN3]]/[@[Minimum batch size]])*[@1]' as 'Labour needed for N+3 (MIN)'" _ 
     & " FROM `'Labor and equipment times$'` `'Labor and equipment times$'`, `'Merged demand$'` `'Merged demand$'`" _ 
     & " WHERE `'Merged demand$'`.`Test Name` = `'Labor and equipment times$'`.`Test Name` AND ((`'Labor and equipment times$'`.`Equipment used`='Manual labor'))" 
     .RowNumbers = False 
     .FillAdjacentFormulas = False 
     .PreserveFormatting = True 
     .RefreshOnFileOpen = False 
     .BackgroundQuery = True 
     .RefreshStyle = xlInsertDeleteCells 
     .SavePassword = False 
     .SaveData = True 
     .AdjustColumnWidth = True 
     .RefreshPeriod = 0 
     .PreserveColumnInfo = True 
     .ListObject.DisplayName = "LabourDemand" 
     .Refresh BackgroundQuery:=False 
    End With 

' calculation of the values 
    Dim LastRow As Long 
    LastRow = Cells(Rows.Count, "A").End(xlUp).Row 

    For Each cell In Range(Cells(1, 14), Cells(LastRow, 25)) 
    cell.FormulaR1C1 = cell.Formula 
    Next cell 

End Sub 

Любая помощь приветствуется. И как последний вопрос, как я могу адаптировать вычислительную часть, чтобы она работала на правильном листе, так что мне не нужно иметь его в качестве активного листа в моей активной книге.

ответ

0

Изменение ниже линии

LastRow = Cells(Rows.Count, "A").End(xlUp).Row 

For Each cell In Range(Cells(1, 14), Cells(LastRow, 25)) 
cell.FormulaR1C1 = cell.Formula 
Next cell 

К ...

with LabourDemand 
    LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row 

    For Each cell In .Range(.Cells(1, 14), .Cells(LastRow, 25)) 
     cell.FormulaR1C1 = cell.Formula 
    Next cell 
end with 
+0

Я попытался изменить мой код, но он по-прежнему не рассчитывает свои значения, если у меня нет выхода листа выбран, который является проблемой поскольку я хочу добавить несколько макросов в один единственный макрос обновления. –

Смежные вопросы