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

Name erste Tabelle aus geschlossener Datei

Name erste Tabelle aus geschlossener Datei
24.08.2017 19:30:06
Jan
Hi zusammen,
über getvalue hole ich mir Zellinformationen aus einer geschlossenen Datei. Dabei muss ich u.a. ein Parameter mit dem Tabellenblattnamen übergeben.
Dieser variiert jedoch pro Nutzer und damit von Datei zu Datei. Gibt es eine Möglichkeit, via getvalue einen Wert aus dem jeweils erstem Tabellenblatt (unabhängig vom Namen ähnlich Sheets(1)) abzurufen? Oder alternativ via VBA den Namen der ersten Tabelle in der geschlossenen Datei abzufragen , um ihn dann in getvalue zu nutzen?
Beste Grüsse,
Jan

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Name erste Tabelle aus geschlossener Datei
24.08.2017 19:57:19
Sepp
Hallo Jan,
"geschlossen" ist relativ, für jede Aktion wird eine Datei geöffnet, auch wenn man das nicht mitbekommt.
Eine Möglichkeit.
' **********************************************************************
' Modul: Modul3 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Sub first_tabName()
Dim varTabs As Variant, strFilename As String

strFilename = "E:\Forum\datei.xlsx"

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

Gruß Sepp

Anzeige
AW: Name erste Tabelle aus geschlossener Datei
24.08.2017 20:00:57
Mullit
Hallo,
mit getvalue meinst Du wohl wie so häufig die Function von Thomas Ramel, da sollte es Dir bei 'VBA gut' leicht fallen, sie mit dem CodeName des Sheets anzupassen...
Gruß, Mullit
AW: Name erste Tabelle aus geschlossener Datei
24.08.2017 21:33:29
Jan
Vielen Dank an Sepp für den schnellen Vorschlag. Ja, geöffnet wird immer, aber "im Hintergrund" ist deutlich schneller als wenn Excel sich selbst bemüht ;-))
Ich hoffte noch auf etwas "weniger komplexes". Analog GetValue. Großartige Funktion - dachte immer diese gehört als Excel4Macro zur Toolbox des "VBA Vorgängers". Das diese Thomas Ramel zu verdanken ist wusste ich nicht.
Damit wir über dasselbe reden - ich meine folgende Funktion:
Public Function GetValue(Pfad, Datei, Blatt, Bezug)
'** Daten aus geschlossener Arbeitsmappe auslesen
Dim arg As String
'** Das Argument erstellen
arg = "'" & Pfad & "[" & Datei & "]" & Blatt & "'!" & Range(Bezug).Range("A1").Address(, ,  _
xlR1C1)
'** Auslesen _ber Excel4Macro
GetValue = ExecuteExcel4Macro(arg)
End Function
Diese verbaue ich in fast jedem Makro per Standard und greife aus den Modulen zu. Allerdings braucht es immer die Inputfaktoren
- Pfad
- Datei
- Blatt
- Zelle
Und das Blatt ist eben variabel.
Mullit, was meinst Du mit 'VBA gut'? Mit dem Codenamen sheets(1) habe ich es erfolglos versucht... Potentiell liegt das an fehlenden Gänsefüsschen o.ä. Wie würdest Du den "Blatt" Inout unter Nutzung des Codenamens für die erste Tabelle definieren?
Beste Grüsse,
jan
Anzeige
AW: Name erste Tabelle aus geschlossener Datei
25.08.2017 15:51:56
Mullit
Hallo,
uhh ja, für den CodeName würde im Hintergrund auch nochmal geöffnet, da läuft doch Sebbs Vorschlag astrein, das erste Arrayelement entspricht Deinem ersten Worksheet...
Gruß, Mullit
AW: Name erste Tabelle aus geschlossener Datei
25.08.2017 19:52:34
Jan
Hi Mullit,
zum Verstehen - wie würdest Du durch nochmaliges Öffnen das Thema mit dem Codenamen lösen?
Beste Grüsse,
Jan
was hast du an meinem Vorschlag auszusetzen? o.T.
25.08.2017 20:34:14
Sepp
Gruß Sepp

AW: was hast du an meinem Vorschlag auszusetzen? o.T.
26.08.2017 07:59:37
Jan
Hi Sepp,
gar nix. Ich versuche nur aus jedem aufkommenden Thema eine möglichst "breite Lernkurve" zu haben, um mein VBA Handwerkszeug maximal zu erweitern. Und beim nächsten Thema braucht es vielleicht die Adressierung einer Funktion bzw. die Übergabe der Inputfaktoren über den variableren Codenamen. Wenn also jemand weiß wie das funktioniert ist das gut zu wissen. Also definitiv keine Klage über Deinen schnell bereitgestellten Code ;-)) Hoffe nachvollziehbar...
Schönes WE,
Jan
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige