GELÖST VBA Excel: Daten aus geschlossener Tabelle suchen und in andere Tabelle einfügen

Diskutiere VBA Excel: Daten aus geschlossener Tabelle suchen und in andere Tabelle einfügen im Programmierung Forum im Bereich Software Forum; Hallo an alle, ich bin neu hier und hab gleich mal eine Frage (wie auch sonst...) Also es geht in meinem Problem in VBA Excel um folgendes: Ich...

FireNeck

Threadstarter
Dabei seit
16.09.2009
Beiträge
4
Hallo an alle,

ich bin neu hier und hab gleich mal eine Frage (wie auch sonst...)
Also es geht in meinem Problem in VBA Excel um folgendes:
Ich habe ein Tabelle mit dem Sheet "Telefonate" (aktiv, geöffnet). In dieses Sheet werden über ein UserForm Daten eingegeben. Zur Vervollständigung der Daten soll eine Projektnummer eingefügt werden. Diese Projektnummer befindet sich in einer anderen (geschlossenen) Excel-Datei im Sheet "Projekte". Dort interessieren eigentlich nur der Bereich "A1:B500", ist aber nicht entscheidend.
Dank der Suche bin ich mit dem Code von AlienJoker bzw. Peter Schirmer schonmal soweit:
Sub Auslesen()

Dim SuchWert As String
Dim PNR As String
Dim b As Integer

For b = 6 To 5000
If Worksheets("Telefonate").Cells(b, 4) = Empty Then
Exit For
Else
If Worksheets("Telefonate").Cells(b, 3) = Empty Then

SuchWert = Worksheets("Telefonate").Cells(b, 4)

Dim objExcel As New Excel.Application
Dim objSheet As Object

objExcel.Workbooks.Open "C:\Projekte.xls"
Set objSheet = objExcel.Sheets("Projekte")

Application.ScreenUpdating = False

Cells.Find(What:=SuchWert, After:=ActiveCell, LookIn:=xlValues, LookAt:= _
xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
, SearchFormat:=False).Activate

ActiveCell.Offset(0, -1).Activate
PNR = ActiveCell.Value

objExcel.ActiveWorkbook.Close SaveChanges:=False
objExcel.Quit
Application.ScreenUpdating = True

Set objExcel = Nothing
Set objSheet = Nothing
PNR = Worksheets("Telefonate").Cells(b, 3)
End If
End If
Next b

End Sub

Soweit, so gut. Das Problem im Moment ist noch, dass er die Suche der Indizierung auf das Sheet "Telefonate" anwendet, statt auf das ObjektSheet "Projekte".
Da immer nur ein Datensatz eigegeben wird, könnte ich es wahrscheinlich auch über einfache .Activate-Befehle machen und hin und her springen, oder das ganze per Hand suchen und eintragen, aber da ich bisher nur einfachere Sachen über VBA gemacht habe und dazu lernen möchte, gefällt mir das mit den Objekten ganz gut, zumal ich von denen keine Ahnung habe und auch noch nie wirklich damit was gemacht habe... "Lerning by Doing" also.
Vielen Dank für die Hilfe !
bis dann
FireNeck
 
A

AlienJoker

Gast
mach da mal statt "cells.find" "objsheet.cells.find", denn erst das verweist auf die andere Datei, cells greift auf die Projektdatei zu und das ist die "Telefonate".
 

FireNeck

Threadstarter
Dabei seit
16.09.2009
Beiträge
4
mach da mal statt "cells.find" "objsheet.cells.find", denn erst das verweist auf die andere Datei, cells greift auf die Projektdatei zu und das ist die "Telefonate".

Hallo AlienJoker,

Danke für die super-schnelle Antwort :aah
Das beschriebene Prozedere mit "objsheet.cell" hatte ich auch schon ausprobiert, hatte das ja in dem dazugehörigen Artikel wo auch der Rest her stammt, gefunden. Irgendwie scheint VBA das aber nicht zu mögen, denn er schreit mir "Laufzeitfehler '13' : Typen unverträglich" und verweist auf eben jene Zeile beim Debuggen....
Das ist ja mein Problem, ich hab noch nicht so wirklich raus, wie ich VBA beibringen kann in der "richtigen" Datei zu suchen, aber wie gesagt, hab mit Objekten noch nie gearbeitet und hangel mich komplett an Euren Ausführungen in dem anderen Thread lang... (ausserdem versteh ich nich alle Parameter der Suche, aber bin dabei mir das zu erarbeiten.. :D)
Also Danke nochmal für weitere Hinweise !
bis dann
FireNeck
 
A

AlienJoker

Gast
statt
Code:
Dim objSheet As Object
würde ist das explizit casten:
Code:
Dim objSheet as Excel.Worksheet

und dann sollte das eigentlich funktionieren, denn das verwende ich genauso mit

