como eu tenho o problema de misturar um monte de ideias na cabeça e sempre ter mais ideias para as coisas, eu tinha dado um tempo pq acaba atrapalhando
hoje eu peguei novamente e fiz algo mais simples que me atenda
no caso salva os valores dos objetos listados em uma das células de uma range
deixei separado para ficar mais fácil o entendimento
tenho que fazer mais uns ajustes mas está funcionando
para gravar
essa macro tem que ficar em um modulo para trabalhar com qualquer formulario
Sub Grava_valor_objetos( _
ByRef Objeto_Formulario As Object, _
ByRef Matriz_nomes_objetos, _
ByVal SLot_posicao As Long)
Dim Dr As String, D As String, ForNm As String
ragSLT = "C49:P55"'range dos slot
sep = "|"
SlotST = Range(ragSLT).Value2
Lt = UBound(SlotST, 1)
cT = UBound(SlotST, 2)
With Objeto_Formulario
nmform = .Name
nnl = SLot_possicao
n = 1
For L = 1 To Lt
For c = 1 To cT
Dr = SlotST(L, c)
If Dr <> "" And nnl > 0 Then
vlob = Split(Dr, sep):
If vlob(0) = nmform Then n = n + 1
Else
If Dr = "" Then n = 0
End If
If n = nnl Then
If Dr <> "" And n > 0 Then MsgBox "Slot " & nnl & " ocupado, Deseja substituir ? "
Dr = Matriz_nomes_objetos(0) & sep
For r = 1 To UBound(Matriz_nomes_objetos)
D = Objeto_Formulario.Controls(Matriz_nomes_objetos(r)).Value
If D = "Verdadeiro" Then D = "V£"
If D = "Falso" Then D = "F£"
Dr = Dr & D
If r < UBound(Matriz_nomes_objetos) Then Dr = Dr & sep
Next
SlotST(L, c) = Dr
Range(ragSLT).Value2 = SlotST
Exit Sub
End If
Next
Next
End With
End Sub
para usar
no formulário
preferi usar os nomes dos objetos para ter um padrão mesmo se for feito modificação do formulario, e normalmente só se grava valores de alguns
Sub RealocarGrava_Click()
'refo é a lista dos nomes dos objetos que terão seus valores gravados
refo = Array(Me.Name, "Fixacopy", "Plan_list", "De_1", "OZig_C", "Oinvq_C", "Oinvert_L", _
"Oquadante_L", "OQuatL", "Oinvq_L", "Oinvert_C", "OZig_L", "Oquadante_C", "OQuatC", "OdpL", "Odpc", _
"Para_2", "Quant", "Dquadante_L", "Dinvq_L", _
"Dquadante_C", "DQuatL", "Ddpc", "DdpL", "Dinvert_L", "DZig_L", "Dinvert_C", "DZig_C", _
"DQuatC", "Dinvq_C", "Alinhar_Baixo", "Latrea", "SetTud", _
"TxtbAçõesOrigem", "ExecAçõesOrigem", "TxtbAçõesDestino", "ExecAçõesDestino")
Call Grava_valor_objetos(Me, refo, 0)
End Sub
para se recuperar os valores
é praticamente o mesmo funcionamento,
a macro procura por uma posição que tenha o nome do formulário e que seja na contagem do slot procurado
Sub Le_valor_objetos( _
ByRef Objeto_Formulario As Object, _
ByRef Matriz_nomes_objetos, _
ByVal SLot_possicao As Long)
Dim Dr As String, D As String, SlotST(), ForNm As String
ReDim SlotS(1 To 3, 1 To 5)
sep = "|"
SlotST = Range("C49:P55").Value2
Lt = UBound(SlotST, 1)
cT = UBound(SlotST, 2)
nnl = SLot_possicao
If nnl > 0 Then ' recupera valores
With Objeto_Formulario
nmform = .Name
n = 1
For L = 1 To Lt
For c = 1 To cT
Dr = SlotST(L, c)
If Dr <> "" Then
vlob = Split(Dr, sep)
If vlob(0) = nmform Then
If n = nnl Then
For r = 1 To UBound(Matriz_nomes_objetos)
Dr = vlob(r)
If Dr = "V£" Then Dr = "True"
If Dr = "F£" Then Dr = "False"
.Controls(Matriz_nomes_objetos(r)).Value = Dr
Next
Exit Sub
Else
n = n + 1
End If
End If
Else
MsgBox "Não existe dados gravados de " & nmform & " no Slot " & nnl
Exit Sub
End If
Next
Next
End With
End If
End Sub
Sub Realocarle_Click()
refo = Array(Me.Name, "Fixacopy", "Plan_list", "De_1", "OZig_C", "Oinvq_C", "Oinvert_L", _
"Oquadante_L", "OQuatL", "Oinvq_L", "Oinvert_C", "OZig_L", "Oquadante_C", "OQuatC", "OdpL", "Odpc", _
"Para_2", "Quant", "Dquadante_L", "Dinvq_L", _
"Dquadante_C", "DQuatL", "Ddpc", "DdpL", "Dinvert_L", "DZig_L", "Dinvert_C", "DZig_C", _
"DQuatC", "Dinvq_C", "Alinhar_Baixo", "Latrea", "SetTud", _
"TxtbAçõesOrigem", "ExecAçõesOrigem", "TxtbAçõesDestino", "ExecAçõesDestino")
Call Le_valor_objetos(Me, refo, Me.Grava_Le.Value)
End Sub
bem com isso posso gravar estados de fomulários diferentes em uma mesma range , substituir os valores e regravar por cima
pretendo colocar um slot auxiliar para caso se queira fazer comparações
uma utilidade da macro seria para procurar valores padrões em vez do nome do formulário,
assim um formulário extenso se pode ter valores pré gravados e seria só procurar oq se quer