Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1676to1680
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
Inhaltsverzeichnis

Bereiche als Tabelle in VBA

Bereiche als Tabelle in VBA
06.03.2019 08:14:11
Georg
Liebe Mitglieder,
ich habe von dem Thema leider so gar keine Ahnung innerhalb VBA.
Ich habe ca 100 Dateien - meistens mit 12 Blättern.
Für jede Datei In jedem Blatt soll ein Bereich als Tabelle definiert werden.
1. Fängt immer bei A6 an, hört bei H? auf - also über rows.count.
2. Die Tabelle hat immer Überschriften
3. Die Tabelle soll benannt werden: Name des Tabellenblatts in der Form: t_NameTabellenblatt
ich hab schon den MacroRecorder angeschaut, aber der Befehl ListObjects sagt mir nicht so richtig was.
Danke für eure Hilfe, Grüße G

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Bereiche als Tabelle in VBA
06.03.2019 09:52:07
Nepumuk
Hallo Georg,
für eine einzelne Mappe geht das so:
Public Sub ConvertToListObject()
Dim objWorksheet As Worksheet
Dim objListObject As ListObject
For Each objWorksheet In ThisWorkbook.Worksheets
With objWorksheet
Set objListObject = .ListObjects.Add(SourceType:=xlSrcRange, _
Source:=.Range(.Cells(6, 1), .Cells(.Rows.Count, 8).End(xlUp)), _
XlListObjectHasHeaders:=xlYes)
End With
With objListObject
.Name = "t_" & objWorksheet.Name
.TableStyle = "TableStyleMedium1"
End With
Next
End Sub

Jetzt stellt sich natürlich die Frage ob du das für jede Datei einzeln machen willst oder ob das automatisch für alle Mappen laufen soll.
Gruß
Nepumuk
Anzeige
AW: über alle Mappen automatisch..
06.03.2019 10:15:12
Georg
...wäre natürlich prima, lieber Nepomuk. Falls nicht zuviel Aufwand.
Die Dateien sind aber in 7 verschiedenen Orndern.
Gruß Georg
AW: über alle Mappen automatisch..
06.03.2019 10:20:06
Nepumuk
Hallo Georg,
sind alle 7 Ordner Unterordner eines Ordners? Sind nur die Excelmappen in den Ordnern bei denen die Tabellen umgewandelt werden sollen oder auch andere? Wenn auch andere, wie können diese unterschieden werden (Dateiname, Aufbau ...)?
Gruß
Nepumuk
AW: Hallo Nepomuk, die Struktur ist..
06.03.2019 10:26:07
Georg
.. so
Ordner
-------Unterordner 1
-------2019
-------Unterordner 2
-------2019
Letztendlich würde mir das Prinzip helfen: Auswahl Ordner - Unterordner1 - 2019.
Dort (also immer in 2019) sind nur Dateien wo der Code laufen soll
Vielen Dank. Es ist immer toll was man hier dazulernen kann. Gruß G
Anzeige
AW: Ansatz
06.03.2019 10:35:48
Fennek
Hallo,
da ich die Struktur nicht nachbauen möchte, hier ein "freihändiger" Versuch:

Dim FSO As Object
Dim List As String
Sub All_Files_in_SubFolders()
Pfad = "C:\temp" 'anpassen: Basisfolder
Set FSO = CreateObject("Scripting.FileSystemObject")
Call DoFolder(FSO.GetFolder(Pfad), "txt") 'Basis-Pfad und Extension
Debug.Print List
End Sub
Function DoFolder(Folder, ByVal Ext As String)
For Each Fld In Folder.SubFolders
if Fld.Name = "2019" then Call DoFolder(Fld, Ext)
Next
For Each File In Folder.Files
If FSO.getExtensionName(File) = Ext Then
'Debug.Print Folder, File.Name
'Debug.Print File.Path
List = List & vbCrLf & File.Path
End If
Next
End Function
In der Str-Variable "List" sollten alle gewünschten Dateinamen stehen. Wenn es passt, werden sie in "Workbooks.Open(filename)" übergeben.
mfg
(schaun wir mal)
Anzeige
AW: Ansatz, Danke Fennek, ich muss
06.03.2019 10:44:41
Georg
...mal sehen, ob meine Kenntnisse dazu ausreichen.
Deine Sub "All files..." habe ich schon angepasst und getestet. Was muss ich mit der Function machen.
Über Workbooks.open(Filename) einbinden und wie?
Sorry, das sind Themen, mit denen ich mich erst noch beschäftigen muss. Deswegen die blöde Fragerei Gruß G
AW: Hallo Nepomuk, die Struktur ist..
06.03.2019 11:50:14
Nepumuk
Hallo Georg,
teste mal:
Option Explicit

Public Sub ConvertToListObject()
    
    Const FOLDER_PATH As String = "G:\Eigene Dateien\" 'Anpassen
    
    Dim objWorkbook As Workbook
    Dim objWorksheet As Worksheet
    Dim objListObject As ListObject
    Dim astrFolders() As String, strFileName As String
    Dim ialngFolders As Long
    
    On Error GoTo err_exit
    
    With Application
        .Cursor = xlWait
        .Calculation = xlCalculationManual
        .EnableEvents = False
        .ScreenUpdating = False
    End With
    
    astrFolders = GetFolders(FOLDER_PATH)
    
    For ialngFolders = LBound(astrFolders) To UBound(astrFolders)
        
        If astrFolders(ialngFolders) Like "*\2019\" Then
            
            strFileName = Dir$(PathName:=astrFolders(ialngFolders) & "*.xlsx")
            
            Do Until strFileName = vbNullString
                
                Set objWorkbook = Workbooks.Open(Filename:=astrFolders(ialngFolders) & strFileName)
                
                For Each objWorksheet In objWorkbook.Worksheets
                    
                    With objWorksheet
                        
                        Set objListObject = .ListObjects.Add(SourceType:=xlSrcRange, _
                            Source:=.Range(.Cells(6, 1), .Cells(.Rows.Count, 8).End(xlUp)), _
                            XlListObjectHasHeaders:=xlYes)
                        
                    End With
                    
                    With objListObject
                        
                        .Name = "t_" & objWorksheet.Name
                        .TableStyle = "TableStyleMedium1"
                        
                    End With
                Next
                
                Call objWorkbook.Close(SaveChanges:=True)
                
                Set objListObject = Nothing
                Set objWorkbook = Nothing
                
                strFileName = Dir$
                
            Loop
        End If
    Next
    
    sub_exit:
    
    With Application
        .Cursor = xlDefault
        .Calculation = xlCalculationAutomatic
        .EnableEvents = True
        .ScreenUpdating = True
    End With
    
    Exit Sub
    
    err_exit:
    
    Call MsgBox("Fehler: " & CStr(Err.Number) & vbLf & vbLf & _
        Err.Description, vbCritical, "Programmfehler")
    
    Resume sub_exit
    
End Sub

Private Function GetFolders(ByVal pvstrPath As String) As String()
    
    Dim astrFolders() As String
    Dim strFolder As String, strPath As String
    Dim ialngIndex1 As Long, ialngIndex2 As Long
    
    strPath = pvstrPath
    
    Do
        
        strFolder = Dir$(strPath & "*", vbDirectory)
        
        Do Until strFolder = vbNullString
            
            If strFolder <> "." And strFolder <> ".." Then
                
                If GetAttr(strPath & strFolder) And vbDirectory Then
                    
                    Redim Preserve astrFolders(0 To ialngIndex1)
                    astrFolders(ialngIndex1) = strPath & strFolder & "\"
                    ialngIndex1 = ialngIndex1 + 1
                    
                End If
            End If
            
            strFolder = Dir$
            
        Loop
        
        If ialngIndex1 = ialngIndex2 Then Exit Do
        strPath = astrFolders(ialngIndex2)
        ialngIndex2 = ialngIndex2 + 1
        
    Loop
    
    GetFolders = astrFolders
    
End Function

Gruß
Nepumuk
Anzeige
AW: wow, super und vielen Dank...
06.03.2019 12:46:27
Georg
..hätte ich allein nie hingekriegt, verstehe leider nur die Hälfte des Codes aber werde mich damit etwas befassen (müssen). Gruß G

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige