Mehrere Variablem prüfen

  • VB6

Es gibt 21 Antworten in diesem Thema. Der letzte Beitrag () ist von AaronR.

    Mehrere Variablem prüfen

    Hallo Leute

    Gleich am Anfang, ich nutze VB 6.0. Ich denke, dass ich aber in meinem fall in den neueren versionen nicht viel geändert hat. Mein problem ist:
    Ich habe drei Variablen (bsp: Var1, Var2, Var3) und möchte diese ALLE in einer if...then schaltung prüfen. Ich habe es getestet, mit komma zu trennen, also so ca:
    If Var1=0, Var2=0, Var3=1 then ...
    Das hat aber nicht funktioniert. Kann man verstehen, was mein problem ist? Ich möchte, dass wenn ddiese Variablen zusammen dieses "muster" betragen dass dann etwas passiert. Eine einzelne Variable abzufragen ist kein Problem. Mir geht es aber darum, ob es iwie möglich ist, mehrere Variablen in einem Schritt zu prüfen.
    Danke schon mal im Vorraus auf alle Antworten. Und falls ihr es nicht in VB 6.0 sondern in einer neueren Version wisst, freue ich mich trozdem, das kann ich dann ja testen :D

    Aaron

    AaronR schrieb:

    mehrere Variablen in einem Schritt zu prüfen
    geht so:

    VB.NET-Quellcode

    1. If a AndAlso b AndAlso c Then ' dann, wenn alle drei True sind
    2. Endif

    VB.NET-Quellcode

    1. If Not a AndAlso Not b AndAlso Not c Then ' dann, wenn alle drei False sind
    2. Endif

    VB.NET-Quellcode

    1. If a OrElse b OrElse c Then ' dann, wenn eine von dreien True ist
    2. Endif

    VB.NET-Quellcode

    1. If Not a OrElse Not b OrElse Not c Then ' dann, wenn eine von dreien False ist
    2. Endif
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Vielen Dank! Jetzt habe ich aber noch ein anderes problem. Wenn ich das Programm starte, kommt die Meldung "Else ohne If".

    Public Sub Timer1_Timer()
    Dim dat As Integer
    Dim i As Integer

    dat = ModUSB.RdPort1()
    EinByte = ModUSB.binär(dat)

    If eingang(1) = True Then Command1_Eing1 = 1
    ElseIf eingang(2) = True Then Command1_Eing2 = 1
    End If
    End Sub


    Das mit dem Eing1 sind Variablen, die ich erstellt habe. Ich habe auch ein Modul hinzugefügt, welches ich für das Interface benötige. Wisst ihr, was ich ändern muss, damit diese Meldung nicht mehr kommt?

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „AaronR“ ()

    du könntest soweit ich weiß auch gleich

    Visual Basic-Quellcode

    1. If eingang(1) = True Then
    2. Command1_Eing1 = 1
    3. Else
    4. Command1_Eing2 = 1
    5. End if

    schreiben. So wie du oben schreibst muss zum schluss ja immer ein noch ein else kommen.

    EDIT: sry hab mich verlesen :S habs mal korrigiert
    Wer fragt, ist ein Narr für eine Minute. Wer nicht fragt, ist ein Narr sein Leben lang.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Snaptu“ ()

    Ich sehe gerade, dass ich mich hier oben vertippt habe. Weist du, was jetzt falsch ist? Ich möchte nämlich, dass die Variablen oben immer den wert haben, die der Eingang hat. Deshalb habe ich das geändert :D ( in der zweiten Reiche das Command1_Eing1 in Command1_Eing2). Außerdem habe ich 4 eingänge, wobei ich das dann ja beliebig erweitern könnte.
    Dann würd ich mich eher mit Select....Case auseinandersetzen.

    So wie du es jetzt hats müsste die Abfrage mit einem Else aufhören soweit ich das kenne, also so:

    Visual Basic-Quellcode

    1. If eingang(1) = True Then
    2. Command1_Eing1 = 1
    3. ElseIf eingang(2) = True Then
    4. Command1_Eing2 = 1
    5. ElseIf eingang(3) = True Then
    6. Command1_Eing3 = 1
    7. Else
    8. Command1_Eing4 = 1
    9. End If


    bin in VB6 nicht so fit, ich würd sowieso wie oben geschrieben Select...Case verwenden.
    Wer fragt, ist ein Narr für eine Minute. Wer nicht fragt, ist ein Narr sein Leben lang.
    Select...Case würde dann so aussehen:

    Visual Basic-Quellcode

    1. Dim Eingang as Integer = 2
    2. Select Case Eingang
    3. Case 1
    4. Command1_Eing1 = 1
    5. Case 2
    6. Command1_Eing2 = 1
    7. Case Else
    8. Command1_Eing3 = 1
    9. End Select
    Wer fragt, ist ein Narr für eine Minute. Wer nicht fragt, ist ein Narr sein Leben lang.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Snaptu“ ()

    Also es funktioniert immer noch nicht so recht. Mein lehrer hat uns ein Blatt mitgegeben, wo drauf steht, wie man einen timer abfragt. Den timer habe ich richtig aktiviert, und alles richtig abgeschrieben. Ich habe jetzt eewig gegooglet, rumprobiert, leute angerufen. Könnt ihr vllt bitte mal drüber schauen wo da der fehler liegt? Immer noch die gleiche Fehlermeldung "Else ohne If"

    Private Sub Timer1_Timer()
    Dim Dat As Integer

    'Eingangsbyte lesen
    Dat=ModUSB.RdPort1()
    EinByte=ModUSB.binär(Dat)

    If eingang(1)=True Then Call vw
    ElseIf eingang(2)=True Then Call rw
    ...
    End If
    End Sub

    (Das ... habe ich nicht abgetippt, so steht es auf dem blatt, dass man es so weiter führen kann)
    Das wars. Ich habe es umgeschrieben, das variablen geändert werden, aber selbst, wenn ich es genau so eintippe, die anderen Programme (vw und rw) erstellt habe, kommt immer noch diese Meldung. Ich bin am verzweifeln. Kann mir bitte jemand helfen?
    Danke
    mal abgesehen davon das ich den Lehrer fragen würde ob er nicht ins Jahr 2015 wechseln möchte und wieso er euch VB6 anstelle .NET Aufgaben mitgibt.

    Bei mir geht das eigentlich wunderbar:

    VB.NET-Quellcode

    1. Dim s As String = Console.ReadLine()
    2. If s = "Hallo" Then
    3. Console.WriteLine("Hallo Hugo")
    4. ElseIf s = "Wie gehts?" Then
    5. Console.WriteLine("Danke mir geht es gut")
    6. End If
    7. Console.ReadLine()


    mal abgesehen davon, wo kommt den er Eingang() her? bzw. wieso bedankst du dich für Select Case und nutzt es dann nicht? oder darfst du es nicht nutzen?
    Ich würd halt mal auch nach dem then ein "Enter" reinmachen.
    Wer fragt, ist ein Narr für eine Minute. Wer nicht fragt, ist ein Narr sein Leben lang.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Snaptu“ ()

    Soo Leute, habe das Programm jetzt fertig geschrieben...Ich schicke euch hier mal, wie ich es jetzt gemacht habe :D

    Visual Basic-Quellcode

    1. Public Sub Command1_Click()
    2. AllesAus 'Displaytest
    3. warte 0.1
    4. ausgang 1, 1
    5. warte 0.1
    6. ausgang 2, 1
    7. warte 0.1
    8. ausgang 3, 1
    9. warte 0.1
    10. ausgang 4, 1
    11. warte 0.1
    12. ausgang 5, 1
    13. warte 0.1
    14. ausgang 6, 1
    15. warte 0.1
    16. ausgang 7, 1
    17. warte 0.1
    18. ausgang 8, 1
    19. warte 0.5
    20. AllesAus
    21. warte 0.1
    22. Call WR
    23. End Sub
    24. Public Sub WR()
    25. summe = 0 'Alle Variablen auf 0
    26. Eing1 = 0
    27. Eing2 = 0
    28. Eing3 = 0
    29. Eing4 = 0
    30. y = 0
    31. If eingang(1) = True Then Eing1 = 1 'Wenn Eingang=True wird der Variable ein bestimmter Wert zugewiesen
    32. If eingang(2) = True Then Eing2 = 2
    33. If eingang(4) = True Then Eing3 = 4
    34. summe = Eing1 + Eing2 + Eing3 'Variablen werden zusammengezählt
    35. If summe = 0 Then Call N 'Je dem Ergebnis wird eine Bestimmt WR aufgerufen
    36. If summe = 1 Then Call NO
    37. If summe = 2 Then Call O
    38. If summe = 3 Then Call SO
    39. If summe = 4 Then Call S
    40. If summe = 5 Then Call SW
    41. If summe = 6 Then Call W
    42. If summe = 7 Then Call NW
    43. End Sub
    44. Public Sub NO() 'Anzeige f. Windrichtungen
    45. If eingang(4) = True Then Zeita = Zeita + Second(Now)
    46. If eingang(4) = True Then Zeitb = Zeitb + Second(Now)
    47. ausgang 1, 0
    48. ausgang 2, 0
    49. ausgang 3, 1
    50. ausgang 4, 0
    51. ausgang 5, 1
    52. ausgang 6, 0
    53. ausgang 7, 1
    54. warte 0.5
    55. If eingang(4) = True Then Zeita = Zeita + Second(Now)
    56. If eingang(4) = True Then Zeitb = Zeitb + Second(Now)
    57. ausgang 1, 0
    58. ausgang 2, 0
    59. ausgang 3, 1
    60. ausgang 4, 1
    61. ausgang 5, 1
    62. ausgang 6, 0
    63. ausgang 7, 1
    64. warte 0.5
    65. If eingang(4) = True Then Zeita = Zeita + Second(Now)
    66. If eingang(4) = True Then Zeitb = Zeitb + Second(Now)
    67. ausgang 1, 0
    68. ausgang 2, 0
    69. ausgang 3, 0
    70. ausgang 4, 0
    71. ausgang 5, 0
    72. ausgang 6, 0
    73. ausgang 7, 0
    74. warte 0.5
    75. If eingang(4) = True Then Zeita = Zeita + Second(Now)
    76. If eingang(4) = True Then Zeitb = Zeitb + Second(Now)
    77. Call WR
    78. End Sub
    79. Public Sub O()
    80. If eingang(4) = True Then Zeita = Zeita + Second(Now)
    81. If eingang(4) = True Then Zeitb = Zeitb + Second(Now)
    82. ausgang 1, 0
    83. ausgang 2, 0
    84. ausgang 3, 1
    85. ausgang 4, 1
    86. ausgang 5, 1
    87. ausgang 6, 0
    88. ausgang 7, 1
    89. warte 1
    90. If eingang(4) = True Then Zeita = Zeita + Second(Now)
    91. If eingang(4) = True Then Zeitb = Zeitb + Second(Now)
    92. ausgang 1, 0
    93. ausgang 2, 0
    94. ausgang 3, 0
    95. ausgang 4, 0
    96. ausgang 5, 0
    97. ausgang 6, 0
    98. ausgang 7, 0
    99. warte 0.5
    100. If eingang(4) = True Then Zeita = Zeita + Second(Now)
    101. If eingang(4) = True Then Zeitb = Zeitb + Second(Now)
    102. Call WR 'Es wird zurück nach oben gesprungen
    103. End Sub
    104. Public Sub SO()
    105. If eingang(4) = True Then Zeita = Zeita + Second(Now)
    106. If eingang(4) = True Then Zeitb = Zeitb + Second(Now)
    107. ausgang 1, 1
    108. ausgang 2, 0
    109. ausgang 3, 1
    110. ausgang 4, 1
    111. ausgang 5, 0
    112. ausgang 6, 1
    113. ausgang 7, 1
    114. warte 0.5
    115. If eingang(4) = True Then Zeita = Zeita + Second(Now)
    116. If eingang(4) = True Then Zeitb = Zeitb + Second(Now)
    117. ausgang 1, 0
    118. ausgang 2, 0
    119. ausgang 3, 1
    120. ausgang 4, 1
    121. ausgang 5, 1
    122. ausgang 6, 0
    123. ausgang 7, 1
    124. warte 0.5
    125. If eingang(4) = True Then Zeita = Zeita + Second(Now)
    126. If eingang(4) = True Then Zeitb = Zeitb + Second(Now)
    127. ausgang 1, 0
    128. ausgang 2, 0
    129. ausgang 3, 0
    130. ausgang 4, 0
    131. ausgang 5, 0
    132. ausgang 6, 0
    133. ausgang 7, 0
    134. warte 0.5
    135. If eingang(4) = True Then Zeita = Zeita + Second(Now)
    136. If eingang(4) = True Then Zeitb = Zeitb + Second(Now)
    137. Call WR
    138. End Sub
    139. Public Sub S()
    140. If eingang(4) = True Then Zeita = Zeita + Second(Now)
    141. If eingang(4) = True Then Zeitb = Zeitb + Second(Now)
    142. ausgang 1, 1
    143. ausgang 2, 0
    144. ausgang 3, 1
    145. ausgang 4, 1
    146. ausgang 5, 0
    147. ausgang 6, 1
    148. ausgang 7, 1
    149. warte 1
    150. If eingang(4) = True Then Zeita = Zeita + Second(Now)
    151. If eingang(4) = True Then Zeitb = Zeitb + Second(Now)
    152. ausgang 1, 0
    153. ausgang 2, 0
    154. ausgang 3, 0
    155. ausgang 4, 0
    156. ausgang 5, 0
    157. ausgang 6, 0
    158. ausgang 7, 0
    159. warte 0.5
    160. If eingang(4) = True Then Zeita = Zeita + Second(Now)
    161. If eingang(4) = True Then Zeitb = Zeitb + Second(Now)
    162. Call WR
    163. End Sub
    164. Public Sub SW()
    165. If eingang(4) = True Then Zeita = Zeita + Second(Now)
    166. If eingang(4) = True Then Zeitb = Zeitb + Second(Now)
    167. ausgang 1, 1
    168. ausgang 2, 0
    169. ausgang 3, 1
    170. ausgang 4, 1
    171. ausgang 5, 0
    172. ausgang 6, 1
    173. ausgang 7, 1
    174. warte 0.5
    175. If eingang(4) = True Then Zeita = Zeita + Second(Now)
    176. If eingang(4) = True Then Zeitb = Zeitb + Second(Now)
    177. ausgang 1, 0
    178. ausgang 2, 0
    179. ausgang 3, 1
    180. ausgang 4, 1
    181. ausgang 5, 1
    182. ausgang 6, 0
    183. ausgang 7, 0
    184. warte 0.5
    185. If eingang(4) = True Then Zeita = Zeita + Second(Now)
    186. If eingang(4) = True Then Zeitb = Zeitb + Second(Now)
    187. ausgang 1, 0
    188. ausgang 2, 0
    189. ausgang 3, 0
    190. ausgang 4, 0
    191. ausgang 5, 0
    192. ausgang 6, 0
    193. ausgang 7, 0
    194. warte 0.5
    195. If eingang(4) = True Then Zeita = Zeita + Second(Now)
    196. If eingang(4) = True Then Zeitb = Zeitb + Second(Now)
    197. Call WR
    198. End Sub
    199. Public Sub W()
    200. If eingang(4) = True Then Zeita = Zeita + Second(Now)
    201. If eingang(4) = True Then Zeitb = Zeitb + Second(Now)
    202. ausgang 1, 0
    203. ausgang 2, 0
    204. ausgang 3, 1
    205. ausgang 4, 1
    206. ausgang 5, 1
    207. ausgang 6, 0
    208. ausgang 7, 0
    209. warte 1
    210. If eingang(4) = True Then Zeita = Zeita + Second(Now)
    211. If eingang(4) = True Then Zeitb = Zeitb + Second(Now)
    212. ausgang 1, 0
    213. ausgang 2, 0
    214. ausgang 3, 0
    215. ausgang 4, 0
    216. ausgang 5, 0
    217. ausgang 6, 0
    218. ausgang 7, 0
    219. warte 0.5
    220. If eingang(4) = True Then Zeita = Zeita + Second(Now)
    221. If eingang(4) = True Then Zeitb = Zeitb + Second(Now)
    222. Call WR
    223. End Sub
    224. Public Sub NW()
    225. If eingang(4) = True Then Zeita = Zeita + Second(Now)
    226. If eingang(4) = True Then Zeitb = Zeitb + Second(Now)
    227. ausgang 1, 0
    228. ausgang 2, 0
    229. ausgang 3, 1
    230. ausgang 4, 0
    231. ausgang 5, 1
    232. ausgang 6, 0
    233. ausgang 7, 1
    234. warte 0.5
    235. If eingang(4) = True Then Zeita = Zeita + Second(Now)
    236. If eingang(4) = True Then Zeitb = Zeitb + Second(Now)
    237. ausgang 1, 0
    238. ausgang 2, 0
    239. ausgang 3, 1
    240. ausgang 4, 1
    241. ausgang 5, 1
    242. ausgang 6, 0
    243. ausgang 7, 0
    244. warte 0.5
    245. If eingang(4) = True Then Zeita = Zeita + Second(Now)
    246. If eingang(4) = True Then Zeitb = Zeitb + Second(Now)
    247. ausgang 1, 0
    248. ausgang 2, 0
    249. ausgang 3, 0
    250. ausgang 4, 0
    251. ausgang 5, 0
    252. ausgang 6, 0
    253. ausgang 7, 0
    254. warte 0.5
    255. If eingang(4) = True Then Zeita = Zeita + Second(Now)
    256. If eingang(4) = True Then Zeitb = Zeitb + Second(Now)
    257. Call WR
    258. End Sub
    259. Public Sub N()
    260. If eingang(4) = True Then Zeita = Zeita + Second(Now)
    261. If eingang(4) = True Then Zeitb = Zeitb + Second(Now)
    262. ausgang 1, 0
    263. ausgang 2, 0
    264. ausgang 3, 1
    265. ausgang 4, 0
    266. ausgang 5, 1
    267. ausgang 6, 0
    268. ausgang 7, 1
    269. warte 1
    270. ausgang 1, 0
    271. ausgang 2, 0
    272. ausgang 3, 0
    273. ausgang 4, 0
    274. ausgang 5, 0
    275. ausgang 6, 0
    276. ausgang 7, 0
    277. warte 0.5
    278. Call WR
    279. End Sub
    280. Private Sub Command2_Click() 'Hier wird das Programm beendet
    281. AllesAus
    282. warte 1
    283. End
    284. End Sub
    285. Private Sub Form_Load()
    286. auto = False
    287. AllesAus
    288. Timer1.Interval = 100
    289. End Sub
    290. Private Sub Timer1_Timer()
    291. Dim dat As Integer
    292. Dim i As Integer
    293. dat = ModUSB.RdPort1()
    294. EinByte = ModUSB.binär(dat)
    295. If eingang(1) = True Then Eing1 = 1
    296. If eingang(2) = True Then Eing2 = 1
    297. If eingang(3) = True Then Eing3 = 1
    298. If eingang(4) = True Then Eing4 = 1
    299. End Sub



    Das "If eingang(4) = True Then Zeita = Zeita + Second(Now)" sollte zur bestimmung der Windgeschwindigkeit sein, ich habe das Programm als ich fast fertig war wieder umgeschrieben, weil mir einer der vier Eingänge am Interface kaputt gegangen ist und ich schon drei für die Windrichtung gebraucht habe. Das habe ich dann einfach drinnen gelassen :D

    Vielen Dank nochmal an alle, die mir geholfen haben, auch ernn ich es jetzt etwas anderst gemacht habe, als ich es am Anfang wollte :D

    LG Aaron
    Abgesehen davon das du dir alle = true Prüfungen einfach sparen kannst weil du schon nach true fragst indem du if eingang(1) schreibst
    ist der jetzige Code sicherlich für dich als Anfänger am verständlichsten weil du jede Situation einzeln abfragst. In der Praxis und mit dem nötigen Wissen
    wird der Code wahrscheinlich mind. um die Hälfte kürzer sein.
    Wer fragt, ist ein Narr für eine Minute. Wer nicht fragt, ist ein Narr sein Leben lang.