Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen

VBA vereinfachen - Berechnung in einem Sheet | Herbers Excel-Forum


Betrifft: VBA vereinfachen - Berechnung in einem Sheet von: Stef@n
Geschrieben am: 27.11.2009 14:11:05

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

  

Betrifft: AW: VBA vereinfachen - Berechnung in einem Sheet von: fcs
Geschrieben am: 27.11.2009 14:22:34

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


  

Betrifft: Dank Dir sehr ! perfekt ! OT von: Stef@n
Geschrieben am: 27.11.2009 14:27:25




  

Betrifft: Set wksMatrix = ActiveWorkbook.Sheets("Matrix")'oT von: NoNet
Geschrieben am: 27.11.2009 14:23:23

Set wksMatrix = ActiveWorkbook.Sheets("Matrix")
Set wksQuelle = ActiveWorkbook.Sheets("Calculation")


  

Betrifft: Dank auch Dir sehr ! Klasse ! OT von: Stef@n
Geschrieben am: 27.11.2009 14:27:54




  

Betrifft: Weitere Frage: Typen unverträglich von: Stef@n
Geschrieben am: 27.11.2009 14:35:27

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


  

Betrifft: AW: Weitere Frage: Typen unverträglich von: Stef@n
Geschrieben am: 27.11.2009 15:37:15




  

Betrifft: Lösung gefunden von: Stef@n
Geschrieben am: 27.11.2009 16:03:28

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


Beiträge aus den Excel-Beispielen zum Thema "VBA vereinfachen - Berechnung in einem Sheet"