Hallo, ich habe folgende Funktion, das Ergebnis dieser Funktion möcht ich in so einem Drop Down Menü (ComboBox) ausgeben, nur wie bring ich den Inhalt da hinen, ich versteh die Funktion nicht ganz. Die Funktion fragt ab welche seriellen Schnittstellen verfügbar sind! Hier der Code: Public Function CommPortsAvail(ByRef MSComm As MSComm, _ Optional ByVal FreePortsOnly As Boolean _ ) As Variant Dim lPorts() As Integer Dim lPort As Integer Dim l As Integer On Error Resume Next With MSComm For lPort = 1 To 16 .CommPort = lPort .PortOpen = True If (Err.Number <> comPortInvalid) Then If Not (FreePortsOnly And _ Err.Number = comPortAlreadyOpen) Then ReDim Preserve lPorts(l) lPorts(i) = lPort l = l + 1 End If End If If (.PortOpen) Then .PortOpen = False End If Err.Clear Next End With CommPortsAvail = lPorts() End Function
Die Funktion liefert dir ein Array in dem die Nummern der verfügbaren Com Ports drinnen stehen. Wenn also in dem Array die Nummern 1, 3 und 7 drinnen sind, dann sind die Com Ports COM1, COM3 und COM7 verfügbar.
Hallo, danke für die Antwort, und welches Array ist das (Name)? mfg Christoph
hi, das Integerarray lPorts() wird beim Durchlaufen der Ports dynamisch erweitert und beinhaltet dann die Nummern der verfügbaren Schnittstellen. Der Rückgabewert dieser Function ist dann das Integerarray. ich würde es so machen: Dim ports() As Integer Dim cnt As Integer ports() = CommPortsAvail(Mscomm1, True) For cnt = 1 To UBound(ports()) Combo1.AddItem CStr(ports(cnt)) Next cnt cu thomas
Christoph wrote: > Hallo, > > danke für die Antwort, und welches Array ist das (Name)? Bist du sicher, dass du VB kennst? lports Aber du wirst doch die Auswertung in die Combobox hoffentlich nicht in dieser Funktion machen. Die Funktion liefert das Array als Ergebnis zurück. Du brauchst nur eine entsprechende Variable dafür um dort das Ergebnis aufzufangen und gut ists.
Hallo, nein ich hab das im Form_Load in die ComboBox geladen so wie es thomas beschrieben hat, allerdings erhalte ich in der ComboBox nur einen 0er! Irgendwas stimmt da glaub ich nicht! mfg Christoph
Christoph wrote: > Hallo, > > nein ich hab das im Form_Load in die ComboBox geladen so wie es thomas > beschrieben hat, allerdings erhalte ich in der ComboBox nur einen 0er! > > Irgendwas stimmt da glaub ich nicht! Dann nimm dir den Debugger in VB und steppe mal die Funktion durch, bzw. den Code der das Array auswertet. Ist in VB nun wirklich keine grosse Hexerei.
Hallo, wenn man sich gut auskennt ist es sicher kein Problem aber ich kenn mich nit so gut aus! mfg Christoph
ok, 2 Fehler: If Not (FreePortsOnly And _ Err.Number = comPortAlreadyOpen) Then ReDim Preserve lPorts(l) ' das ist falsch lPorts(i) = lPort ' so richtig lPorts(l) = lPort l = l + 1 End If und hier so: For cnt = 0 To UBound(ports()) Combo1.AddItem CStr(ports(cnt)) Next cnt sollte jetzt gehen also insgesamt so: Option Explicit Private Sub Form_Load() Dim ports() As Integer Dim cnt As Integer ports() = CommPortsAvail(MSComm1, True) For cnt = 0 To UBound(ports()) Combo.AddItem CStr(ports(cnt)) Next cnt End Sub Public Function CommPortsAvail(ByRef MSComm As MSComm, _ Optional ByVal FreePortsOnly As Boolean _ ) As Variant Dim lPorts() As Integer Dim lPort As Integer Dim l As Integer On Error Resume Next With MSComm1 For lPort = 1 To 16 .CommPort = lPort .PortOpen = True If (Err.Number <> comPortInvalid) Then If Not (FreePortsOnly And _ Err.Number = comPortAlreadyOpen) Then ReDim Preserve lPorts(l) lPorts(l) = lPort l = l + 1 End If End If If (.PortOpen) Then .PortOpen = False End If Err.Clear Next End With CommPortsAvail = lPorts() End Function
Könnte mir vielleicht wer helfen was ich da falsch mache? mfg Christoph
Wie weit funktioniert's den bis jetzt? Setz doch mal Haltepunkte beim Funktionseinsprung und dann per Einzelschrittmodus mal prüfen, was richtig läuft und was noch nicht.
@ Thomas Danke!! Es funktioniert jetzt! mfg Christoph
Christoph wrote: > Hallo, > > wenn man sich gut auskennt ist es sicher kein Problem aber ich kenn mich > nit so gut aus! mit F9 setzt man einen Haltepunkt mit F8 macht man einen Einzelschritt mit F5 lässt man sein Programm laufen Variablen anschauen kann man, wenn das Programm im Debugger steht (also zb nach einem Haltepunkt) indem man mit der Maus auf den Variablennamen zeigt. Findet sich alles im Debug Menü wieder. Und die Funktion funktioniert nun wirklich sehr einfach. Sie probiert einfach alle Com Ports von 1 bis 16 durch und versucht sie zu öffnen. Wenn das gelingt, dann kommt die betreffende Zahl ins Array, wenn nicht, dann wird mit der nächsten Zahl weitergemacht.
kleiner tip: du solltest in vb immer "Option Explicit" verwenden. wenn du das nicht tust, dann braust du auch keine Variablen zu declarieren. bei einem Schreibfehler wie bei deinem Code (l <> i ) wird einfach die Variable i neu declariert und schon hast du einen fehler und man sucht sich dumm und dähmlich cu
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.