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 Programmierung; 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...
#1
F

FireNeck

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
 
#2
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".
 
#3
F

FireNeck

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
 
#4
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
 
#5
F

FireNeck

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
 
#6
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
 
#7
F

FireNeck

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

Sucheingaben

excel daten aus geschlossener datei auslesen

,

excel tabellen durchsuchen vba

,

excel vba suchen in anderer datei

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

  • PowerPoint Folien werden beim Öffnen der Präsentation mit VBA aus Excel heraus automatisch (ungewoll

    PowerPoint Folien werden beim Öffnen der Präsentation mit VBA aus Excel heraus automatisch (ungewoll: Hallo, auf einer virtuellen Maschine mit Windows 10 wird jede Nacht ein VBA-Skript in Excel ausgeführt, doch seit kurzem werden beim Öffnen der...
  • Microsoft Defender unter Windows 10 entfernt VBA-Module in Excel, Falschinterpreation "TrojanDowload

    Microsoft Defender unter Windows 10 entfernt VBA-Module in Excel, Falschinterpreation "TrojanDowload: Microsoft Defender unter Windows 10 entfernt VBA-Module in Excel, Falschinterpreation "TrojanDowload Hallo zusammen Wir haben in letzter Zeit...
  • Excel VBA Range mit Zelleninhalt definieren?

    Excel VBA Range mit Zelleninhalt definieren?: Guten Morgen, Ich bin gerade dabei eine Suchfunktion im Excel zu erstellen. Es gibt zwei hintereinander folgende Tabellen. Einmal für die...
  • Excel 2016 VBA rechnet mit Punkt statt Komma als Dezimaltrennzeichen

    Excel 2016 VBA rechnet mit Punkt statt Komma als Dezimaltrennzeichen: Seit dem ich meinen Computer auf Englisch umgestellt habe, funktioniert in Excel 2016 VBA mein ursprüngliches Programm nicht mehr so wie es...
  • Excel VBA Array Werte verschwinden

    Excel VBA Array Werte verschwinden: Hallo, NG, ich habe hier ein ganz komisches Problem. Ich habe ein Array, das ich mit Werten in einer Schleife befülle: For cntZaehler =...
  • Ähnliche Themen

    Oben