Can a select case statement being used in a loop?

I try to use a select case statement in a loop, but I am faced everytime with the error “Type mismatch error. Expected String, but got Boolean, select case select case SearchItem”

A field in my database contains 2 values in a field separated by a space “ “

so I want to split this field with cell()=split(field.stringvalue,” “) to have a cell(0) and cell(1) with a value.

Then I want to check if the value thru in a big select case statement (which work without embedded in a loop)

So I did first time:
i=0 to ubound(cell)

select case cell(i)

case "item-1”
.
.etc
end select
next

but, I do get the above mentioned error, while cell(i) contains a string

Same happened when I try:
do
..
loop

or

Do while j <= ubound(cell)
..
loop

Somebody any idea what I do wrong?

Share a sample showing the issue

for i=0 to ubound(AllergenenTotal)
  
  cell1()=split(AllergenenTotal(i),",")
  cell()=split(cell1(1)," ")
  
  if ubound(cell)>0 then
    SearchAllergeen = cell(0)
  end if
  
  j=0
  do
    if j<=ubound(cell) then
      SearchAllergeen=cell(j)
    else
      exit do
    end if
    
    select case SearchAllergeen
      
    case "ei"
      AllergeenPics.add ei
      AllergenenPicsTxt.Add cell(j)
      
    Case "lupine"
      AllergeenPics.add lupine
      AllergenenPicsTxt.Add cell(j)
      
    case instr(cell(1),"melk")>0
      AllergeenPics.add melk
      AllergenenPicsTxt.Add cell(j)
      
    case "gluten"
      AllergeenPics.add gluten
      AllergenenPicsTxt.Add cell(j)
      
    case "gluten"
      AllergeenPics.add gluten
      AllergenenPicsTxt.Add cell(j)
      
      
    case "mosterd"
      AllergeenPics.add mosterd
      AllergenenPicsTxt.Add cell(j)
      
    case "noten"
      AllergeenPics.add noten
      AllergenenPicsTxt.Add cell(j)
      
    case "pinda"
      AllergeenPics.add pindas
      AllergenenPicsTxt.Add cell(j)
      
    case "schaaldieren"
      
      if instr(cell(1),"weekdieren")>0 then
        AllergeenPics.add weekdieren
        AllergenenPicsTxt.Add cell(j)
      elseif instr(cell(j),"vis")>0 then
        AllergeenPics.add vis
        AllergenenPicsTxt.Add cell(j)
      else
        AllergeenPics.add schaaldieren
        AllergenenPicsTxt.Add cell(j)
      end if
      
    case "selderij"
      AllergeenPics.add selderij
      AllergenenPicsTxt.Add cell(j)
      
    case "sesamzaad"
      AllergeenPics.add sesamzaad
      AllergenenPicsTxt.Add cell(j)
      
    case "soja"
      AllergeenPics.add soja
      AllergenenPicsTxt.Add cell(j)
      
    case "sulfiet"
      AllergeenPics.add sulfiet
      AllergenenPicsTxt.Add cell(j)
      
    case "vis"
      AllergeenPics.add vis
      AllergenenPicsTxt.Add cell(j)
      
    case "weekdieren"
      if instr(cell(j),"schaaldieren")>0 then
        AllergeenPics.add schaaldieren
        AllergenenPicsTxt.Add cell(j)
      elseif instr(cell(j),"vis")>0 then
        AllergeenPics.add vis
        AllergenenPicsTxt.Add cell(j)
      else
        AllergeenPics.add weekdieren
        AllergenenPicsTxt.Add cell(j)
      end if
      
    Case "fruit"
      AllergeenPics.add allfruit
      AllergenenPicsTxt.Add cell(j)
      
    end select
    j=j+1
  loop
  
next

What is cell ?

A dimentioned string in which I store splitted values:

var cell() as string

String does contain: “item1 item2”

cell()=split(string,” “)

cell(0) does carry item1
cell(1) does carry item2

ubound(cell) will give 1, which are 2 items, “0” and “1”

Your test code is incomplete. Complete it and resubmit it.

This, for example, works:

Var str As String = "asdfad,dfghdg,etwert,lkjljlkj"
Var cells() As String = str.Split(",")

For i As Integer = cells.FirstIndex to cells.LastIndex
  
  Select Case cells(i)
    
  Case "dfghdg"
    System.DebugLog "dfghdg"
    
  Case "asdfasdasdfasdfa"
    System.DebugLog "000000000000"
    
  End
  
