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

Laufzeitfehler 438

Laufzeitfehler 438
16.12.2014 17:43:32
Lisa
Hallo ihr Lieben.
ich komme einfach nicht weiter.
nachfolgend soll die Variable "Heute" mit z.B. "Fr 51" befüllt werden, dieses Format befindet sich im Blatt "IST_Master" in Zelle A1 -> =TEXT(***;"TTT")& " " & KALENDERWOCHE(***;21)
allerdings will er einfach die Variable nicht "befüllen" -.-

Dim Prognose As Workbook
Dim Datenbasis As Workbook
Dim IST As Worksheet
Dim Heute As Range
Workbooks("Dokumentation.xlsm").Activate
Workbooks("2014_04_01_Tagesprognose.xlsm").Activate
Set Prognose = ActiveWorkbook
Sheets("IST_Master").Activate
Set IST = ActiveSheet
'Set Heute = Prognose.IST.Range("a1")
Set Heute = ThisWorkbook.Sheet("IST_Master").Range("a1")
Die letzte Zeile will einfach nicht.
Es kommt der Fehler
Laufzeitfehler '438:
Objekt unterstützt diese Eigenschaft oder Methode nicht
Woran liegt das?
Mittlerweile habe ich den selben Fehler nicht nur ein mal, daher wäre ich sehr dankbar, wenn jemand mir das erklären kann, was ich falsch mache, sodass dies künftig nicht mehr geschieht :/
Viiiiiieeeelen Dank =)

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Laufzeitfehler 438
16.12.2014 18:20:47
Daniel
Hi
der Fehler ist, dass da ein s fehlt:
Set Heute = ThisWorkbook.Sheets("IST_Master").Range("a1")
an dem Code: 'Set Heute = Prognose.IST.Range("a1") ist falsch, dass die Worksheetvariable IST schon fest an ein Workbook gebunden ist! das Prognose ist überflüssig und unnötig ist, Set Heute = IST.Range("a1") reicht.
desweiteren solltest du nicht Selektiern und aktivieren, sondern wenn möglich vollständig referenzieren:
schlecht:
Workbooks("2014_04_01_Tagesprognose.xlsm").Activate
Set Prognose = ActiveWorkbook
Sheets("IST_Master").Activate
Set IST = ActiveSheet

besser:
Set Prognose = Workbooks("2014_04_01_Tagesprognose.xlsm")
Set IST = Prognose.Sheets("IST_Master")

oder gleich direkt:
Set IST = Workbooks("2014_04_01_Tagesprognose.xlsm").Sheets("IST_Master")
Gruß Daniel

Anzeige
AW: Laufzeitfehler 438 ->o.T.
17.12.2014 08:25:56
Lisa
Du hast mich gerettet!
Das fehlende "s" war tatsächlich die Lösung.
allerdings frage ich mich, warum dann nicht
Set Heute = Prognose.IST.Range("a1")
funktioniert hat...
ich habe es jetzt einfach ganz ausführlich mit
Set Heute = Workbooks("2014_04_01_Tagesprognose.xlsm").Sheets("IST_Master").Range("a1")

gemacht
zu der Thematik mit den Referenzen hast du Recht,
das wusste ich so auch nicht.
allerdings müssen die verschiedenen Dateien und Blätter ohnehin aktiviert werden, daher ist es in diesem Fall ganz passend.
Nichtsdestotrotz werde ich an anderen Stellen die "Bessere Variante" einbauen =)
nochmals danke =)

Anzeige
AW: Laufzeitfehler 438 ->o.T.
17.12.2014 08:47:31
Daniel
hi,
hatte ich doch geschrieben:
an der Worksheetvariablen IST hängt das Workbook schon automatisch mit dran, deswegen darfst du da nicht nochmals eines davor setzen.
Gruß Daniel

Set XXX = XYX -> Nothing
17.12.2014 13:48:21
Lisa
Oh, so ist das zu verstehen. Alles klar :) schon wieder was dazu gelernt, wie man es vereinfachen kann!
Ich habe jedoch noch ein weiteres anliegen, das eben falls mit dem Set = Befehl zu tun hat.
und zwar habe ich folgenden code:
Private Sub Suchen_Eintragen_Click()
Dim Prognose As Workbook
Dim Datenbasis As Workbook
Dim Prognose_Blatt As Worksheet
Dim Anfang_Zeitraum As Range
Dim PW_Tag1 As Variant
Dim Eingabezeile As Variant
Sheets("Prog_Master").Activate
Set Anfang_Zeitraum = ThisWorkbook.Sheets("Prog_Master").Range("a16") 'Zeile mit der ersten  _
Uhrzeit! -> 00:15
Set PW_Tag1 = ThisWorkbook.Sheets("PW").Range("H2") 'Do 49
Set PW_Tag2 = ThisWorkbook.Sheets("PW").Range("L2")
Set PW_Tag3 = ThisWorkbook.Sheets("PW").Range("P2")
Worksheets("Daten").Activate
ActiveSheet.Range("a:f").Select
'PW als Spalte definieren
Set PW = Selection.Find(What:="PW", after:=ActiveCell, LookIn:= _
xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows, _
SearchDirection:=xlNext, MatchCase:=False)
'###~~~~~~~~~~~Beginn der SUCHEN~~~~~~~~~~~~###
'NEUE SUCHE PW
'Tag1 als Zeile definieren
Set PW_Tag1 = Selection.Find(What:=PW_Tag1.Value, after:=ActiveCell, LookIn:= _
xlValues, LookAt:=xlWhole, SearchOrder:=xlByColumns, _
SearchDirection:=xlNext, MatchCase:=False)
ActiveSheet.Cells(PW_Tag1.Row + 1, PW.Column).Select
ActiveSheet.Range(Selection, ActiveSheet.Cells(Selection.Row + 95, Selection.Column)).Select
Selection.Copy
Sheets("PW").Select
ActiveSheet.Range("A:X").Select
'Set Eingabezeile = Selection.Find(What:=Anfang_Zeitraum, after:=ActiveCell, LookIn:= _
xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows, _
SearchDirection:=xlNext, MatchCase:=False)
'Eingabezeile wird kein Wert zugewiesen
Set Eingabezeile = Selection.Find(What:=Anfang_Zeitraum.Value, after:=ActiveCell, LookIn:= _
xlValues, LookAt:=xlWhole, SearchOrder:=xlByColumns, _
SearchDirection:=xlNext, MatchCase:=False)
Set PW_Eingabespalte_Tag1 = Selection.Find(What:=PW_Tag1.Value, after:=ActiveCell, LookIn:= _
xlValues, LookAt:=xlWhole, SearchOrder:=xlByColumns, _
SearchDirection:=xlNext, MatchCase:=False)
ActiveSheet.Cells(Eingabezeile.Row, PW_Eingabespalte_Tag1.Column).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
End Sub
zuerst werden 96 Werte kopiert, die dann im Blatt "PW" in der richtigen Stelle eingefügt werden sollen.
Die Spalte wird richtig erkannt, allerdings nicht aber die Zeile, in der das Kopierte eingefügt werden soll.
Bei der Überwachungsfunktion spuckt es nach folgendem Schritt für Eingabezeile immer "Nothing" aus,
obwohl für Anfang_Zeitraum der richtige Wert eingelesen wurde.
Set Eingabezeile = Selection.Find(What:=Anfang_Zeitraum.Value, after:=ActiveCell, LookIn:= _
xlValues, LookAt:=xlWhole, SearchOrder:=xlByColumns, _
SearchDirection:=xlNext, MatchCase:=False)
Das hieße ja, dass er den Wert (Anfang_Zeitraum) in dem selektierten Bereich einfach nicht findet, oder?
aber warum?
der Zeitraum ist eine Reihe von Viertelstunden, also
00:15
00:30
00:45
01:00
01:15
...
die Variable Anfang_Zeitraum ließt dementsprechend 00:15 aus.
Egal wie ich Anfang_Zeitraum definiere, ob als Range, Variant oder Double (weil 00:15 als 1,04166666E-02 gelesen wird), es will einfach nichts finden -.-
Das schlimmste:
ein paar Zeilen darüber funktioniert es bei:
Set PW_Tag1 = Selection.Find(What:=PW_Tag1.Value, after:=ActiveCell, LookIn:= _
xlValues, LookAt:=xlWhole, SearchOrder:=xlByColumns, _
SearchDirection:=xlNext, MatchCase:=False)
was habe ich hier nur übersehen ?

