1. Liebe Forumsgemeinde,

    aufgrund der Bestimmungen, die sich aus der DSGVO ergeben, müssten umfangreiche Anpassungen am Forum vorgenommen werden, die sich für uns nicht wirtschaftlich abbilden lassen. Daher haben wir uns entschlossen, das Forum in seiner aktuellen Form zu archivieren und online bereit zu stellen, jedoch keine Neuanmeldungen oder neuen Kommentare mehr zuzulassen. So ist sichergestellt, dass das gesammelte Wissen nicht verloren geht, und wir die Seite dennoch DSGVO-konform zur Verfügung stellen können.
    Dies wird in den nächsten Tagen umgesetzt.

    Ich danke allen, die sich in den letzten Jahren für Hilfesuchende und auch für das Forum selbst engagiert haben. Ich bin weiterhin für euch erreichbar unter tti(bei)pcwelt.de.
    Dismiss Notice

Excel: Laufzeitfehler '438'

Discussion in 'Office-Programme' started by Doctore IV, Jan 29, 2007.

Thread Status:
Not open for further replies.
  1. Doctore IV

    Doctore IV Byte

    Hallo,

    ich habe ein technisches Problem mit Excel. Ich habe hier eine programmierte Exceltabelle vorliegen, bei dem ich einige Angaben wie Name, Firmenname, Ort etc. eingeben kann. Wenn ich dann auf OK drücke und möchte das die verschiedenen Posten die ich gerade eingefüllt habe in die Tabelle hineinkommen schreibt er folgendes:

    „Laufzeitfehler ‚438’:
    Objekt unterstützt diese Eigenschaft oder Methode nicht“

    Dann bietet er mir an die Sache zu „Debuggen“ oder zu „Beenden“

    Ich weiß wirklich nicht was ich gegen diesen Fehler tun soll.

    Bitte helft mir!

    Gruß
    Doctore IV
     
  2. Hascheff

    Hascheff Moderator

    Hallo, offensichtlich machst du deine Eingaben in ein Dialogfenster. Um die Angaben in die Tabelle übergeben zu können, muss nach OK natürlich Code laufen. Der hat einen Fehler. Wenn du "Debuggen" klickst, bekommst du vielleicht die fehlerhafte Code-Zeile zu Gesicht. Eventuell ist der Code aber auch gesperrt.

    Wenn du keine Erfahrung mit Code hast, wirst du da nichts reparieren können. Eventuell können wir den Fehler erkennen, wenn du die Zeilen hier reinkopierst.

    Wenn der Code gesperrt ist, musst du die Datei reklamieren.

    Wenn du "Debuggen" gewählt hast und aus dem Editor-Fenster herauswillst, klicke "Stopp" - Sieht aus wie auf Playern.
     
  3. Doctore IV

    Doctore IV Byte

    Hallo,

    wenn ich auf Debuggen klicke sehe ich folgende Code Zeilen:

    If chb20000kv.Value = True Then
    Application.ActiveSheet.Check20000 = 1
    Else
    Application.ActiveSheet.Check20000 = 0
    End If

    Hierbei ist die Zeile Application.ActiveSheet.Check20000 = 0 gelb markiert und ein gelber Pfeil befindet sich am Anfang der Zeile.


    Danke für die Hilfe!


    Gruß
    Doctore IV
     
  4. Angel-HRO

    Angel-HRO Megabyte

    Dann gibt es auf dem aktuellen Arbeitsblatt (ActiveSheet) wohl kein Element namens check20000
     
  5. Doctore IV

    Doctore IV Byte

    Und wie kann ich den Fehler jetzt am besten beheben? Einfach den Code löschen oder wie kann ich zurück verfolgen was angeblich das ActiveSheet.Check20000 sein sollte?

    Gruß
    Doctore IV
     
  6. Hascheff

    Hascheff Moderator

    Bei mir kommt die Fehlermeldung auch.
    Möglicherweise hast du eine andere Excel-Version als der Code-Schreiber.
    Versuch mal, das herauszufinden.

    Versuch mal, ob es mit folgender Änderung klappt.
    Ersetze

    Application.ActiveSheet.Check20000 = 0

    durch

    Range("Check20000").Select
    ActiveCell.Value = 2


    Analog in der Zeile vor else.
     
  7. Doctore IV

    Doctore IV Byte

    Ich habe das mit dem Befehl den du mir gegeben hast mal versucht, leider kam weiterhin die Meldung, dass es sich hierbei um einen Fehler handelt!

    Ich habe mittlerweile eine Vermutung was das ActiveSheet sein könnte. In dem Dialogfenster kann ich neben Dingen wie Firmenname etc. auchnoch Häckchen bei einigen Elementen setzen, die eigentlich auf die Tabelle übertragen werden müssten. Aber das ist nicht der Fall. Könnte das das fehlerhafte ActiveSheet sein?

    Gruß
    Doctore IV
     
  8. Angel-HRO

    Angel-HRO Megabyte

    ActiveSheet ist "eigentlich" nur ein Verweis auf das aktuell geöffnte Tabellenblatt..

    was mir noch einfällt, es könnte wirklich an der version liegen.

    Ersetze mal
    Code:
    Application.ActiveSheet.Check20000
    mit
    Code:
    ActiveWorkbook.ActiveSheet.Check20000
     
  9. Hascheff

    Hascheff Moderator

    @ Doctore IV: Du müsstest mal deine Excel-Version nennen.

    @Angel-HRO: Könnte stimmen, aber richtig logisch ist das auch nicht.
    In der Excel 2000-VBA-Hilfe wird ActiveSheet als Eigenschaft des Application-, Window- und Workbook-Objekts genannt.

    Was ich mich noch frage: Ich habe Check20000 als Name eines Bereichs betrachtet. aber selbst, wenn es eine einzelne Zelle ist, ich kann nur der Eigenschaft Value einen Wert zuweisen. Ist das in neueren Excel-Versionen anders?
     
  10. Urs2

    Urs2 Megabyte

    Es ist schon richtig - auch in Excel 2003 - nur .Value gibt oder nimmt Werte. Ausser wenn 0 und 1 als String definiert sind, dann wäre es .Caption.

    Hier muss man allerdings im Nebel stochern...
    Ohne den den gesamten Code von Sub und Form kann man gar nichts sagen. Offensichtlich handelt es sich ja um ein Form, vordefinierte Dialogfenster mit mehreren Texteingaben und Checkboxen gibt es nicht. Wenn ein Teil des Codes im Form und der Rest im Modul ist, sind solche Fehler fast zwingend...

    Was ist Check2000? Range, Zelle, Anweisung (Weckerläuten, Stromschlag...)? Das müsste ja vorher im Code definiert sein.

    Immerhin hat der Debugger wenigstens den Text erkannt und akzeptiert - für den Erfolg ist er dann nicht mehr zuständig.

    Urs
     
  11. Hascheff

    Hascheff Moderator

    Klar, einfacher würde es, wenn der TO uns den ganzen Code zugänglich machen könnte.
    @ Doctore IV: Im Code einfach <Strg>+a drücken.
     
  12. Doctore IV

    Doctore IV Byte

    Ich habe Excel 2003, aber leider hat auch der Trick mit dem:

    ActiveWorkbook.ActiveSheet.Check20000

    nicht funktioniert, das ist schon seltsam, sobald ich statt dem sonstigen Text dort:
    ActiveWorkbook.ActiveSheet.Check20000 = 1
    ActiveWorkbook.ActiveSheet.Check20000 = 0
    eingegeben habe, ist es sofort auch wieder gelb markiert...

    Gruß
    Doctore IV
     
  13. Doctore IV

    Doctore IV Byte

    Gut, hier ist der ganze Code:
    Private Sub cmbAbbrechen_Click()
    Unload Me
    End Sub


    Private Sub cmbDrucken_Click()
    If comOrt.Value = "Bitte Ortsbereich auswählen" Then
    MsgBox "Bitte wählen Sie einen Ortsbereich aus!"
    GoTo Ende
    End If
    Application.Goto Range("D10")
    Application.ActiveCell = txtBaumaßnahme.Text
    Application.Goto Range("D11")
    Application.ActiveCell = comOrt.Value
    Application.Goto Range("D13")
    Application.ActiveCell = txtAbgrenzung.Text
    Application.Goto Range("D14")
    Application.ActiveCell = txtHerr.Text
    Application.Goto Range("D15")
    Application.ActiveCell = txtFirma.Text
    Application.Goto Range("E17")
    Application.ActiveCell = "Herrn " & txtHerrn.Text
    Application.Goto Range("H15")
    Application.ActiveCell = txtFax.Text
    Application.Goto Range("H7")
    Application.ActiveCell = "Seite: 1 / " & txtSeiten.Text
    If chb20000kv.Value = True Then
    Application.ActiveSheet.Check20000 = 1
    Else
    Application.ActiveSheet.Check20000 = 0
    End If
    If chb230kv.Value = True Then
    Application.ActiveSheet.Check230 = 1
    Else
    Application.ActiveSheet.Check230 = 0
    End If
    If chbSBKabel.Value = True Then
    Application.ActiveSheet.CheckSB = 1
    Else
    Application.ActiveSheet.CheckSB = 0
    End If
    If chbInfokabel.Value = True Then
    Application.ActiveSheet.CheckInfo = 1
    Else
    Application.ActiveSheet.CheckInfo = 0
    End If
    If chbKeinKabel.Value = True Then
    Application.ActiveSheet.CheckKein = 1
    Else
    Application.ActiveSheet.CheckKein = 0
    End If
    If chbAushändigung.Value = True Then
    Application.ActiveSheet.CheckBestandspläne = 1
    Else
    Application.ActiveSheet.CheckBestandspläne = 0
    End If
    If chbEinweisung.Value = True Then
    Application.ActiveSheet.CheckEinweisung = 1
    Else
    Application.ActiveSheet.CheckEinweisung = 0
    End If
    If chbSuchschlitze.Value = True Then
    Application.ActiveSheet.CheckSuchschlitze = 1
    Else
    Application.ActiveSheet.CheckSuchschlitze = 0
    End If
    If chbAchtung.Value = True Then
    Application.ActiveSheet.CheckAchtung = 1
    Else
    Application.ActiveSheet.CheckAchtung = 0
    End If
    If chbHandschachtung.Value = True Then
    Application.ActiveSheet.CheckHand = 1
    Else
    Application.ActiveSheet.CheckHand = 0
    End If
    If chbKabeltrasse.Value = True Then
    Application.ActiveSheet.CheckKabeltrasse = 1
    Else
    Application.ActiveSheet.CheckKabeltrasse = 0
    End If
    Worksheets("Tabelle1").Select
    ActiveWindow.SelectedSheets.PrintOut
    Unload Me
    Ende:
    End Sub

    Private Sub cmdMail_Click()
    If comOrt.Value = "Bitte Ortsbereich auswählen" Then
    MsgBox "Bitte wählen Sie einen Ortsbereich aus!"
    GoTo Ende
    End If
    Application.Goto Range("D10")
    Application.ActiveCell = txtBaumaßnahme.Text
    Application.Goto Range("D11")
    Application.ActiveCell = comOrt.Value
    Application.Goto Range("D13")
    Application.ActiveCell = txtAbgrenzung.Text
    Application.Goto Range("D14")
    Application.ActiveCell = txtHerr.Text
    Application.Goto Range("D15")
    Application.ActiveCell = txtFirma.Text
    Application.Goto Range("E17")
    Application.ActiveCell = "Herrn " & txtHerrn.Text
    Application.Goto Range("H15")
    Application.ActiveCell = txtFax.Text
    Application.Goto Range("H7")
    Application.ActiveCell = "Seite: 1 / " & txtSeiten.Text
    If chb20000kv.Value = True Then
    Application.ActiveSheet.Check20000 = 1
    Else
    Application.ActiveSheet.Check20000 = 0
    End If
    If chb230kv.Value = True Then
    Application.ActiveSheet.Check230 = 1
    Else
    Application.ActiveSheet.Check230 = 0
    End If
    If chbSBKabel.Value = True Then
    Application.ActiveSheet.CheckSB = 1
    Else
    Application.ActiveSheet.CheckSB = 0
    End If
    If chbInfokabel.Value = True Then
    Application.ActiveSheet.CheckInfo = 1
    Else
    Application.ActiveSheet.CheckInfo = 0
    End If
    If chbKeinKabel.Value = True Then
    Application.ActiveSheet.CheckKein = 1
    Else
    Application.ActiveSheet.CheckKein = 0
    End If
    If chbAushändigung.Value = True Then
    Application.ActiveSheet.CheckBestandspläne = 1
    Else
    Application.ActiveSheet.CheckBestandspläne = 0
    End If
    If chbEinweisung.Value = True Then
    Application.ActiveSheet.CheckEinweisung = 1
    Else
    Application.ActiveSheet.CheckEinweisung = 0
    End If
    If chbSuchschlitze.Value = True Then
    Application.ActiveSheet.CheckSuchschlitze = 1
    Else
    Application.ActiveSheet.CheckSuchschlitze = 0
    End If
    If chbAchtung.Value = True Then
    Application.ActiveSheet.CheckAchtung = 1
    Else
    Application.ActiveSheet.CheckAchtung = 0
    End If
    If chbHandschachtung.Value = True Then
    Application.ActiveSheet.CheckHand = 1
    Else
    Application.ActiveSheet.CheckHand = 0
    End If
    If chbKabeltrasse.Value = True Then
    Application.ActiveSheet.CheckKabeltrasse = 1
    Else
    Application.ActiveSheet.CheckKabeltrasse = 0
    End If
    Unload Me
    Ende:
    End Sub

    Private Sub UserForm_Activate()
    comOrt.AddItem "Wörth"
    comOrt.AddItem "Erlenbach"
    comOrt.AddItem "Mechenhard"
    comOrt.AddItem "Streit"
    comOrt.AddItem "Klingenberg"
    comOrt.AddItem "Trennfurt"
    comOrt.AddItem "Obernburg"
    comOrt.AddItem "Eisenbach"
    End Sub


    Gruß
    Doctore IV
     
  14. Urs2

    Urs2 Megabyte

    @dottore > Wenn Dich das wirklich interessiert, dann...

    1. Dies ist der Form-Code. Es muss aber noch ein Modul geben, das das Formular aufruft. Vorerst nützt der dortige Code aber auch nichts zum Replizieren, weil das Formular selbst dort nicht sichtbar ist...

    2. Darum musst Du in den VB-Editor gehen >

    3. Wenn Du nicht GENAUESTENS weisst, was Du dort anrichten könntest >

    4. Speichere zuerst deine Excel-Datei "xyz.xls" als "xyz - versuch1.xls" im gleichen Verzeichnis ab >

    5. Oeffne den VB-Editor > \Extras \Makros \Visual-Basic Editor >

    6. Dort musst Du sehen können:
    - Symbolleiste
    - das normale Fenster
    - das Fenster "Projekt"
    - das Fenster "Eigenschaften"
    - das Fenster "Local"
    Wenn nicht > über \Ansicht einblenden

    7. Dort erscheint dann in Projekt > VBA Projekt + (Name wie deine Datei auch heissen mag)

    8. Expand das Ding

    9. Wenn Du jetzt auf das "dreibeinige Symbol" doppel-clickst erscheint der Code im Modul

    10. Wenn Du auf das "ähnlich-wie-im-Explorer-Textdatei-Symbol" doppel-clickst, erscheint das Formular > im Bearbeiten-Modus.

    11. Wenn Du dort auf eine freie Stell doppel-clickst, erscheint der Form-Code (vermutlich der, den Du publizierst hattest)

    12. Wenn irgendwas in die Hosen gehen sollte > lösch die Excel-Datei "xyz - versuch1" und geh zu Punkt 4. zurück...

    Jetzt könnten wir weiter forschen...

    Vermutlich sind die sub-übergreifenden Dim-Anweisungen bei 9. zuoberst. Möglicherweise ist dort der Fehler...

    Wenn Du soweit bist, bestätige das hier...

    Gruss
    Urs
     
  15. Hascheff

    Hascheff Moderator

    @ Urs2: Das ist der Form-Code!

    @ Doctore IV: Wenn du Urs2's Anweisungen befolgst, bist du nach 9. da, wo du den Code kopiert hast.

    Glaub ich nicht.

    Wir müssen uns mal den Excel-Tabellen zuwenden.
    Hat die Mappe mehrere Tabellen? Möglicherweise ist die falsche Tabelle aktiviert.
    Schau dir mal die verschiedenen Tabellen an. Sieht die aktive Tabelle so aus, als könnte sie die Formular-Daten aufnehmen oder sieht eine andere Tabelle eher danach aus.

    Nebenbei gesagt, Das Formular dient ja keinem anderen Zweck, als die Daten in die Tabelle an die richtigen Stellen zu übertragen. Es sollen nur mögliche Fehleinträge vermieden werden. Du kannst also ruhig von Hand in die Tabelle schreiben, wenn du genau weißt, was zu tun ist. Wenn du den Code dabei beobachtest, verstehst du auch die Bedeutung der Befehle.

    Wenn du dabei herausfindest, welche Art von Objekt Check20000 ist, kommen wir der Antwort einen Schritt näher. Sachlich geht es ja um die Frage, ob es sich um eine 20000kV-Leitung handelt (wohl eher 20 kV?).

    Versuch auch mal folgendes:
    Kommentiere den If-Befehl aus. Ersetze also

    If chb20000kv.Value = True Then
    Application.ActiveSheet.Check20000 = 1
    Else
    Application.ActiveSheet.Check20000 = 0
    End If

    durch

    'If chb20000kv.Value = True Then
    'Application.ActiveSheet.Check20000 = 1
    'Else
    'Application.ActiveSheet.Check20000 = 0
    'End If

    Vermutlich kommt die Fehlermeldung im nächsten If-Befehl.
    Dann wissen wir, dass es nicht nur ein fehlendes Objekt ist, sondern ein grundsätzlicher Fehler vorliegt.

    Und schreib uns mal, wodurch das Formular geöffnet wird. Öffnet es sich sofort beim Öffnen der Datei oder klickst du auf eine Schaltfläche?
     
  16. Urs2

    Urs2 Megabyte

    @Hascheff (HF?)
    Richtig, er hat den Form-Code publiziert.

    Mein Punkt 11 zeigt den Form-Code, Punkt 9 müsste den Modul-Code zeigen.

    Meines Wissens kann man aber das Form nicht direkt aus der Tabelle öffnen (?), nur über ein Modul, das das Form öffnet und möglicherweise auch weiteren Code und die Deklarationen enthält.

    Es könnte schon sein, das während dem Abarbeiten plötzlich ein anderes Sheet das ActiveSheet wird. Es wird ja nirgends eines klar bezeichnet.
    Auch Deinen Versuch mit dem Ausblenden sollte er machen, das grenzt aus/ein.

    Warten wir mal was er sagt. Bleib dabei, ich bin nur ein kleiner Fachmann.

    Gruss Urs
     
  17. Urs2

    Urs2 Megabyte

    @doctore > Hascheff hatte mich auf eine Idee gebracht:

    Es geht hier offenbar um Hoch- und Mittelspannungen, wobei es 20000kV natürlich nicht gibt. Nach dem Vorschlag von Hascheff, versuch einmal >

    In Excel, im Eingabeformular, setz mal den Haken bei den 20000. Kommt dann der Fehler eine Zeile höher, bei Check20000 = 1 ?

    Wenn er trotzdem bei Check20000 = 0 erscheint, dann >

    Im VB-Editor, bei meinem Punkt 10, click einmal auf dieses 20000-Kästchen. Jetzt musst Du im Fenster "Eigenschaften" zuoberst dessen Name sehen. Ist es chb20000kv? Der Name muss auf alle Fälle gleich sein wie der im Code.

    Gruss Urs
     
  18. Hascheff

    Hascheff Moderator

    Ich denke ja, sonst wäre die Fehlermeldung gleich in der Bedingungszeile. (Das prüf ich jetzt nicht.)
    Richtig, da hab ich mich verguckt.
    Ich denke, da hast du recht, aber bevor wir weiter spekulieren, warten wir erst mal ab, was der TO auf meine Frage aus #15 antwortet:
     
  19. Urs2

    Urs2 Megabyte

    @Hascheff
    Eben nicht! > Tipp irgend einen Mist ein:

    If chbRegierungGut = True Then
    wunderbar = "Ja"
    Else
    wunderbar = "Nein"
    End If

    Ob die Bedingung nun falsch geschrieben oder die Box gar nicht vorhanden ist, die Antwort wird immer "Nein" sein. Die nicht vorhandene Box wird einfach als Variable akzeptiert, die leider leer ist...

    In VB2005 frisst der Compiler nur Variable, die vorher deklariert und dimensioniert wurden. Oft ist das lästig beim Schreiben, aber es vermeidet Schreib- und Datentypfehler.

    Hier in VBA wird alles ohne Gemecker kompiliert und später auch ausgeführt - auch wenn das Resultat dann sinnlos ist. Eine Kontrolle der Schreibfehler gibt es so nicht.

    Bei einem grossen Code habe ich mir angewöhnt, alles in Gross/Kleinbuchstaben zu deklarieren und dann im Code nur in Kleinbuchstaben zu schreiben. Nach der Zeilenschaltung werden dann die Grossbuchstaben gewandelt, wenn nicht > dann ist es falsch geschrieben...

    Gruss Urs
     
  20. Hascheff

    Hascheff Moderator

    Stimmt, in VBA muss im Modulkopf "Option Explicit" eingetragen sein. Warum steht das dort nicht, beim Erzeugen einer neuen Form wird der Eintrag standardmäßig gebildet.

    Also TO: Steht dieser Eintrag über dem Formularcode, den du in #13 kopiert hast? Wenn nicht, dann schreib das mal hin und teste. Dann kommt eine andere Fehlermeldung: "Fehler beim Kompilieren: Variable nicht definiert" und nach ok ist die Zeile mit If gelb.
    Dann musst du Urs2' Ratschlag aus #17 befolgen.
    @ Urs2: Wir werden vom TO sicher erst Montag wieder hören, schönen Sonntag noch.
     
Thread Status:
Not open for further replies.

Share This Page