Next

System.DebugLog "Ended ok"

App.DoEvents // Print and Quit
Quit

Here lie your problem:

This is not related to Select nor While loop…

1 Like
var i,j as integer
var cell(), cell1(),SearchAllergeen as string

dim allergtext() as string = AllergenenPicsTxt()

for i=0 to 14
  MyPics = none
  Myallergeen(i).Refresh
next

AllergeenPics.RemoveAll
AllergenenPicsTxt.RemoveAll


for i=0 to ubound(AllergenenTotal)
  
  cell1()=split(AllergenenTotal(i),",")
  cell()=split(cell1(1)," ")
  
  if ubound(cell)>0 then
    SearchAllergeen = cell(0)
  end if
  
  j=0
  do
    if j<=ubound(cell) then
      SearchAllergeen=cell(j)
    else
      exit do
    end if
    
    select case SearchAllergeen
      
    case "ei"
      AllergeenPics.add ei
      AllergenenPicsTxt.Add cell(j)
      
    Case "lupine"
      AllergeenPics.add lupine
      AllergenenPicsTxt.Add cell(j)
      
    case instr(cell(1),"melk")>0
      AllergeenPics.add melk
      AllergenenPicsTxt.Add cell(j)
      
    case "gluten"
      AllergeenPics.add gluten
      AllergenenPicsTxt.Add cell(j)
      
    case "gluten"
      AllergeenPics.add gluten
      AllergenenPicsTxt.Add cell(j)
      
      
    case "mosterd"
      AllergeenPics.add mosterd
      AllergenenPicsTxt.Add cell(j)
      
    case "noten"
      AllergeenPics.add noten
      AllergenenPicsTxt.Add cell(j)
      
    case "pinda"
      AllergeenPics.add pindas
      AllergenenPicsTxt.Add cell(j)
      
    case "schaaldieren"
      
      if instr(cell(1),"weekdieren")>0 then
        AllergeenPics.add weekdieren
        AllergenenPicsTxt.Add cell(j)
      elseif instr(cell(j),"vis")>0 then
        AllergeenPics.add vis
        AllergenenPicsTxt.Add cell(j)
      else
        AllergeenPics.add schaaldieren
        AllergenenPicsTxt.Add cell(j)
      end if
      
    case "selderij"
      AllergeenPics.add selderij
      AllergenenPicsTxt.Add cell(j)
      
    case "sesamzaad"
      AllergeenPics.add sesamzaad
      AllergenenPicsTxt.Add cell(j)
      
    case "soja"
      AllergeenPics.add soja
      AllergenenPicsTxt.Add cell(j)
      
    case "sulfiet"
      AllergeenPics.add sulfiet
      AllergenenPicsTxt.Add cell(j)
      
    case "vis"
      AllergeenPics.add vis
      AllergenenPicsTxt.Add cell(j)
      
    case "weekdieren"
      if instr(cell(j),"schaaldieren")>0 then
        AllergeenPics.add schaaldieren
        AllergenenPicsTxt.Add cell(j)
      elseif instr(cell(j),"vis")>0 then
        AllergeenPics.add vis
        AllergenenPicsTxt.Add cell(j)
      else
        AllergeenPics.add weekdieren
        AllergenenPicsTxt.Add cell(j)
      end if
      
    Case "fruit"
      AllergeenPics.add allfruit
      AllergenenPicsTxt.Add cell(j)
      
    end select
    j=j+1
  loop
  
next
'next

I=ubound(Allergeenpics)
j=ubound(AllergenenPicsTxt)

for i=0 to ubound(AllergeenPics)-1
  mypics1 = allergeenpics(i)
  MyAllergeen(i).Refresh
next

for j=I+1 to 14
  mypics1 = none
  Myallergeen(j).Refresh
next

The complete code of this method. MyAllergeen() is an array of small canvas

please use the </> button rather than the quote button when pasting code.

You can’t have a variable called “string”.

string as variable was just an example in the text. See the code.

Actually… this is your problem. When you do a select case on a variable that is a string, the values after each “case” statement must all evaluate to a string. Now… you can do what you want, but it’s a little more work.

You could do

Select Case True

And then make each one of the case statements into a comparison…

Case SearchAllergeen = “EI”

case instr(cell(1),"melk")>0

Then everything works.

2 Likes

I found the problem, did call it wrongly. Thank @Rick_Araujo for the insight

1 Like