[Excel] Dateinamen beim Kopieren in Tabellenblatt ändern

NryOhn

Grünschnabel
Hallo leute,

ich habe ein Problem, und zwar habe ich viele Externen Daten die so aufgebaut sind

Halo_Vorname_Nachname_Geburtsjahr.xlsx

diese Dateien kopiere ich als neues Tabellenblatt in ein eigened Arbeitsblatt.
ich habe das Kopieren alles geschafft und das als TabellenblattName der Name der Datei steht, edoch möchte ich das nur ein Teil des Namens dadrinnen steht.

Also aus "Halo_Vorname_Nachname_Geburtsjahr.xlsx" dem soll das gemacht werden
"Vorname Nachname", also das soll dann als Tabellenblatt namen stehen.

statt z.B. Halo_Max_Mustermann_1964.xlsx soll Max Mustermann stehen.

vielen Dank :)


Lg,

NryOhn
 
Hallo.

Ist der Dateiname immer so aufgebaut? Dann kannst Du die Dateien problemlos mit PHP ändern.

Wenn die Dateien aber unterschiedlich aufgebaut sind, wird es schwierig...
 
Also das Daten Rein holen habe ich so versucht funktioniert jedoch nicht so =(



Sub Daten_sammeln()

'Dim oFSO As Object
Dim oFolder As Object
Dim oFile As Object
Dim wbQuelle As Workbook
Dim ws As Integer
Dim rng As Range




Set oFSO = CreateObject("Scripting.FileSystemObject")
Set oFolder = oFSO.GetFolder("C:\Users\TEST DATEN")


For Each oFile In oFolder.Files
If Right(oFile.name, 5) = ".xlsx" Then
Set wbQuelle = Workbooks.Open(oFile)


'####################Ab hier
For Row = 2 To 10
'get row with "Bewertung"
cur_bewertung = wbQuelle.Sheets(1).Cells(Row, 3).value

'get row with "Bewertungsname"
cur_Bewertungs_Name = wbQuelle.Sheets(1).Cells(Row, 1).value

'get Bewertungsname in overview sheet
For Col = 2 To 10
If ThisWorkbook.Sheets(1).Cells(1, Col).value = cur_Bewertungs_Name Then
'Bewertungsname found
'#
Set cur_Bewertungs_Name = ThisWorkbook.Sheets(1).Columns(Col).Find(Cur_Bewertungs_Name)
'#
'find right person
For cur_person = 2 To 10
person_name = wbQuelle.Sheets(1).name
If ThisWorkbook.Sheets(1).Cells(cur_person, 1).value = person_name Then
'right person found
'#
Set cur_person = ThisWorkbook.Sheets(1).Columns(Col).Find(cur_person)
'#
'copy value "Bewertung
ThisWorkbook.Sheets(1).Cells(cur_person, Col).value = cur_Bewertung.Copy
End If
Next cur_person
End If
Next Col
Next Row
'##################Bis hier

'wbQuelle.Sheets(1).Range (.Range("C2"))

'With wbQuelle.Sheets(1)
' .Range(.Range("C2"), .Cells(.Rows.Count, 1).End(xlUp).Offset(2, 2)).Copy
'End With

'With ThisWorkbook.Sheets(1)
' .Cells(.Rows.Count, 1).End(xlUp).Offset(1, 0).PasteSpecial 'xlPasteAll
'End With

End If
Next 'oFile

End Sub
















Also ich habe eine Gesamttabelle wo alle Namen in A2, A3, A4, A5... etc
In A:1 - Z:1 steht eine Anzahl von Themen, und neben den Namen also ab B2-Z2 steht dann die Bewertung der Person von A2 und so weiter.

Dann gibt es noch für jeden eine extra Datei, also A2 der name z.B "Hans Peter" hat eine Externe Datei namens Hans_Peter.xslx

Jetzt zur eigendlichen frage, der Name der Datei soll jetzt in die A Tabelle eingetragen werden, die noch frei ist, wenn der Name vorhanden ist, dann soll er die werte die in Hans_Peter stehen, in die Gesamttabelle übertragen.

Es müssen also immer die namen miteinander Verglichen werden und die BewertungsNamen und dann soll an die Stelle dann der Name z.b. :
Gesamttabelle:
A2 : Hans Peter D1: Der Bewertungsname und der Wert soll dann in D2 stehen
A3: Andreas Mustermann E1: Der Bewertungsname und der Wert soll dann in E3 stehen

Externe Datei der Person: aufbau:
A2, A3, A4... etc stehen diesmal die Namen der Bewertungen
C2, C3, C4.. etc der jeweilige Wert der zur Bewertung gehört
 

Anhänge

  • Hans Peter.png
    Hans Peter.png
    7,4 KB · Aufrufe: 0
  • MasterTabelle.png
    MasterTabelle.png
    2,5 KB · Aufrufe: 1
Wenn der Dateiname wirklich immer so aufgebaut ist, dann kannst du mit Split die einzelnen Komponenten erhalten und diese wieder zusammen setzen. Hast du dir den neuen Namen generiert kannst du das zuletzt hinzugefügt Tabellenblatt umbenennen.

Code:
Private Function buildSheetName(strWorkbookName As String) As String
    Dim TestArray() As String
    
    TestArray() = Split(strNameWorkbook, "_")
    
    buildSheetName = TestArray(1) & " " & TestArray(2)
    
End Function
 
Danke Schön HonniCilest.


ich hätte da noch eine Frage, und zwar wie kann ich prüfen, ob in spalte C ein wert oder eine formel steht, wenn es eine Formel ist soll dies Übersprungen werden.
 
wo genau oder wie muss ich das dann machen?

also ich habe mehrere tabellenblätter und alle werden nacheinander durchgegangen.
und die Frage wäre jetzt.
wenn im tabellenblatt der Name nicht in Thisworkbook.Sheet(1) ist dann prüfe ob in Noten eine Formel ist. Wenn es eine Formel ist dann Ignoriere es. wenn es keine Formel ist dann gebe eine Meldung aus --> Name nicht in Thisworkbook.sheet(1) vohanden.

Also in Thisworkbook sollte dann Mathe Deutsch englisch stehen und durchschnitt soll ignioriert werden.
wenn aber nur Mathe Deutsch steht und Englisch nicht --> soll meldung erscheinen.


Danke dir @HonniCilest
 

Anhänge

  • 2016-09-13 13_32_39-Cortana.png
    2016-09-13 13_32_39-Cortana.png
    2,1 KB · Aufrufe: 1
das sind doch meines erachtens nur schleifen und bedingungen. zusammenbasteln musst du dir die leider selbst

bei generellen fragen helfe ich dir gerne weiter
 
Hallo @HonniCilest

Ich weiß aber, ich weiß leider nicht wie ich die bedingung richtig VBA tauglich schreiben kann.
mein Pseudocode sieht so aus

If Name not in ThisWorkbook.Worksheets(1) Then
Prüfe ob Noten = Formel
If Noten = Formel Then
Formel = True --> Ignoriere / Überspringe
If Noten Not = Formel Then
MsgBox "Name nicht in Gesamtsheet"


Also was ich damit sagen möchte. wenn Name nicht im Gesamtsheet enthalten ist, soll geprüft werden, ob in spalte C in Noten eine Formel enthalten ist, wenn dies der Fall ist, also die Note die da steht eine Formel enthält, dann soll keine meldung erscheinen und das soll Ignoriert werden.
ist der Name im Gesamtscheet nicht enthalten und die Note enthält keine Formel soll die Meldung erscheinen.

wenn du mir da helfen könntest wäre es echt genial =)


Danke dir jetzt schon mal für deine Hilfe
 

Neue Beiträge

Zurück