Anzeige
AW: Set XXX = XYX -> Nothing
17.12.2014 14:07:17
Daniel
Hi
da .FIND nach genauer Übereinstimmung sucht, könnte hier die kleinen Ungenauigkeiten der Gleitkommazahlen eine Rolle spielen, das ist ein generelles Problem.
ein Workaround wäre beispielsweise dass du eine Hilfsspalte anlegst, in welcher du dir die Zeit mit der Formel =Text(...;"hh:mm") als Text anzeigen lässt und dann mit .FIND auch konkret nach dem Text "00:15" suchst.
Gruß Daniel

Korrekt und vollständig referenzieren
16.12.2014 18:26:36
Christian
hallo Lisa,
bei "VBA gut" ist dir das Objekt-Modell doch sicher bestens bekannt.
Tipp:
- verzichte auf Activate, sondern referenziere korrekt und vollständig
- schau dir in der VBA-Hilfe mal den Unterschied zw. ThisWorkbook und ActiveWorkbook an
Hier ein Bsp in Anlehnung an deinen Code:
Option Explicit
Sub TestIt()
Dim wkb As Workbook
Dim wks As Worksheet
Dim rng As Range
Set wkb = Workbooks("Dokumentation.xlsm")
Set wks = wkb.Sheets("IST_Master")
Set rng = wks.Cells(1, 1)
' hier dein Aktionen, zB:
MsgBox rng.Value
Set rng = Nothing
Set wks = Nothing
Set wkb = Nothing
End Sub
Gruß
Christian

Anzeige
AW: Korrekt und vollständig referenzieren -> o.T.
17.12.2014 08:28:21
Lisa
Hallo Christian.
Das war mir bisher gar nciht so bewusst.
Da die Dateien und Blätter hier ohnehin angesteuert und aktiviert werden müssen, passt es hier ganz gut.
An anderen Stellen allerdings werde ich wie du vorgeschlagen hast den "direkteren" Weg einbauen =)
Außerdem habe ich mich jetzt auch über ThisWorkbook und ActiveWorkbook schlau gemacht.
Vielen Dank für die Hilfe =)

AW: Laufzeitfehler 438
17.12.2014 06:10:06
Olek
Hi Lisa,
hast Du aktuell ein Windows Update gemacht? Wenn ja, dort ist ein Bug drinnen, der diesen Laufzeitfehler verursacht, so ist es zumindest bei all unseren Makros gewesen.
Im WWW hab ich einen Batch mit Erklärung gefunden.
Den Ausführen und dann sollte es wieder klappen.
http://www.haserodt.de/index.php?site=505 (hier haben wir den Batch gefunden)
Gruß Olek

Anzeige
AW: Falscher Thread...
17.12.2014 09:38:18
Olek
Hi Boris,
nee war schon bewußt auf Lisa geantwortet. Da sie ja schireb dass sie das Problem nu mehrfach hatte....
Grüße olek

Nun denn...
17.12.2014 09:40:48
{Boris}
Hi Olek,
...alles klar. Aber Lisas Problem war nur ein fehlendes "s" bei Sheets - mehr nicht ;-)
VG, Boris

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige