Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
860to864
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
860to864
860to864
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

860to864: Sheets.Add und for...next-Schleife VBA

Sheets.Add und for...next-Schleife VBA
13.04.2007 13:11:09
Christian

Hallo Zusammen!
Ich habe mir ein VBA-Makro gebastelt, das aus einer Zelle einen Dateinamen ausliest und diese Excel-Datei öffnet.
Nun soll in diese (frisch geöffnete) Datei ein Tabellenblatt eingefügt werden, auf dem Mittelwerte der Spalten des ersten Blattes der (frisch geöffneten) Datei aufgelistet werden.
Des weiteren habe ich eine Schleife eingebaut, mit deren Hilfe das ganze für verschiedene Dateien wiederholt werden soll.
Im dritten Schritt sollen die Mittelwerte in die entsprechende Zeile der Datei geschrieben werden, in der die Dateinamen stehen (Ausgangsdatei zur zusammenfassung der Mittelwerte)
Das Makro bringt keine Fehlermeldung, aber schafft es nur bis zum Öffnen der ersten Datei aus der Liste!?!?
Anbei der code:


Sub ArtihMittel()
' Tastenkombination: Strg+Umschalt+A
Dim Dat()
Dim x As Integer
'Array Dat mit Dateinamen aus Spalte M2 bis M100 füllen:
For x = 5 To 9                     'zum Probieren erst mal von 5 bis9
ReDim Preserve Dat(x)
Dat(x) = Range("M" & x)
'Dateien DruckMittelxxx.xls öffnen und die Mittelwerte reinschreiben:
Workbooks.Open (Dat(x) & ".xls")
'Workbooks(Dat(x) & ".xls").Select
ActiveWorkbook.Sheets.Add Type:=xlWorksheet   = "Mittel"
ActiveWorkbook.Sheets("Mittel").Select
'Zeilenüberschriften:
Range("A1").Formula = "p_Einlass"
Range("B1").Formula = "Kistler1"
Range("C1").Formula = "Keller4"
Range("D1").Formula = "Keller2"
Range("E1").Formula = "Keller1"
Range("F1").Formula = "p_Auslass"
Range("G1").Formula = "Kistler2"
Range("H1").Formula = "Keller3"
Range("I1").Formula = "Keller6"
Range("J1").Formula = "Keller5"
'Mittelwerte in zweite Zeile (row2) schreiben:
Range("A2").FormulaR1C1 = "=AVERAGE(RC[1]:RC[4])"           'p_Einlass
Range("B2").Formula = "=AVERAGE(Tabelle1!B2:B10251)"    'Mittelwert Kistler1
Range("C2").Formula = "=AVERAGE(Tabelle1!C2:C10251)"    'Mittelwert Keller4
Range("D2").Formula = "=AVERAGE(Tabelle1!D2:D10251)"    'Mittelwert Keller2
Range("E2").Formula = "=AVERAGE(Tabelle1!E2:E10251)"    'Mittelwert Keller1
Range("F2").FormulaR1C1 = "=AVERAGE(RC[1]:RC[4])"           'p_Auslass
Range("G2").Formula = "=AVERAGE(Tabelle1!G2:G10251)"   'Mittelwert Kistler2
Range("H2").Formula = "=AVERAGE(Tabelle1!H2:H10251)"   'Mittelwert Keller3
Range("I2").Formula = "=AVERAGE(Tabelle1!I2:I10251)"   'Mittelwert Keller6
Range("J2").Formula = "=AVERAGE(Tabelle1!J2:J10251)"   'Mittelwert Keller5
'Mittelwerte in x-te Zeile von DynDruck_Mittel schreiben:
'In das erste wird das zweite geschrieben:
Workbooks("D:\Eigene Dateien\Uni\IHS\Studienarbeit\Messdaten_DynDruck\DynDruck_Mittel.xls")   _
_
_
_
_
.Sheets("Tabelle1").Range("C" & x).Value = _
Workbooks(Dat(x) & ".xls").Sheets("Mittel").Range("F2:J2")
'Datei Speichern und Schließen
Workbooks(Dat(x) & ".xls").Save
Workbooks(Dat(x) & ".xls").Close
'MsgBox mit aktueller Datei zur Kontrolle
MsgBox Dat(x) & x
Next x
End Sub

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Sheets.Add und for...next-Schleife VBA
13.04.2007 13:37:16
Rudi Maintaire
Hallo,
so sollte es gehen:

