PDA

View Full Version : [SOLVED:] error after change const to intger



talhv4
08-18-2015, 01:46 AM
hey, need your help with my project plz.

my project begins with
Const NUM_MOLECULES As Byte = 10 'start of main sub need to be Insert Number of Monomers in userform2
Const LIMIT_HIGH = 10 need to be Insert Matrix Size in userform 2
Const LIMIT_LOW = 1
Const NUM_CYCLES As Integer = 200

but i need NUM_MOLECULES and LIMIT_HIGH to be Variables that the user input in userform 2 but every time I change it appears to me as error
plz. help.

Paul_Hossler
08-19-2015, 09:32 AM
I haven't tried to follow your code, but I think you need to change to ...




'changed
Public NUM_MOLECULES As Byte
Public LIMIT_HIGH As Long
Public LIMIT_LOW As Long
Public NUM_CYCLES As Integer





... and in the correct places, set the initial values, get the update them from the user form, and then use the values as needed

talhv4
08-20-2015, 01:16 AM
hey tnx.
but did not work for me.
the line "Dim molecules(1 To 2, 1 To NUM_MOLECULES) As molecule "
has to have const and i dont know with what to Replace it
if anyone have an idea its Welcome
I have until tonight to submit this job please help

snb
08-20-2015, 03:55 AM
use:


Dim molecules(1 To 2, 1 To 10)

SamT
08-20-2015, 06:11 AM
Sub Example()
Dim x
x = 3
Dim y As Variant 'Variant required
ReDim y(1 To 2, 1 To x)

Dim Z As Molecule
For i = 1 To x
Z.Size = 1
Z.Color = red
Z.Matched = True
y(2, i) = Z
Next i

End Sub

mikerickson
08-20-2015, 06:45 AM
hey tnx.
but did not work for me.
the line "Dim molecules(1 To 2, 1 To NUM_MOLECULES) As molecule "
has to have const and i dont know with what to Replace it
if anyone have an idea its Welcome
I have until tonight to submit this job please help

If NUM_MOLECULES is a variable you can code that like


Dim molecules() As molecule
'...
ReDim molecules(1 to 2, 1 to NUM_MOLECULES)

Paul_Hossler
08-20-2015, 07:07 AM
I haven't tried to follow your code, ...


I'm SURE that there's a lot more changes that will be required to initialize the settings, display on the userform, take the userform responses, update variables and use the updated settings

jonh
08-20-2015, 07:37 AM
Not sure which textbox maps to which variable.

change the button click


Private Sub CommandButton1_Click() 'excecute
Dim w, h

w = Me.Controls("width")
h = Me.Controls("height")
If Not (IsNumeric(w) And IsNumeric(h)) Then
MsgBox "height or width is not valid", vbExclamation + vbOKOnly
Exit Sub
End If
NUM_MOLECULES = w
LIMIT_HIGH = h

Unload Me
Finala
End Sub

and change these in the module.


Dim dblMyCount As Double
Public NUM_MOLECULES As Byte
Public LIMIT_HIGH As Byte
Public LIMIT_LOW As Byte
Dim molecules() As molecule

Sub Finala() 'main sub

LIMIT_LOW = 1

If NUM_MOLECULES = 0 Or LIMIT_HIGH = 0 Then
MsgBox "Limits out of bounds", vbExclamation + vbOKOnly
Exit Sub
End If

running = Not running '?????????????????????????????????????????
If Not running Then Exit Sub
Dim i As Integer
resetall
Do Until AllMatched Or NoMatches
Update
If Not running Then Exit Sub
Application.Wait Now() + TimeValue("00:00:01")
DoEvents
If dblMyCount = ((NUM_MOLECULES / 100) * 80) Then Exit Sub
Loop
Cells(8, 12) = "no more matches"
running = False
End Sub


Sub Update()
Dim i As Integer, j As Integer, m As Byte
For i = LBound(molecules, 1) To UBound(molecules, 1)
For j = LBound(molecules, 2) To UBound(molecules, 2)
If Not molecules(i, j).matched Then
m = 1
Select Case True
Case cycle = 0
'initialise
molecules(i, j).val = Application.WorksheetFunction.RandBetween(LIMIT_LOW, LIMIT_HIGH)
molecules(i, j).mvdir = CBool(Application.WorksheetFunction.RandBetween(0, 1))

Case Not molecules(i, j).mvdir And molecules(i, j).val > LIMIT_LOW
'moving down
molecules(i, j).val = molecules(i, j).val + -m

Case molecules(i, j).mvdir And molecules(i, j).val < LIMIT_HIGH
'moving up
molecules(i, j).val = molecules(i, j).val + m

Case Not molecules(i, j).mvdir And molecules(i, j).val <= LIMIT_LOW
'hit low, start moving up
molecules(i, j).val = LIMIT_LOW + m
molecules(i, j).mvdir = Not molecules(i, j).mvdir

Case molecules(i, j).mvdir And molecules(i, j).val >= LIMIT_HIGH
'hit high, start moving down
molecules(i, j).val = LIMIT_HIGH + -m
molecules(i, j).mvdir = Not molecules(i, j).mvdir

End Select

Cells(i + 1, j).Formula = molecules(i, j).val
End If
Next
DoEvents
Next

SetCell2

If cycle Then Cells(8, 12) = "cycle: " & cycle Else Cells(8, 12) = "initialising..."
Cells(8 + cycle, 3).Value = cycle ' chart cycle

Dim rngMyRange As Range, rngMyCell As Range
Set rngMyRange = Range("A2:j2") 'Range to count cells coloured with vbBlue.
dblMyCount = 0
For Each rngMyCell In rngMyRange
If rngMyCell.Interior.color = vbBlue Then dblMyCount = dblMyCount + 1
Next
Set rngMyRange = Nothing

Cells(8 + cycle, 4).Value = NUM_MOLECULES - dblMyCount
Cells(8 + cycle, 5).Value = (LIMIT_HIGH * LIMIT_HIGH) / (Cells(8 + cycle, 4).Value)
cycle = cycle + 1
End Sub


Sub resetall()
Range("A2:j3").Interior.Pattern = xlNone
dblMyCount = 0
NoMatchCount = 0
ReDim molecules(1 To 2, 1 To NUM_MOLECULES)
Clear
Square_Cell
Table
cycle = 0
Dim i As Integer
For i = 1 To NUM_MOLECULES
Cells(1, i).Value = i
Next
End Sub

talhv4
08-20-2015, 08:21 AM
Thank you all my software is working now.
Really saved my life.