VBA vereinfachen - Berechnung in einem Sheet
Stef@n
Hallo Excel-Freunde,
ich habe bislang Dateiübergreifend eine Berechnung via VBA durchgeführt.
Nun habe ich die beiden Dateien zusammengefasst (2 Tabellenblätter) und
möchte dazu meinen Code vereinfachen.
Es werden Werte aus dem Tabellenblatt "Matrix" ausgelesen, in das TB "Calculation" eingetragen,
ein Wert errechnet und in das TB Matrix zurückgeschrieben.
Jetzt meine Frage: Ich möchte folgenden Code-Teil so schreiben, dass der DATEINAME
x-beliebig sein kann. Der Code soll immer auf in der jeweils aktuellen Datei /Dateiname funktionieren.
Hier der Code-Teil
Set wksMatrix = Workbooks("CBBerechnungMatrix.xls").Worksheets("Matrix")
Set wksQuelle = Workbooks("CBBerechnungMatrix.xls").Worksheets("Calculation")
Mein Versuch mit
Set wksMatrix = .Worksheets("Matrix")
Set wksQuelle = .Worksheets("Calculation")
funktioniert leider nicht.
Wenn ich die Datei mit einem anderen Namen speicher, müsste ich ja den part "...Workbooks("CBBerech...)
ja jedesmal anpassen - das möchte ich hat nicht.
Freu mich auf einen Tip
gruss Stef@n
hier auch mal der komplette Code
Sub MatrixAusfuellen()
Dim wksMatrix As Worksheet, wksQuelle As Worksheet
Dim Zeile As Long, Spalte As Long, StatusCalc As Long
' On Error GoTo Fehler
Dim DatAnfang As Date
DatAnfang = Now
Set wksMatrix = Workbooks("CBBerechnungMatrix.xls").Worksheets("Matrix")
Set wksQuelle = Workbooks("CBBerechnungMatrix.xls").Worksheets("Calculation")
With Application
StatusCalc = .Calculation
.Calculation = xlCalculationManual
' .ScreenUpdating = False
End With
With wksMatrix
For Zeile = 1768 To .Cells(.Rows.Count, 1).End(xlUp).Row 'letzte Zeile
For Spalte = 3 To .Cells(1, Columns.Count).End(xlToLeft).Column 'letzte Spalte
Application.StatusBar = "Zeile " & Zeile & " / Spalte " & Spalte & " wird bearbeitet."
wksQuelle.Range("M1").Value = .Cells(Zeile, 1).Value
wksQuelle.Range("M5").Value = .Cells(1, Spalte).Value
wksQuelle.Calculate '### neu
.Cells(Zeile, Spalte).Value = _
Application.WorksheetFunction.Round(wksQuelle.Range("M10").Value, 3) 'neu
Next
ActiveWorkbook.Save
Next
End With
Fehler:
With Application
.StatusBar = False
StatusCalc = .Calculation
.Calculation = StatusCalc
' .EnableEvents = True
' .ScreenUpdating = True
End With
With Err
Select Case .Number
Case 0 'kein fehler
Case Else
MsgBox Format(Now - DatAnfang, "hh:mm:ss"), , "Makro-Laufzeit + Fehler-Nr. " & .Number & vbLf _
& .Description
End Select
End With
MsgBox Format(Now - DatAnfang, "hh:mm:ss"), , "Makro-Laufzeit - FERTIG!"
End Sub