ausschnitt aus meinem Code:
Code:
objRange as excel.range
set objRange=objsheet.cells.find("suchstring")

'dann mach was mit objrange.row
 

FireNeck

Threadstarter
Dabei seit
16.09.2009
Beiträge
4
dann "sollte" das ....

Hallo AlienJoker,

ja, das kenn ich... sollte... :wut
Leider tut's das bei mir noch nicht.
Ich hab das Ojekt-Sheet als Excel-Sheet klassifiziert, wie vorgeschlagen, aber bekomme immer noch den Fehler der Typenunveerträglichkeit....
Ich weiss nicht, in wie fern es wichtig sein könnte, aber ich muss hier mit Excel 2003 und VBA 6.0 arbeiten.
Könnte das eventuell die Ursache sein ??
Vielen Dank für Deine Mühen !

FireNeck
 
A

AlienJoker

Gast
was anderes habe ich auch nicht. bis vor kurzem war es noch Excel 2000 ;)

versuch das mal mit der range.
mit range.row und range.column kannst du dann die Zelle mit dem Inhalt ermitteln

also:

Dim objrange as excel.range
objrange=objexcel.find("rundfusselsuppe")
PNR =objsheet.cells(objsheet.row,objsheet.column).value
 

FireNeck

Threadstarter
Dabei seit
16.09.2009
Beiträge
4
ich raff's nicht...

Hallo AlienJoker,

also trotz des erneuten Versuchs, den Bereich nun unzweifelhaft zu definieren, hat es nicht geklappt, er hat mir wieder eine Fehlermeldung präsentiert statt zu arbeiten.
Daher gebe ich diesen Weg auf und habe es jetzt mit einem etwas umständlicheren aber dafür funktionierenden Weg gelöst.
Vollständigkeitshalber hier aufgeführt:

Sub Auslesen()

Application.ScreenUpdating = False

Dim b As Integer
Dim SuchWert As String
Dim objExcel As New Excel.Application
Dim objSheet As Excel.Worksheet
Dim PNR As String
Dim z As Integer

objExcel.Workbooks.Open "C:\Projekte.xls"
Set objSheet = objExcel.Worksheets("Projekte")

For b = 6 To 5000
If Worksheets("Telefonate").Cells(b, 4) = Empty Then
Exit For
Else
If Worksheets("Telefonate").Cells(b, 3) = Empty Then

SuchWert = Worksheets("Telefonate").Cells(b, 4)

z = Range("B50000").End(xlUp).Row
For c = z To 5 Step -1
If objSheet.Cells(c, 2) = SuchWert Then
PNR = objSheet.Cells(c, 1)
Exit For
Else
PNR = ""
End If
Next c

Worksheets("Telefonate").Cells(b, 3) = PNR

End If
End If
Next b

objExcel.ActiveWorkbook.Close SaveChanges:=False
objExcel.Quit
Set objExcel = Nothing
Set objSheet = Nothing

Application.ScreenUpdating = True
End Sub

Nicht so schön und dauert auch einen Moment, aber dafür geht's...
Falls noch Anmerkungen zur Verbesserung aufkommen sollten, ich freu mich immer über konstruktive Kritik...
Vielen Dank, trotzdem AlienJoker !!
bis dann
FireNeck
 
Zuletzt bearbeitet:
Thema:

VBA Excel: Daten aus geschlossener Tabelle suchen und in andere Tabelle einfügen

VBA Excel: Daten aus geschlossener Tabelle suchen und in andere Tabelle einfügen - Ähnliche Themen

Automatische out-of- office-Antwort funktioniert nicht mehr: Hallo zusammen, ich habe in Outlook ein VBA-Makro erstellt, welches beim Beenden von Outlook automatisch die out-of-office-Antwort aktiviert und...
In Microsoft Excel Bilder in Zelle einfügen und Bilder in Zellen zentrieren - So klappt es ganz leicht!: Grafiken in Excel benötigt man zwar seltener, aber vielleicht hat man doch Tabellen die man mit ein paar Bildern aufwerten will und dann sollten...
Bild auf dem Sperrbildschirm: Hallo zusammen, ich habe mir ein kleines Excel-Progrämmchen geschrieben (Code siehe unten), welches beim Autostart aus dem Pfad...
VBA Outlook 2016 Geburts- und Jahrestage aktualisieren: Hallo Community, ich habe vorletztes Jahr für unser Unternehmen einen Code geschrieben, der die Geburtstage und Jahrestage meiner Kollegen in...
Excel Zeilen mit einer Formel per Doppelklick AutoAusfüllen - So funktioniert es per Excel Makro: In großen Liste alle Zellen einer ganze Zeile mit einer Formel zu füllen kann, je nach Länge einer solchen Zeile, Zeit in Anspruch nehmen und beim...

Sucheingaben

excel daten aus geschlossener datei auslesen

,

excel tabellen durchsuchen vba

,

excel vba suchen in anderer datei

Oben