Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Endung für Tabellenblattnamen einfügen
#1
Hallo zusammen, 
ich würde für das folgende Problem kein weiteres Thema aufmachen.
Es geht um folgendes: 

ich habe den Code zum Einlesen:

Code:
Sub Datei_öffnen_in_bestimmter_Zelle()
Dim Pfad As String, i As Long, Z As Long, S As Long
Dim Zelle As Range, Bereich As Range

Application.ScreenUpdating = False
With Sheets("Tabelle1")
   For i = 2 To .Cells(.Rows.Count, "A").End(xlUp).Row
       If .Cells(i, "A") > 0 Then
           Pfad = ThisWorkbook.Worksheets("Tabelle1").Range("C" & i).Value
            
            With Workbooks.Open(Filename:=Pfad)
                 .ActiveSheet.Copy After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)
                 .Close savechanges:=False 'oder true, wenn Änderungen gespeichert werden sollen
            End With
        
         Application.CutCopyMode = False
        End If
   Next i
End With

Application.ScreenUpdating = False
End Sub



Die erzeugten Tabellenblätter besitzen die Namen ihrer Textdatei. 

Die erste knifflige Frage wäre: Ist es Möglich, dass der Tabellenblattname eine Endung wie zum Beispiel "spez" hinzugefügt bekommt. Sodass aus einem eingelesen Textdateinamen Schlafzimmer (Tabellenname bis dato laut Code = Schlafzimmer)  etwas wird wie Schlafzimmer_spez ( Tabellenname = Schlafzimmer_spez)?
Die Endung soll für alle eingelesenen Dateien hinzugefügt werden. Das zuvor erarbeitete Makro mit Berni greift auch auf diese Daten zu daher darf die ursprüngliche Textdatei nicht im Namen verändert werden. Es soll nur jedes eingelesene Tabellenblatt das bis dato nur den Datennamen trägt, eine Endung "Spez" dazu bekommen.

Die zweite knifflige Frage wäre: 
Ist es möglich wie im Bild unten angefügt ein Fenster in die eingelesene Datei einzubauen, dass mir die Summe , den kleinsten und größten Wert, jeder Spalte darstellt ( rot dargestellt).

Viele Grüße 
und danke im voraus!
Antworten Top
#2
Hallo,

deine Frage habe ich vom letzten Thread abgetrennt. Für neue Themen bitte immer einen neuen Thread öffnen.
Gruß Günter
Jeder Fehler erscheint unglaublich dumm, wenn andere ihn begehen.
angebl. von Georg Christoph Lichtenberg (1742-1799)
Antworten Top
#3
Hatte ich dich nicht gebeten, dass du die Salamitaktik bleiben lässt? Ich dachte ich hätte klar gemacht, dass es keinen Spaß macht, dass man sich jedesmal wieder von vorne in das Thema einlesen muss. Jedes mal von vorne überlegen und testen...
Daher ist dies das letzte mal, dass ich dir für dieses Thema helfe!

Für die Blattbenennung die zweite Zeile einfügen:
Code:
           With Workbooks.Open(Filename:=Pfad)
                 .ActiveSheet.Name = .ActiveSheet.Name & "_spez"
                .ActiveSheet.Copy After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)
                .Close savechanges:=False 'oder true, wenn Änderungen gespeichert werden sollen
           End With
Für die Berechnungen:
Code:
           With ActiveSheet
               .Move After:=Sheets(Sheets.Count)
               Z = .Cells(.Rows.Count, "A").End(xlUp).Row
               S = .Cells(3, .Columns.Count).End(xlToLeft).Column
               Sheets("Tabelle1").Range("A" & i).Copy
               .Range(.Cells(3, "B"), .Cells(Z, "E")).PasteSpecial Paste:=xlPasteAll, Operation:=xlMultiply
               .Range("B3:E7").Copy
               Sheets("Auswertung").Range("B3").PasteSpecial Paste:=xlPasteAll, Operation:=xlAdd
               .Rows("1:3").EntireRow.Insert shift:=xlDown
               .Range("A1") = "größter Wert"
               .Range("A2") = "kleinster Wert"
               .Range("A3") = "Summe"
               For j = 2 To 5
                   .Cells(1, j) = Application.WorksheetFunction.Max(Range(Cells(6, j), Cells(10, j)))
                   .Cells(2, j) = Application.WorksheetFunction.Min(Range(Cells(6, j), Cells(10, j)))
                   .Cells(3, j) = Application.WorksheetFunction.Sum(Range(Cells(6, j), Cells(10, j)))
               Next j
           End With


Ich habe jetzt den zuletzt von mir geposteten Code verwendet, vergleiche diesen mit dem neuen Code, dann siehst du ja, welche Zeilen dazugekommen sind.
Schöne Grüße
Berni
Antworten Top
#4
Hallo Berni, 
das jetzige Problem hat nichts mit dem anderen Makro zu tun. Das mit dir besprochene Makro läuft tadelos und ist im EinsatzSmile
Ich habe nur den gleichen Code zum Einlesen genommen da ich ihn zum Teil auch für das jetzige Thema nutzen kann. Daher war meine Frage ob man ein neues Thema aufmachen sollSmile
Grüße
Antworten Top
#5
Ok, dann will ich mal Gnade vor Recht ergehen lassen  Tongue Wink

Bitte bei neuen Fragen, die sich nicht auf ein vorheriges Thema beziehen, immer einen neuen Thread aufmachen. Das wahrt die Übersichtlichkeit und erhöht für dich die Wahrscheinlichkeit, dass dir mehr Leute helfen. Themen, wo schon 40 Antworten gegeben wurden, ohne dass ich daran beteiligt war, schaue ich mir garantiert nicht mehr an.
Schöne Grüße
Berni
[-] Folgende(r) 1 Nutzer sagt Danke an MisterBurns für diesen Beitrag:
  • ilmiomondo
Antworten Top
#6
Hallo Berni , der Code funktioniert wunderbar. Habe aber vergessen noch zu erwähnen das ich gerne die Summe durch 1000 teilen möchte

Code:
.Cells(3, j) = Application.WorksheetFunction.Sum(Range(Cells(6, j), Cells(8765, j)))

Habe es jetzt folgendermaßen gelöst. Passt das so, oder können mit dieser Schreibweise Probleme auftreten?


Code:
.Cells(1, j) = Application.WorksheetFunction.Max(Range(Cells(6, j), Cells(8765, j))) 'Bereich der Spalte bestimmen von Zelle X zu Y
                  .Cells(2, j) = Application.WorksheetFunction.Min(Range(Cells(6, j), Cells(8765, j)))
                  .Cells(3, j) = Application.WorksheetFunction.Sum(Range(Cells(6, j), Cells(8765, j)))
                  .Cells(3, j) = Cells(3, j).Value / 1000


Grüße
Antworten Top
#7
Ist grundsätzlich richtig und führt zu keinen Problemen. Du könntest den Schritt aber sparen...
Code:
.Cells(3, j) = Application.WorksheetFunction.Sum(Range(Cells(6, j), Cells(8765, j))) / 1000
Schöne Grüße
Berni
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste