Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1864to1868
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

Tabellenblatt Name

Tabellenblatt Name
13.01.2022 14:24:18
Daniela
Hallo zusammen,
Ich habe eine Frage zum Thema Name vom Tabellenblatt.
Ich erhalte diverse Excel-File mit unterschiedlichen Tabellenblatt-Namen (einmal kommt eine Tabelle mit dem Registername 220110-Auswertung-Q1. Das andere mal mit dem Namen 220204-Kunden-Q2 usw.) Im Folgenden Makro (ich habe nur einen kleinen Teil des Makros kopiert) habe ich bis anhin das Tebelleblatt mit Tabelle1 angegeben. Wie kann ich das ändern damit, egal wie das Tabellenblatt benannt wird, das Blatt nach dem (Name) und nicht nach dem Name eingelesen wird?

Set oFS = CreateObject("Scripting.FileSystemObject")
For Each oDatei In oFS.GetFolder(sDateiPfad).Files
If InStrRev(oDatei.Name, "xlsx") Then
sBlatt = "Tabelle1"
oMe.Cells(iZeile, 2) = GetValue(sDateiPfad, oDatei.Name, sBlatt, Range("A2"))
oMe.Cells(iZeile, 3) = GetValue(sDateiPfad, oDatei.Name, sBlatt, Range("B2"))
oMe.Cells(iZeile, 4) = GetValue(sDateiPfad, oDatei.Name, sBlatt, Range("C2"))
oMe.Cells(iZeile, 5) = GetValue(sDateiPfad, oDatei.Name, sBlatt, Range("E2"))
Vielen Dank für eure Ideen.
lg Daniela

17
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Tabellenblatt Name (ermitteln?)
13.01.2022 15:06:34
Luc:-?
Hallo, Daniela;
nicht ganz verständlich ist das: egal wie das Tabellenblatt benannt wird, das Blatt nach dem (Name) und nicht nach dem Name eingelesen wird
Deshalb nur soviel - es gibt mehrere Möglichkeiten, ein TabBlatt in VBA anzusprechen:
1. mit seinem Titel: Worksheet.Name → ~.("name"),
2. mit seinem ErstellungsreihenfolgeIndex → ~.(n),
3. nur mit seinem internen CodeName, der übrigens auch unter (Name) geändert wdn kann → zB Tabelle1.
Letzteres (3.) könntest du ja mit dem obigen Zitat gemeint haben.
Gruß, Luc :-?
AW: Tabellenblatt Name (ermitteln?)
13.01.2022 15:20:20
Daniela
Hallo Luc
Ich weiss, ich habe mein Problem etwas undurchsichtig erklärt.
Ja, beim sBlatt = "Tabelle1" gibt es Probleme beim einlesen wenn das Tabellenblatt einen anderen Namen trägt als eben "Tabelle1". Dann werden keine Werte eingetragen. Nun brauche ich eine Lösung damit ich unabhängig bin, wie nun die Tabelle genannt wird.
Müsste ich dann dein 2. Beispiel (n) nehmen. Wie ist denn das gemeint?
lg Daniela
Anzeige
Die Blätter wdn intern in Reihenfolge ...
13.01.2022 18:51:27
Luc:-?
…ihrer Anlage durchnummeriert, Daniela.
In der selben Reihenfolge wird auch automatisch ein interner, sog CodeName gebildet, der dann unter (Name) führend im ObjektEigenschaften-Explorer des TabBlattes im VBE aufgeführt wird und manuell geändert wdn kann. Beides ist vom tatsächlichen BlattNamen (eigentl -Titel, der weiter unten ebenfalls im EigenschaftenExplorer aufgeführt wird, unabhängig und kann deshalb auch anstelle des BlattTitels benutzt wdn, denn der normale Nutzer wird bzw kann das nicht ändern. Er sollte also immer gleich sein, wenn die Mappe stets nur 1 Blatt enthält, egal wie der tatsächliche BlattName (Titel) lautet. Anderenfalls wird er lfd fortgeschrieben.
Luc :-?
Anzeige
AW: Tabellenblatt Name (ermitteln?)
13.01.2022 15:32:16
GerdL
Moin Daniela,
wie sieht deine Prozedur GetValue aus?
Gruß Gerd
AW: Tabellenblatt Name
13.01.2022 15:21:32
ralf_b
getvalue nutzt ein excel4macro. Richtig?
laut diversen Quellen soll das aber demnächst abgeschafft werden. Wie lange dann dein Makro läuft ist fraglich.
schau mal da rein https://www.herber.de/forum/archiv/1576to1580/1576432_Name_erste_Tabelle_aus_geschlossener_Datei.html
Hier wird ebenfalls aus einer geschlossenen Datei der erste Blattname geholt. Habs gad mal ausprobiert. Geht.
Die Datei muß dann aber zweimal angefasst werden. Einmal um den Blattnamen zu holen und einmal um damit dann die Werte zu holen.
Für Datenbankabfrage Spezies lässt sich das bestimmt vereinfachen. Für dich sollte es erstmal so funktionieren wie es ist.
Anzeige
AW: Tabellenblatt Name
13.01.2022 15:30:09
Daniela
Vielen Dank Ralf
Das hatte ich noch nicht gesehen. Muss ich mal durchlesen.
lg Daniela
AW: Tabellenblatt Name
13.01.2022 15:56:58
Rudi
Hallo,
aus dem verlinkten Beitrag nimmst du die Function GetSheetNames von Sepp.
In deinem Code dann

sBlatt = GetSheetNames(oBlatt.Name)(0)
Gruß
Rudi
AW: Tabellenblatt Name
14.01.2022 07:31:08
Daniela
Schönen guten Morgen Rudi
Ich habe deine Idee in mein Script eingebaut, es wird jedoch eine Fehlermeldung ausgegeben "Fehler beim Kompilieren: Variable nicht definiert".
Der Fehler wird an der Position (o.Blatt.Name) angezeigt.
Lg Daniela
entweder...
14.01.2022 08:52:44
Pierre
Hallo Daniela,
...ist der Punkt zwischen o und Blatt falsch, oder du hast o oder Blatt ganz oben vergessen zu Dimensionieren (Dim o As ...)
Gruß Pierre
Anzeige
ich habe nirgends
14.01.2022 09:23:46
Rudi
o.Blatt.Name geschrieben.
Gruß
Rudi
AW: ich habe nirgends
14.01.2022 09:56:14
Daniela
Wenn ich den Punkt setzte, wird der Fehler immer noch ausgegeben.
Hier einmal mein Makro als ganzes. Eventuell habe ich da noch was übersehen.

Dim oMe As Worksheet, iZeile As Long, oDatei As Object
Dim oFS As Object, wbQuelle As Workbook, sBlatt As String
Set oMe = ThisWorkbook.ActiveSheet
Const sDateiPfad As String = "Pfad \"
iZeile = 19
Application.ScreenUpdating = False
Set oFS = CreateObject("Scripting.FileSystemObject")
For Each oDatei In oFS.GetFolder(sDateiPfad).Files
If InStrRev(oDatei.Name, "xlsx") Then
sBlatt = GetSheetNames(o.Blatt.Name)(0)
oMe.Cells(iZeile, 2) = GetValue(sDateiPfad, oDatei.Name, sBlatt, Range("A2"))
oMe.Cells(iZeile, 3) = GetValue(sDateiPfad, oDatei.Name, sBlatt, Range("B2"))
oMe.Cells(iZeile, 4) = GetValue(sDateiPfad, oDatei.Name, sBlatt, Range("C2"))
oMe.Cells(iZeile, 5) = GetValue(sDateiPfad, oDatei.Name, sBlatt, Range("E2"))
oMe.Cells(iZeile, 6) = GetValue(sDateiPfad, oDatei.Name, sBlatt, Range("F2"))
oMe.Cells(iZeile, 7) = GetValue(sDateiPfad, oDatei.Name, sBlatt, Range("G2"))
oMe.Cells(iZeile, 8) = GetValue(sDateiPfad, oDatei.Name, sBlatt, Range("H2"))
oMe.Cells(iZeile, 9) = GetValue(sDateiPfad, oDatei.Name, sBlatt, Range("I2"))
oMe.Cells(iZeile, 10) = GetValue(sDateiPfad, oDatei.Name, sBlatt, Range("J2"))
oMe.Cells(iZeile, 11) = GetValue(sDateiPfad, oDatei.Name, sBlatt, Range("K2"))
oMe.Cells(iZeile, 12) = GetValue(sDateiPfad, oDatei.Name, sBlatt, Range("L2"))
oMe.Cells(iZeile, 13) = GetValue(sDateiPfad, oDatei.Name, sBlatt, Range("M2"))
oMe.Cells(iZeile, 14) = GetValue(sDateiPfad, oDatei.Name, sBlatt, Range("N2"))
oMe.Cells(iZeile, 15) = GetValue(sDateiPfad, oDatei.Name, sBlatt, Range("O2"))
oMe.Hyperlinks.Add Anchor:=oMe.Cells(iZeile, 17), Address:=sDateiPfad _
& oDatei.Name, TextToDisplay:=oDatei.Name
iZeile = iZeile + 1
End If
Next
Set oMe = Nothing: Set wbQuelle = Nothing
End Sub
Private Function GetValue(ByVal sPath As String, ByVal sFile As String, _
ByVal sSheet As String, oTarget As Object) As Variant
On Error GoTo ErrorHandler
If Right$(sPath, 1)  "\" Then sPath = sPath & "\"
GetValue = ExecuteExcel4Macro("'" & sPath & "[" & sFile & "]" & sSheet & "'!" _
& oTarget.Range("A1").Address(, , xlR1C1))
On Error GoTo ErrorHandler
If IsError(GetValue) Then
GetValue = ExecuteExcel4Macro("'" & sPath & "[" & sFile & "]" & "Feuil1" & "'!" _
& oTarget.Range("A1").Address(, , xlR1C1))
End If
Exit Function
ErrorHandler:
GetValue = CVErr(xlErrRef)
End Function

Anzeige
mein Fehler
14.01.2022 10:07:51
Rudi
Hallo,
es muss natürlich
sBlatt = GetSheetNames(oDatei.Name)(0)
heißen.
Gruß
Rudi
AW: mein Fehler
14.01.2022 10:49:57
Daniela
Ich glaub, wir haben es bald.
Jetzt gibt es noch einen Fehler "Fehler beim Kompilieren: Sub oder Function nicht definiert" Dieser Fehler tritt bei "GetSheetNames" ein.
AW: mein Fehler
14.01.2022 11:07:44
Rudi
Halli,
ich hatte doch geschrieben, dass du die Function aus dem von ralf_b verlinkten Thread in dein Projekt (allg. Modul) kopieren musst.
Gruß
Rudi
AW: mein Fehler
14.01.2022 11:53:36
ralf_b
naja und getsheetname ist private deklariert. pack sie entweder in das selbe Modul oder nimm das "private" vor function weg
AW: mein Fehler
17.01.2022 08:31:54
Daniela
Guten Morgen
Ehrlich gesagt, weis ich nicht wie ich diesen Script an meines anpassen soll.

Option Explicit
Sub first_tabName()
Dim varTabs As Variant, strFilename As String
strFilename = "Pfad\"
varTabs = GetSheetNames(strFilename)
MsgBox varTabs(0)
End Sub
Private Function GetSheetNames(ByVal FileName As String) As Variant
'original by Bob Phillips, adapted by j.ehrensberger
Dim objADO As Object, objCAT As Object, objTAB As Object
Dim lngI As Long, intL As Integer, intP As Integer, intS As Integer
Dim strCon As String, strTab As String
Dim vntTmp() As Variant
If Mid(FileName, InStrRev(FileName, ".") + 1) = "xls" Then
strCon = "Provider=Microsoft.Jet.OLEDB.4.0;" & "Extended Properties=Excel 8.0;" & _
"Data Source=" & FileName & ";"
ElseIf Mid(FileName, InStrRev(FileName, ".") + 1) Like "xls?" Then
strCon = "Provider=Microsoft.ACE.OLEDB.12.0;" & "Extended Properties=""Excel 12.0;HDR=YES"";" _
& "Data Source=" & FileName & ";"
Else
Exit Function
End If
Set objADO = CreateObject("ADODB.Connection")
objADO.Open strCon
Set objCAT = CreateObject("ADOX.Catalog")
Set objCAT.ActiveConnection = objADO
For Each objTAB In objCAT.Tables
strTab = objTAB.Name
intL = Len(strTab)
intP = 0
intS = 1
'Worksheet name with embedded spaces enclosed by single quotes
If Left(strTab, 1) = "'" And Right(strTab, 1) = "'" Then
intP = 1
intS = 2
End If
'Worksheet names always end in the "$" character
If Mid$(strTab, intL - intP, 1) = "$" Then
Redim Preserve vntTmp(lngI)
vntTmp(lngI) = Mid$(strTab, intS, intL - (intS + intP))
lngI = lngI + 1
End If
Next objTAB
If lngI > 0 Then GetSheetNames = vntTmp
objADO.Close
Set objCAT = Nothing
Set objADO = Nothing
End Function

Anzeige
AW: mein Fehler
17.01.2022 15:27:50
ralf_b
wenn oDatei.name der komplette Pfad deiner Datei ist und nicht nur der reine Dateiname, dann sollte das eigentlich klappen.

sBlatt = GetSheetNames(oDatei.Name)(0)

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige