Olá, pessoal eu sou nova por aqui, mas já procurei bastante se o que eu estou perguntando já foi respondido por outros e não achei.
Bem, estou tentando fazer um cálculo de método multicritério promethee I para todas as funções de preferência. Ao fazer a da função de critério usual, o vba está me falando "erro de compilação '13':tipos incompatíveis" logo no primeiro If. Esses valores utilizados nos If são indicados antes através de ComboBox em que eu coloquei a lista de opções. Os que são do mesmo critério (ex:ritmo ou tempo ou qualidade...) tem os mesmo valores. Logo, eu não sei como posso resolver isso. Se alguém puder me ajudar ficaria muito feliz.
Obrigada, Gabriela
ps: abaixo está o código que montei
'Macro para Função Preferência ser Critério Usual e ser 2 projetos
Sub MacroCriterioUsualpara2projetos()
'Valores das funções para cada critério
'Projeto 1 em relação ao Projeto 2
If ((UserForm1.caraccusto1) - (UserForm1.caraccusto2)) > 0 Then
UserForm2.fcusto1H2 = 1
Else: UserForm2.fcusto1H2 = 0
End If
If ((UserForm1.caracritmo1) - (UserForm1.caracritmo2)) > 0 Then
UserForm2.fritmo1H2 = 1
Else: UserForm2.fritmo1H2 = 0
End If
If ((UserForm1.caracqualidade1) - (UserForm1.caracqualidade2)) > 0 Then
UserForm2.fqualidade1H2 = 1
Else: UserForm2.fqualidade1H2 = 0
End If
If ((UserForm1.caractempo1) - (UserForm1.caractempo2)) > 0 Then
UserForm2.ftempo1H2 = 1
Else: UserForm2.ftempo1H2 = 0
End If
If ((UserForm1.caracrecursos1) - (UserForm1.caracrecursos2)) > 0 Then
UserForm2.frecursos1H2 = 1
Else: UserForm2.frecursos1H2 = 0
End If
If ((UserForm1.caracfinanceira1) - (UserForm1.caracfinanceira2)) > 0 Then
UserForm2.ffinanceira1H2 = 1
Else: UserForm2.ffinanceira1H2 = 0
End If
'Projeto 2 em relação ao projeto 2
If ((UserForm1.caraccusto2) - (UserForm1.caraccusto1)) > 0 Then
UserForm2.fcusto2H1 = 1
Else: UserForm2.fcusto2H1 = 0
End If
If ((UserForm1.caracritmo2) - (UserForm1.caracritmo1)) > 0 Then
UserForm2.fritmo2H1 = 1
Else: UserForm2.fritmo2H1 = 0
End If
If ((UserForm1.caracqualidade2) - (UserForm1.caracqualidade1)) > 0 Then
UserForm2.fqualidade2H1 = 1
Else: UserForm2.fqualidade2H1 = 0
End If
If ((UserForm1.caractempo2) - (UserForm1.caractempo1)) > 0 Then
UserForm2.ftempo2H1 = 1
Else: UserForm2.ftempo2H1 = 0
End If
If ((UserForm1.caracrecursos2) - (UserForm1.caracrecursos1)) > 0 Then
UserForm2.frecursos2H1 = 1
Else: UserForm2.frecursos2H1 = 0
End If
If ((UserForm1.caracfinanceira2) - (UserForm1.caracfinanceira1)) > 0 Then
UserForm2.ffinanceira2H1 = 1
Else: UserForm2.ffinanceira2H1 = 0
End If
'Graus de Sobreclassificação
'Grau de Sobreclassificação para 1
UserForm2.pi1H2 = (UserForm1.pcustonor * UserForm2.fcusto1H2) + (UserForm1.ptemponor * UserForm2.ftempo1H2) + (UserForm1.pqualidadenor * UserForm2.fqualidade1H2) + (UserForm1.pritmonor * UserForm2.fritmo1H2) + CDec(UserForm1.precursosnor * UserForm2.frecursos1H2) + (UserForm1.pfinanceiranor * UserForm2.ffinanceira1H2)
'Grau de Sobreclassificação para 2
UserForm2.pi2H1 = (UserForm1.pcustonor * UserForm2.fcusto2H1) + (UserForm1.ptemponor * UserForm2.ftempo2H1) + (UserForm1.pqualidadenor * UserForm2.fqualidade2H1) + (UserForm1.pritmonor * UserForm2.fritmo2H1) + CDec(UserForm1.precursosnor * UserForm2.frecursos2H1) + (UserForm1.pfinanceiranor * UserForm2.ffinanceira2H1)
'Fluxos Positivos de saída
'Do Projeto 1
UserForm2.flupos1 = UserForm2.pi1H2
'Do Projeto 2
UserForm2.flupos2 = UserForm2.pi2H1
'Fluxos Negativos de entrada
'Do Projeto 1
UserForm2.fluneg1 = UserForm2.pi2H1
'Do Projeto 2
UserForm2.fluneg2 = UserForm2.pi1H2
'Comparações para saber se há preferência, indiferença ou incomparabilidade
If (UserForm2.flupos1 > UserForm2.flupos2 And UserForm2.fluneg1 <= UserForm2.fluneg2) Or (UserForm2.flupos1 = UserForm2.flupos2 And UserForm2.fluneg1 < UserForm2.fluneg2) Then
UserForm1.MultiPage1.Pages.Item(3).Enabled = True
UserForm1.MultiPage1.Value = 3
UserForm1.MultiPage1.Pages.Item(2).Enabled = False
UserForm1.ListBox1.AddItem "Projeto 1 é preferível ao Projeto 2"
UserForm1.ListBox2.AddItem "Projeto 1 é preferível ao Projeto 2"
End If
If (UserForm2.flupos1 = UserForm2.flupos2 And UserForm2.fluneg1 = UserForm2.fluneg2) Then
UserForm1.MultiPage1.Pages.Item(3).Enabled = True
UserForm1.MultiPage1.Value = 3
UserForm1.MultiPage1.Pages.Item(2).Enabled = False
UserForm1.ListBox1.AddItem "Projeto 1 é indiferente ao Projeto 2"
UserForm1.ListBox2.AddItem "Projeto 1 é indiferente ao Projeto 2"
End If
If (UserForm2.flupos1 > UserForm2.flupos2 And UserForm2.fluneg2 < UserForm2.fluneg1) Or (UserForm2.flupos2 > UserForm2.flupos1 And UserForm2.fluneg1 < UserForm2.fluneg2) Then
UserForm1.MultiPage1.Pages.Item(3).Enabled = True
UserForm1.MultiPage1.Value = 3
UserForm1.MultiPage1.Pages.Item(2).Enabled = False
UserForm1.ListBox1.AddItem "Projeto 1 é incomparável ao Projeto 2"
UserForm1.ListBox2.AddItem "Projeto 1 é incomparável ao Projeto 2"
End If
End Sub
Bem, estou tentando fazer um cálculo de método multicritério promethee I para todas as funções de preferência. Ao fazer a da função de critério usual, o vba está me falando "erro de compilação '13':tipos incompatíveis" logo no primeiro If. Esses valores utilizados nos If são indicados antes através de ComboBox em que eu coloquei a lista de opções. Os que são do mesmo critério (ex:ritmo ou tempo ou qualidade...) tem os mesmo valores. Logo, eu não sei como posso resolver isso. Se alguém puder me ajudar ficaria muito feliz.
Obrigada, Gabriela
ps: abaixo está o código que montei
'Macro para Função Preferência ser Critério Usual e ser 2 projetos
Sub MacroCriterioUsualpara2projetos()
'Valores das funções para cada critério
'Projeto 1 em relação ao Projeto 2
If ((UserForm1.caraccusto1) - (UserForm1.caraccusto2)) > 0 Then
UserForm2.fcusto1H2 = 1
Else: UserForm2.fcusto1H2 = 0
End If
If ((UserForm1.caracritmo1) - (UserForm1.caracritmo2)) > 0 Then
UserForm2.fritmo1H2 = 1
Else: UserForm2.fritmo1H2 = 0
End If
If ((UserForm1.caracqualidade1) - (UserForm1.caracqualidade2)) > 0 Then
UserForm2.fqualidade1H2 = 1
Else: UserForm2.fqualidade1H2 = 0
End If
If ((UserForm1.caractempo1) - (UserForm1.caractempo2)) > 0 Then
UserForm2.ftempo1H2 = 1
Else: UserForm2.ftempo1H2 = 0
End If
If ((UserForm1.caracrecursos1) - (UserForm1.caracrecursos2)) > 0 Then
UserForm2.frecursos1H2 = 1
Else: UserForm2.frecursos1H2 = 0
End If
If ((UserForm1.caracfinanceira1) - (UserForm1.caracfinanceira2)) > 0 Then
UserForm2.ffinanceira1H2 = 1
Else: UserForm2.ffinanceira1H2 = 0
End If
'Projeto 2 em relação ao projeto 2
If ((UserForm1.caraccusto2) - (UserForm1.caraccusto1)) > 0 Then
UserForm2.fcusto2H1 = 1
Else: UserForm2.fcusto2H1 = 0
End If
If ((UserForm1.caracritmo2) - (UserForm1.caracritmo1)) > 0 Then
UserForm2.fritmo2H1 = 1
Else: UserForm2.fritmo2H1 = 0
End If
If ((UserForm1.caracqualidade2) - (UserForm1.caracqualidade1)) > 0 Then
UserForm2.fqualidade2H1 = 1
Else: UserForm2.fqualidade2H1 = 0
End If
If ((UserForm1.caractempo2) - (UserForm1.caractempo1)) > 0 Then
UserForm2.ftempo2H1 = 1
Else: UserForm2.ftempo2H1 = 0
End If
If ((UserForm1.caracrecursos2) - (UserForm1.caracrecursos1)) > 0 Then
UserForm2.frecursos2H1 = 1
Else: UserForm2.frecursos2H1 = 0
End If
If ((UserForm1.caracfinanceira2) - (UserForm1.caracfinanceira1)) > 0 Then
UserForm2.ffinanceira2H1 = 1
Else: UserForm2.ffinanceira2H1 = 0
End If
'Graus de Sobreclassificação
'Grau de Sobreclassificação para 1
UserForm2.pi1H2 = (UserForm1.pcustonor * UserForm2.fcusto1H2) + (UserForm1.ptemponor * UserForm2.ftempo1H2) + (UserForm1.pqualidadenor * UserForm2.fqualidade1H2) + (UserForm1.pritmonor * UserForm2.fritmo1H2) + CDec(UserForm1.precursosnor * UserForm2.frecursos1H2) + (UserForm1.pfinanceiranor * UserForm2.ffinanceira1H2)
'Grau de Sobreclassificação para 2
UserForm2.pi2H1 = (UserForm1.pcustonor * UserForm2.fcusto2H1) + (UserForm1.ptemponor * UserForm2.ftempo2H1) + (UserForm1.pqualidadenor * UserForm2.fqualidade2H1) + (UserForm1.pritmonor * UserForm2.fritmo2H1) + CDec(UserForm1.precursosnor * UserForm2.frecursos2H1) + (UserForm1.pfinanceiranor * UserForm2.ffinanceira2H1)
'Fluxos Positivos de saída
'Do Projeto 1
UserForm2.flupos1 = UserForm2.pi1H2
'Do Projeto 2
UserForm2.flupos2 = UserForm2.pi2H1
'Fluxos Negativos de entrada
'Do Projeto 1
UserForm2.fluneg1 = UserForm2.pi2H1
'Do Projeto 2
UserForm2.fluneg2 = UserForm2.pi1H2
'Comparações para saber se há preferência, indiferença ou incomparabilidade
If (UserForm2.flupos1 > UserForm2.flupos2 And UserForm2.fluneg1 <= UserForm2.fluneg2) Or (UserForm2.flupos1 = UserForm2.flupos2 And UserForm2.fluneg1 < UserForm2.fluneg2) Then
UserForm1.MultiPage1.Pages.Item(3).Enabled = True
UserForm1.MultiPage1.Value = 3
UserForm1.MultiPage1.Pages.Item(2).Enabled = False
UserForm1.ListBox1.AddItem "Projeto 1 é preferível ao Projeto 2"
UserForm1.ListBox2.AddItem "Projeto 1 é preferível ao Projeto 2"
End If
If (UserForm2.flupos1 = UserForm2.flupos2 And UserForm2.fluneg1 = UserForm2.fluneg2) Then
UserForm1.MultiPage1.Pages.Item(3).Enabled = True
UserForm1.MultiPage1.Value = 3
UserForm1.MultiPage1.Pages.Item(2).Enabled = False
UserForm1.ListBox1.AddItem "Projeto 1 é indiferente ao Projeto 2"
UserForm1.ListBox2.AddItem "Projeto 1 é indiferente ao Projeto 2"
End If
If (UserForm2.flupos1 > UserForm2.flupos2 And UserForm2.fluneg2 < UserForm2.fluneg1) Or (UserForm2.flupos2 > UserForm2.flupos1 And UserForm2.fluneg1 < UserForm2.fluneg2) Then
UserForm1.MultiPage1.Pages.Item(3).Enabled = True
UserForm1.MultiPage1.Value = 3
UserForm1.MultiPage1.Pages.Item(2).Enabled = False
UserForm1.ListBox1.AddItem "Projeto 1 é incomparável ao Projeto 2"
UserForm1.ListBox2.AddItem "Projeto 1 é incomparável ao Projeto 2"
End If
End Sub