Sub ArtihMittel()
' Tastenkombination: Strg+Umschalt+A
Dim wkbDat As Workbook, wksDat As Worksheet
Dim x As Integer
For x = 5 To 9                     'zum Probieren erst mal von 5 bis9
'Dateien DruckMittelxxx.xls öffnen und die Mittelwerte reinschreiben:
Set wkbDat = Workbooks.Open(Cells(x, 13))
Set wksDat = wkbDat.Sheets.Add(Type:=xlWorksheet = "Mittel")
With wksDat
'Zeilenüberschriften:
.Range("A1") = "p_Einlass"
.Range("B1") = "Kistler1"
.Range("C1") = "Keller4"
.Range("D1") = "Keller2"
.Range("E1") = "Keller1"
.Range("F1") = "p_Auslass"
.Range("G1") = "Kistler2"
.Range("H1") = "Keller3"
.Range("I1") = "Keller6"
.Range("J1") = "Keller5"
'Mittelwerte in zweite Zeile (row2) schreiben:
.Range("A2").FormulaR1C1 = "=AVERAGE(RC[1]:RC[4])"           'p_Einlass
.Range("B2:E2").FormulaR1C1 = "=AVERAGE(Tabelle1!rc:r10251c)"    'Mittelwert Kistler1
.Range("F2").FormulaR1C1 = "=AVERAGE(RC[1]:RC[4])"           'p_Auslass
.Range("G2:J2").FormulaR1C1 = "=AVERAGE(Tabelle1!rc:r10251c)"    'Mittelwert Kistler1
End With
'Mittelwerte in x-te Zeile von DynDruck_Mittel schreiben:
'In das erste wird das zweite geschrieben:
ThisWorkbook.Sheets("Tabelle1").Cells(x, 3).Value = wksDat.Range("F2:J2")
'Datei Speichern und Schließen
wkbDat.Close True
Next x
End Sub

Oder brauchst du die Dateinamen im Array noch?
Gruß
Rudi
Eine Kuh macht Muh, viele Kühe machen Mühe

Anzeige
AW: Sheets.Add und for...next-Schleife VBA
13.04.2007 16:09:30
Christian
Hallo Rudi,
vielen Dank für die vielen Kühe ;-)
Die Dateinamen brauch ich nicht mehr.
Leider muss der Fehler aber wo anders liegen, weil das Resultat sich nicht geändert hat:
Er öffnet die erste Datei aus Cells(x, 13) für x=5 aus dem ersten Iterationsschritt, aber ansonsten passiert nichts. Nicht mal ne Fehlermeldung!!!?
Könnte es am Office liegen? Hab die Makrosicherheit vorsichtshalber auf niedrigste Stufe gesetzt.
Nachdem ich das Modul aus der Persönlichen Arbeitsmappe in die der Ausgangsdatei verschoben habe funktioniert es bis auf die

Workbooks(Dat(x) & ".xls").Sheets("Mittel").Range("F2:J2")

Anweisung. Die entprechenden Zellen bleiben Leer.
Gruß
Christian

Anzeige
AW: Sheets.Add und for...next-Schleife VBA
13.04.2007 19:17:35
Christian
Hab hingekriegt! So funktioniert´s meistens:


Sub ArtihMittel()
' ArtihMittel Makro
Dim wkbDat, wbkMittel As Workbook, wksDat As Worksheet
Dim x As Integer
Set wbkMittel = ActiveWorkbook
For x = 6 To 9                     'zum Probieren erst mal von 6 bis9
'Dateien DruckMittelxxx.xls öffnen und die Mittelwerte reinschreiben:
Set wkbDat = Workbooks.Open(Cells(x, 13))
Set wksDat = wkbDat.Sheets.Add '(Type:=xlWorksheet = "Mittel")
With wksDat
'Zeilenüberschriften:
.Range("A1") = "p_Einlass"
.Range("B1") = "Kistler1"
.Range("C1") = "Keller4"
.Range("D1") = "Keller2"
.Range("E1") = "Keller1"
.Range("F1") = "p_Auslass"
.Range("G1") = "Kistler2"
.Range("H1") = "Keller3"
.Range("I1") = "Keller6"
.Range("J1") = "Keller5"
'Mittelwerte in zweite Zeile (row2) schreiben:
.Range("B2:E2").FormulaR1C1 = "=AVERAGE(Tabelle1!rc:r10251c)"    'Mittelwert Kistler1
.Range("A2").FormulaR1C1 = "=AVERAGE(RC[1]:RC[4])"           'p_Einlass
.Range("G2:J2").FormulaR1C1 = "=AVERAGE(Tabelle1!rc:r10251c)"    'Mittelwert Kistler1
.Range("F2").FormulaR1C1 = "=AVERAGE(RC[1]:RC[4])"           'p_Auslass
.Range("A2:J2").Copy
'Datei Speichern und Schließen
wkbDat.Close True
End With
'nach der With-Anweisung ist das ActiveSheet wieder die Datei as der gestartet wurde _ ( _
DynDruck_mittel):
ActiveSheet.Paste Destination:=Cells(x, 3)
'Text in Zahlen Umwandeln:
With ActiveSheet
Range("N7").Select
ActiveCell.FormulaR1C1 = "1"
Range("N7").Select
Selection.NumberFormat = "0.00000"
Selection.Copy
Range("C2:L100").Select
Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlMultiply, _
SkipBlanks:=False, Transpose:=False
End With
Next x
End Sub


Vielen Dank und Gruß
Christian

Anzeige

321 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige