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

Suchfunktion geschlossene Datei und Tabellenblatt

Suchfunktion geschlossene Datei und Tabellenblatt
11.04.2018 14:21:30
Sophie
Hallo,
ich würde in meinen Code gerne eine Suchfunktion integrieren, habe bisher allerdings noch nichts passendes gefunden um es mir anzupassen und kenne mich leider nicht so gut aus, dass ich mir selbst einfach so etwas schreiben könnte.
Momentane Situation: Ich habe ein Tool, das aus Startseite und Schnittstelle besteht. Die Startseite hat bislang noch keinen Einfluss. Die Schnittstelle holt sich bei Drücken eines Buttons eine Spalte aus einer geschlossenen Datenbank. Das klappt auch gut, nur würde ich gerne eine Suche integrieren. Ich möchte auf der Startseite Hersteller und Typ angeben und dann soll im Ordner "Datenbanken" die richtige Datei (=Hersteller) und darin dann das passende Tabellenblatt (=Typ) gesucht und die benötigte Spalte übertragen werden.
Hier das Tool: https://www.herber.de/bbs/user/120997.xlsm
Hier die Datenbank (musste Werte löschen weil zu groß; hoffe es funktioniert noch): https://www.herber.de/bbs/user/121000.xlsb
Code:
Private Function GetValue(pfad, datei, blatt, zelle)
'Dimensionierung der Variablen
Dim arg As String
'Sicherstellen, dass Datei existiert
If Right(pfad, 1)  "\" Then pfad = pfad & "\"
If Dir(pfad & datei) = "" Then
GetValue = "Datei nicht gefunden"
Exit Function
End If
'Das Argument erstellen
arg = "'" & pfad & "[" & datei & "]" & blatt & "'!" & Range(zelle).
_Range("A1").Address(, ,  x1R1C1)
'Auslesen über Excel4Macro
GetValue = ExecuteExcel4Macro(arg)
End Function
Sub Winddaten_auslesen() 'Bereich auslesen, Excel4Macro
Winddaten_löschen
'Dimensionierung der Variablen
Dim pfad As String, datei As String, blatt As String, bereich As Range, zelle As Object
_'Variablen für das Auslesen
Dim zeileneu As Integer, spalteneu As Integer, zelleneu As String 'Variablen für den
_Offset (um Werte an anderer Stelle als die in der Datenbank einzufügen)
'Angaben zu den auszulesenden Zellen und Offset
pfad = "C:\Users\SophieB\Documents"
datei = "Enercon.xlsx"
blatt = "E112"
Set bereich = Range("H10:H500") 'Ende liegt bei H8759,
_zum Testen max. 1000 angeben wegen der Dauer
'Offset, relativ zu Ursprungszeile/-spalte
zeileneu = "-6"
spalteneu = "-5"
'Bereich auslesen
For Each zelle In bereich
Application.StatusBar = "Lade Winddaten..." 'zeigt Text in Statusleiste an
'Zellen umwandeln
zelleneu = zelle.Address(False, False)
'Eintragen in Bereich
ActiveSheet.Cells(zelle.Row, zelle.Column).Offset(zeileneu, spalteneu).Value = _
GetValue(pfad, datei, blatt, zelleneu)
Next zelle
Application.StatusBar = False 'blendet Text in Statusleiste aus
End Sub
Mit integrierter Suche sollten sich dann Datei und Blatt den Werten auf der Startseite anpassen, die Range bleibt gleich. Geht das überhaupt mit geschlossener Datenbank? Und falls ja welchen Ansatz sollte ich verwenden?
Hatte mir schon mal mit
Sub Suche()
Dim SucheHersteller as String, SucheTyp as String
SucheHersteller = Sheets("Tabelle1").Cells(3, 2)
SucheTyp = Sheets("Tabelle1").Cells(4, 2)
MsgBox (SucheHersteller)
MsgBox (SucheTyp)
End Sub
die entsprechenden Werte geholt und über die Messagebox getestet, aber weiß dann nicht wie ich da weiter machen soll.
Danke und Grüße, Sophie

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Suchfunktion geschlossene Datei und Tabellenblatt
11.04.2018 16:53:43
Robert
Hallo Sophie,
wenn Du die Variablen datei und blatt wie folgt definierst, werden die in der Startseite aufgeführte Datei (Hersteller) und Tabelle (Typ) genommen:
datei = ThisWorkbook.Sheets("Startseite").Range("B3") & ".xlsx"
blatt = ThisWorkbook.Sheets("Startseite").Range("B4")

