I'm not entirely clear about what basic1 and bas refer to, so it's hard to say. It seems like basic1 is a control, but I don't know what kind, so I can't tell what type value is. As it is, it looks like you're passing a property of a control called basic1, so I don't think the entire control is being passed either ByRef or ByVal.
One problem might be that bas is not defined as a specific type. Thus, VB will default to any named thing being contained in a Variant. For anything beyond the simplest program, that alone can drive you nuts. The history or Variants goes way back, but let's just say someone thought they would make programming easy, like a scripting language. Unfortunately, there are so many problems with Variants, that as of VB7, they no longer exist. Yup, they've been erradicated.
I recommend you put the line "Option Explicit" at the very top of every code file, and also check Tools>>Options>>Editor>>"Require Variable Declaration". Then VB will automatically add that line to all your new files. This makes VB act more like a C++ compiler (actually, it is for VB5/6), and automatically check types during compilation. This will make your life so much simpler in the long run.
Now, back to those calls. Let's assume for a moment, that basic1 is a checkbox. You can rewrite your function like this:
Function doValues(ByRef chkBox As CheckBox)
'code in here
chkBox.Value = 1 'whatever
End Function
The important thing is that the compiler knows chkBox is a CheckBox control, so it won't accept your accidentally passing an Integer or something; you have to pass a CheckBox. You'll have to call it like this:
Call doValues(form_preview.basic1)
If I'm interpreting your post right, then this should work. If not, let me know more details, so I can pin it down.
Cheers