1. When you are using comboboxes to select a value, NEVER use LIKE as the relational operator. LIKE is only used for searching for partial strings. With a combo, you are usually getting an ID or a full string value. When you use LIKE you almost always force the database engine to do a full table scan so instead of allowing it to use an index which it can search efficently, you make it look at each record individually. If your table is small, nothing you do matters but if you have a lot of data your query will eventually slow down.
2. To make the criteria optional, use the following method and pay special attention to how the parentheses are placed.
Where (fld1 = [Forms]![frmSearch]![txtfld1] OR [Forms]![frmSearch]![txtfld1] Is Null)
AND (fld2 = [Forms]![frmSearch]![txtfld1] OR [Forms]![frmSearch]![txtfld2] Is Null)
AND (fld3 = [Forms]![frmSearch]![txtfld1] OR [Forms]![frmSearch]![txtfld3] Is Null)
Since the expression contains both AND and OR operators, YOU must use parentheses to tell Access how to evaluate the expression just as you would if you were writing a mathematical expression that included both add/subtract and multiply/divide operations.
Just as a + b * c which evaluates as a + (b* c) is different from (a + b) * c