| |
Visual-Basic EinsteigerListview - Fehlermeldung TYP | | | Autor: crosstravel | Datum: 12.08.19 10:36 |
| Hallo,
ich habe in einer Form eine Listview1 - und die bereitet mir das nachstehende Probleme. Dich erhalte die Fehlermeldung "Benutzerdefinierter Typ nicht definiert" auf dem nachstehenden Befehl:
Dim litem As ListItem
With ListView1
.... Kann mir vielleicht jemand sagen, wo hier die Ursache liegen kann?
Danke
Rainer | |
Re: Listview - Fehlermeldung TYP | | | Autor: EKrause | Datum: 12.08.19 10:50 |
| Moin
Wo und wie hast Du [Code]ListItem[/Code] definiert?
DAS scheint der Ausdruck zu sein, den Dein Code nicht mag | |
Re: Listview - Fehlermeldung TYP | | | Autor: crosstravel | Datum: 12.08.19 11:43 |
| ListItem habe ich nirgende^s definiert. Ich habe eine ListView1 auf der Form platziert und im Form_Load die folgenden Angaben:
Private Sub Form_Load()
File1.Pattern = "*.txt"
File2.Pattern = "*.lst"
Dim litem As ListItem
With ListView1
.View = lvwReport
.ColumnHeaders.Add , , "Druckername"
.ColumnHeaders.Item(1).Width = 5000
.ColumnHeaders.Add , , "Port" Ich habe keine Erfahrung mit ListViews.
Danke
Rainer | |
Re: Listview - Fehlermeldung TYP | | | Autor: EKrause | Datum: 12.08.19 14:47 |
| Ja gut, bleibt die Frage, wozu Du
[Code]Dim litem As ListItem[/Code]
benötigst
Wenn Du eine Variable oder was auch immer durch "As" mit etwas belegen willst, muss dieses etwas auch da sein, i. d. R. ist es ein Objekt, entweder eines, was die Entwicklungsumgebung bzw. Namespace vorhält oder welches Du selber im entsprechenden Bereich deklariert hast.
Bei Deinem Code sagt spätestens der Compiler sinngemäß "kenne ich nicht" , wenn im Editor der Bereich nicht bereits markiert ist.
Beitrag wurde zuletzt am 12.08.19 um 14:48:16 editiert. | |
Re: Listview - Fehlermeldung TYP | | | Autor: crosstravel | Datum: 12.08.19 17:36 |
| Da schicke ich Dir zur Veranschaulichung den vollständigen Code. Ich fülle in die Listview die im System verfügbaren Drucker zur Auswahl. Den Code habe ich irgendwo aus dem Internet kopiert; wie bereits gesagt, ich habe sonst keine Erfahrung in der Anwendung von Listviews. Hier habe ich lediglich anstelle "lItem" den Namen "myItem" verwendet.
Gruss
Rainer
Private Sub Form_Load()
File1.Pattern = "*.txt"
File2.Pattern = "*.lst"
Dim myItem As ListItem
With ListView1
.View = lvwReport
.ColumnHeaders.Add , , "Druckername"
.ColumnHeaders.Item(1).Width = 5000
.ColumnHeaders.Add , , "Port"
' ------------------------------ Standarddrucker
Label3.Caption = Printer.Port
SelDrucker = Printer.DeviceName
PrinterPort = Printer.Port
Set myItem = ListView1.ListItems.Add(, Printer.DeviceName, _
Printer.DeviceName)
myItem.SubItems(1) = Printer.Port
For Each p In Printers
If p.DeviceName <> Printer.DeviceName Then
Set myItem = ListView1.ListItems.Add(, p.DeviceName, _
p.DeviceName)
myItem.SubItems(1) = p.Port
End If
Next p
End With | |
Re: Listview - Fehlermeldung TYP | | | Autor: EKrause | Datum: 13.08.19 15:41 |
| Aha, allmählich wird ein Schuh daraus
Ich habe für meine aktuelle Aufgabe (unter VB.NET) auch recherchieren müssen (nicht VB6/VBA-Neuling, wohl aber in VB.NET, fast eine eigene Welt), und eine Erfahrung habe ich machen müssen...dazu muss man wissen, dass ich JEDEN Code, den ich für meine Herausforderung interessant finden könnte, auch eigenen, vorher checke und teste.
Eine Erfahrung habe ich bei Beispielen aus dem Internet machen müssen: Offenbar sind in den seltensten Fällen Codebeispiele vor dem Einbringen als solche auch wirklich getestet worden...was bin ich schon auf merkwürdige (das ist sehr moderat ausgedrückt) Dinge gestoßen.
Also, die von Dir genannte Fehlermeldung ist doch mit Sicherheit dieser Ausdruck:
[Code]As ListItem[/Code]
Bevor ich aber mehr dazu schreibe, ersetze doch die Zeile [Code]Dim myItem As ListItem[/Code] mal durch [Code]Dim myItem As [B]New ListViewItem[/B][/Code]
Es würde mich nicht wundern, wenn zumindest die Fehlermeldung, die Du genannt hast, nicht mehr auftauchen würde. | |
Re: Listview - Fehlermeldung TYP | | | Autor: crosstravel | Datum: 13.08.19 19:29 |
| Danke für den Hinweis. Ich habe es eben versucht - jedoch mit einem negativen Erfolg. Auch
Dim myItem As New ListItem funktioniert nicht. Irgendwo liegt der Hase im Pfeffer.
Ich werde noch eine Weile im Web stöbern - vielleicht finde ich da einen Hinweis.
Schönen Abend und nochmals vielen Dank
Rainer | |
Re: Listview - Fehlermeldung TYP | | | Autor: EKrause | Datum: 13.08.19 20:14 |
| crosstravel schrieb:
Zitat: | | (..)
Dim myItem As New ListItem(..) | |
Ich schrieb ja auch
Dim myItem As New ListViewItem "ListItem" wird überall als "kein Member von" angemeckert, mit "ListViewItem" fülle ich erfolgreich meine ListView mit Inhalten
Mit welcher Entwicklungsumgebung arbeitest Du? Wenn Sie meiner (zitlich) ähnlich ist, packe ich den Code hier Morgen rein, der beinhaltet dann allerdinngs auch die Erstellung der ListView zur Laufzeit. | |
Re: Listview - Fehlermeldung TYP | | | Autor: crosstravel | Datum: 13.08.19 20:28 |
| Ja, ich hatte ja auch "Dim As New ListViewItem" getestet. Hier erhielt ich eben auch beim Compile die Fehlermeldung "User-defined Type mot defined".
Ich arbeite mit VB6 SP6 unter Windows 10. Eingebunden habe ich die Komponente MS Windows Common Control 6.0 (MSCOMCTL.OCX) und eine Reference auf MS ActiveX Data Objects 6.1 Library (msado15.dll).
Danke, schönen Abend
Rainer | |
Re: Listview - Fehlermeldung TYP | | | Autor: EKrause | Datum: 13.08.19 23:14 |
| Ok, ich habe mal ein wenig "experimentiert"; "experimentiert" deswegen, weil ich das Ganze mangels VB6-Umgebung in VBA unter MS Access 2010 versucht habe: Der Dim lautet nun einfach
Dim myItem Mehr brauchte es nicht, das hat offenbar funktioniert (ich musste nur die Befehle für die in meinem provisorischen Formular fehlenden Label auskommentieren), das ListView hat bei mir die enthaltenen Drucker mitsamt IP (ich betreibe auch einen netzwerkfähigen Drucker) bzw. Ports ausgegeben...mal gucken | |
Re: Listview - Fehlermeldung TYP | | | Autor: crosstravel | Datum: 13.08.19 23:29 |
| Das werde ich morgen gleich probieren. Ich vermute aber, dass VB.Net nicht gleich wie VB6 reagiert. Ich bin gespannt. | |
Re: Listview - Fehlermeldung TYP | | | Autor: crosstravel | Datum: 14.08.19 06:19 |
| Guten Morgen,
alles schläft noch - aber ich musste Deinen Vorschlag unbedingt testen. Es funktioniert! Ich bin sehr froh darüber - vielen Dank für Deine Hilfe. Nun muss ich nur noch versuchen herauszubekommen, warum VB so reagiert - ich kann es noch nicht nachvollziehen.
Hab einen tollen Tag und herzliche Grüsse
Rainer | |
Re: Listview - Fehlermeldung TYP | | | Autor: EKrause | Datum: 14.08.19 07:35 |
| crosstravel schrieb:
Zitat: | | (..)Nun muss ich nur noch
versuchen herauszubekommen, warum VB so reagiert - ich kann
es noch nicht nachvollziehen.
Hab einen tollen Tag und herzliche Grüsse
Rainer | |
Freut mich, dass das hingehauen hat
Und lass es einfach, es gibt Unterschiede zwischen VBA und VB und natürlich zwischen den verschiedenen VB-Versionen bis hin zu VB.NET...die nimmt man dann hin, man muss halt wissen, wo man sich bewegt; ich bin zwar Programmierer und lege auch Wert darauf, das "warum" zu ergründen, aber zwischen verschiedenen Sprachversionen führt das zu nichts. | |
Re: Listview - Fehlermeldung TYP | | | Autor: crosstravel | Datum: 14.08.19 07:42 |
| Du hast recht - ich ruhe mich auf deinen Lorbeeren aus 😊 ein Versuch, das unterschiedliche Verhalten zu ergründen führt wohl nur zu weiteren Fragen.
Herzlichen Grzss
Rainer | |
Re: Listview - Fehlermeldung TYP | | | Autor: EKrause | Datum: 14.08.19 20:03 |
| effeff schrieb:
Zitat: | | Schalte bitte in Deiner Entwicklungsumgebung "Option
Explicit" ein...
Und wenn Du einen entsprechenden Verweis auf "Microsoft
Windows Common Controls xxx" setzt, sollte der Typ
"ListItem" auch funktionieren... | |
Hast Du Deine Vorschläge auch getestet? Ich habe beides mal nachvollzogen...also, es versucht, es klappt nicht.
Setzt man Option Explicit, werden z. B. einige Variablen als nicht definiert angezeigt, trotz des Verweises, der m. E. auch crosstravel gesetzt haben müsste.
Meine Rede, wenn es um nicht getestete Vorschläge geht, sorry.
Zitat: | | BTW: Variablen nicht mit einem Typen zu versehen und damit
unnötig als "Variant" oder "Object" zu
setzen, ist nicht elegant... | |
Kann ja sein, dass "Dim" ohne Zuweisung "nicht elegant" sein mögen, aber es klappt, und darauf kommt es doch an, nicht wahr?
Beitrag wurde zuletzt am 14.08.19 um 20:03:57 editiert. | |
Re: Listview - Fehlermeldung TYP | | | Autor: crosstravel | Datum: 15.08.19 05:55 |
| Ich möchte nochmals festhalten, dass ich mit der "nicht eleganten" Lösung momentan zufrieden bin. Wichtig ist, dass ich das Programm dem Kunden ausliefern kann - und der fragt nicht, ob es auch elegant gelöst wurde. Das bedeutet aber nicht, dass ich noch nach einer besseren Lösung, allerdings ohne Zeitdruck, suchen werde.
Übrigens habe ich "Option Explicit" in allen Programmen eingeschaltet. Auch war der Verweis auf die "Microsoft Windows Common Controls xxx" vorhanden. Das hatte ich in einem der Postings dieser Serie erwähnt.
--------------------------------------------------------------------------------------------------
Ich arbeite mit VB6 SP6 unter Windows 10. Eingebunden habe ich die Komponente MS Windows Common Control 6.0 (MSCOMCTL.OCX) und eine Reference auf MS ActiveX Data Objects 6.1 Library (msado15.dll).
---------------------------------------------------------------------------------------------------
Einen schönen Tag
Rainer | |
Re: Listview - Fehlermeldung TYP | | | Autor: EKrause | Datum: 15.08.19 09:59 |
| Jepp, da müssen halt auch die unterschiedlichen Entwicklungsumgebungen berücksichtigt werden, vor allem bei Beispielen.
Ich kann da nur wiederholen, dass bei den Recherchen zu meinem aktuellen VB.NET-Projekt (im Web, vor allem dem eigenen, nach toten Links suchen) mehr als 90% aller Beispiele ganz offensichtlich nicht ausgetestet waren, oft nicht einmal auf Syntax geprüft schienen.
Ich unterstelle natürlich allen Beteiligten, dass sie helfen/unterstützen wollen, jedoch wenn da steht "versuch mal dies oder jenes" ohne "bei mir funktionierts, hab's getestet", werde ich schon skeptisch
Hier in diesem Forum habe ich übrigens tatsächlich für einige kleine Herausforderungen gute Lösungsansätze/Lösungen gefunden, das mal nebenbei
Deshalb hatte ich auch unterstrichen, dass ich mein Beispiel unter VBA/MS Access "versucht" und erfolgreich getestet hatte.
Meine alte VB6-Umgebung habe ich seinerzeit unter Windows XP SP3 betrieben, ich glaube aber nicht, dass ich die nochmal hier auf meiner Win10-Maschine einsetze, überhaupt nochmal etwas mit VB6 mache, für sehr viele Dinge empfinde ich VB.NET mittlerweile einfach als flexibler.
Mit VBA unter MS Access wäre das für mich noch etwas anderes, damit habe ich die umfangreichsten Erfahrungen | |
Re: Listview - Fehlermeldung TYP | | | Autor: EKrause | Datum: 15.08.19 16:36 |
| effeff schrieb:
Zitat: | |
Wenn Du davon ausgehst, dass Dein Programmcode verständlich
und lesbar sein soll und auch andere Programmierer diesen
editieren müssen, solltest Du mit Option Explicit arbeiten.
(..) | |
Wenn überhaupt, mag das bestenfalls ein Indiz sein.
Kein noch so "elegant" gestalteter Code vermag sorgfältige Inline-Dokumentation, sprich Kommentarzeilen zu ersetzen.
Wenn ich Programm-Code schreibe, auch für den eigenen Bedarf, dann ist IMMER aussagekräftige Kommentierung vorhanden, auch meinen eigenen Code möchte ich nicht wieder "nachforschen" müssen, wenn ich den aus irgendwelchen Gründen längere Zeit nicht angefasst habe.
Und wenn sich, wie Du ganz korrekt schreibst, aus irgendwelchen Gründen, die nächsten Entwickler mit dem Programm befassen müssen, hilft denen kein noch so (syntaktisch und fachlich) sauberer und eleganter Code, wenn der nicht ausreichend kommentiert ist.
Zitat: | |
Zudem legst Du mit der Deklaration die
Speichernutzung für die Variable fest und es ist nicht
erforderlich, immer als Variant sinnlos Speicher zu
verschwenden.(..) | |
Das mag schlüssig sein, spielt aber nur dann eine Rolle, wenn die gesamte Applikation exorbitant speicherintensiv wäre oder aber die Hardware-Umgebung nicht mehr ganz so modern ist und Speicher noch "Mangelware" wäre.
Vollkommen zutreffend wären Deine Angaben für Entwicklung auf dem Großrechner, wo alleine CPU-Zeit immer noch sauteuer ist, mit anderen Worten: Weniger Speicher-Nutzung = weniger CPU-Zeit. In IBM-Host-Umgebung hat man gar darauf zu achten, dass Deklarationen von Variablen strikt in der Reihenfolge der späteren Nutzung zur Laufzeit zu erfolgen haben; ich habe durchaus in Umfeldern gearbeitet, wo das, was ich hier dem Fragesteller crosstravel vorgeschlagen habe, nicht die QS passiert hätte.
Macht man so etwas jedoch hier (wie z. B. Hinweise auf Option Explicit, Option Strict usw.), ohne das wirklich hinreichend zu erklären, läuft man eher Gefahr, die Mitposter zu irritieren.
Beitrag wurde zuletzt am 15.08.19 um 16:39:30 editiert. | |
Re: Listview - Fehlermeldung TYP | | | Autor: EKrause | Datum: 18.08.19 21:44 |
| Dieter schrieb:
Zitat: | |
Dim myItem As MSComctlLib.ListItem | |
Not bad, not bad, klappt auch, zumindest in VBA/MS Access 2010, hab's gerade mal ausprobiert | |
| Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
|
|
Neu! sevCoolbar 3.0
Professionelle Toolbars im modernen Design!
Mit sevCoolbar erstellen Sie in wenigen Minuten ansprechende und moderne Toolbars und passen diese optimal an das Layout Ihrer Anwendung an (inkl. große Symbolbibliothek) - für VB und MS-Access Weitere InfosTipp des Monats Access-Tools Vol.1
Über 400 MByte Inhalt
Mehr als 250 Access-Beispiele, 25 Add-Ins und ActiveX-Komponenten, 16 VB-Projekt inkl. Source, mehr als 320 Tipps & Tricks für Access und VB
Nur 24,95 EURWeitere Infos
|