Noch ein Tipp:
Wenn Du den Bereich nicht mit einer For-Schleife und der selbst gebauten Funktion Getvalue Zelle für Zelle einliest sondern alles mit folgendem Code in einem Rutsch erledigst (rot markiert), wird der Lauf erheblich schneller, auch wenn der Bereich bis zur Zeile 8759 geht. Das geht dann so schnell, dass Du auf den Fortschrittsverlauf auch verzichten kannst.
'Bereich auslesen
'neu, erheblich schneller:

bereich.Offset(zeileneu, spalteneu).FormulaLocal = "='" & pfad & "\[" & datei & "]" & blatt & "' _
!H10"
bereich.Offset(zeileneu, spalteneu).Value = bereich.Value

'alt, dauert ewig:
'For Each zelle In bereich
'    Application.StatusBar = "Lade Winddaten..." 'zeigt Text in Statusleiste an
'    'Zellen umwandeln
'    zelleneu = zelle.Address(False, False)
'    'Eintragen in Bereich
'    ActiveSheet.Cells(zelle.Row, zelle.Column).Offset(zeileneu, spalteneu).Value = GetValue( _
pfad, datei, blatt, zelleneu)
'Next zelle
'Application.StatusBar = False 'blendet Text in Statusleiste aus

Probiere es mal aus.
Gruß
Robert
Anzeige
AW: Suchfunktion geschlossene Datei und Tabellenblatt
11.04.2018 17:10:57
Sophie
Hallo,
schonmal vielen lieben Dank für die Antwort. Die Suche funktioniert einwandfrei und das neue _ Auslesen ist ja phänomenal. Leider bleiben die Daten nicht stehen. Wenn ich alles per Einzelschritt durchgehe sind bei

bereich.Offset(zeileneu, spalteneu).Value = bereich.Value
alle Daten da und beim nächsten Einzelschritt (End Sub) verschwinden sie. Was muss da noch rein, dass die Daten stehen bleiben?
AW: Suchfunktion geschlossene Datei und Tabellenblatt
11.04.2018 18:34:59
Robert
Hallo Sophie,
Sorry, mein Fehler. Ich hatte das Offset erst nachträglich eingebaut und übersehen, dass es in der 2. Zeile zweimal rein muss. Also:
bereich.Offset(zeileneu, spalteneu).Value = bereich.Offset(zeileneu, spalteneu).Value
Um das ganze etwas flexibler zu gestalten, schlage ich folgende Version anstelle des von mir in rot vorgeschlagenen 1. Version vor. Dann muss bei Änderung der Variablen bereich nicht auch noch die Formel geändert zu werden:
'Bereich auslesen
zelleneu = bereich.Cells(1, 1).Address(False, False)
With bereich.Offset(zeileneu, spalteneu)
.FormulaLocal = "='" & pfad & "\[" & datei & "]" & blatt & "'!" & zelleneu
.Value = .Value
End With

Gruß
Robert
Anzeige
AW: Suchfunktion geschlossene Datei und Tabellenblatt
12.04.2018 08:14:15
Sophie
Guten Morgen Robert,
es funktioniert prima. Ein Traum, ich bin begeistert. Tausend Dank!
Grüße Sophie
Gerne und Danke für die Rückmeldung (owT)
12.04.2018 08:26:06
Robert

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige