Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

VBA vereinfachen - Berechnung in einem Sheet

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

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: VBA vereinfachen - Berechnung in einem Sheet
27.11.2009 14:22:34
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
27.11.2009 14:27:25
Stef@n
Set wksMatrix = ActiveWorkbook.Sheets("Matrix")'oT
27.11.2009 14:23:23
NoNet
Set wksMatrix = ActiveWorkbook.Sheets("Matrix")
Set wksQuelle = ActiveWorkbook.Sheets("Calculation")
Dank auch Dir sehr ! Klasse ! OT
27.11.2009 14:27:54
Stef@n
Weitere Frage: Typen unverträglich
27.11.2009 14:35:27
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
Anzeige
AW: Weitere Frage: Typen unverträglich
27.11.2009 15:37:15
Stef@n
Lösung gefunden
27.11.2009 16:03:28
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

302 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige