HERBERS Excel-Forum - das Archiv
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

AW: VBA vereinfachen - Berechnung in einem Sheet
fcs

Hallo Stefan,
  Set wksMatrix = ActiveWorkbook.Worksheets("Matrix")
Set wksQuelle = ActiveWorkbook.Worksheets("Calculation")
oder
Set wksMatrix = ThisWorkbook.Worksheets("Matrix")
Set wksQuelle = ThisWorkbook.Worksheets("Calculation")

Mit Activeworkbook wird mit der momentan aktiven Arbeitmappe gearbeitet, mit ThisworkBook mit der Arbeitsmappe in der das Makro gespeichert ist.
Gruß
Franz
Dank Dir sehr ! perfekt ! OT
Stef@n

Set wksMatrix = ActiveWorkbook.Sheets("Matrix")'oT
NoNet

Set wksMatrix = ActiveWorkbook.Sheets("Matrix")
Set wksQuelle = ActiveWorkbook.Sheets("Calculation")
Dank auch Dir sehr ! Klasse ! OT
Stef@n

Weitere Frage: Typen unverträglich
Stef@n

Hallo nochmal
wenn das Makro läuft und es wird im Sheet "calculation" in der Zelle M10 ein #NV ausgewiesen,
wird das Makro in dem TB Matrix abgebrochen mit dem Hinweis "Typen unverträglich"
ist es möglich, dass man den Code so ändert, dass der bei dem errechneten #NV
dann z.B. ein X in der jeweiligen Zelle einträgt und das Makro dann weiter laufen lässt ?
Ich hoffe, ich hab mich klar genug ausgedrückt
Freu mich nochmal auf einen Tip
Gruss Stef@n
AW: Weitere Frage: Typen unverträglich
Stef@n

Lösung gefunden
Stef@n

Hallo :)
Ich hab die Frage anderweitig gelöst
in der Tabelle, die mir #NV ausweisst, habe ich per Formel
=wenn(ISTNV(M10);9999;(summe....))
Klappt prima mit Zahlen - 9999
Besten Wochenendgruss
Stef@n