Vamos as explicações...
O autor do tópico "que sumiu" perguntou se era possível definir uma variável como célula, não pediu que fosse variável publica.
falaram que não dava, eu postei uma macro que explicava o funcionamento.
e falaram que gerava erros, aqui pelo menos em nenhum teste que fiz gerou erro "variável Não publica"
E como eu enfrentei instabilidades em algumas macros 2 de 30 " as mais simples" me interessei em saber O Porque ocorre Erros
Bem, eu Não uso variáveis como Range, mas 98% das minhas variáveis são publicas e as macros funcionavam 100% antes de reformular a planilha e definir os valores das variaveis com valores da planilha.
as variaveis que uso e as macros que definem as variáveis com valores das células "ainda tenho que refinar"
'Variveis & Comandos
'*****************************VARIAVEIS
Public fr(1 To 10) As Byte
Public Linc As Long 'quantidade de linhas preenchidas
Public Inilin As Long 'Primeira linha com dados
Public Fimlin As Long 'Ultima linha com dados
Public setor As String
'Public Lis As Long
'Public Cis As Long
Public Fimcel As String
Public ci1 As Long '=coluna Gd em numero
Public cf1 As Long ' 'coluna inicial em numero + QUANTIDADE de Colunas da Origem = coluna final em numero
Public Plan_Aq As String 'Planilha Ativa
Public Plan_Princ As String 'Planilha Principal
Public Plan_Ori As String 'Planilha Origem
Public Plan_Des As String 'Planilha destino
Public Plan As String 'Planilha variavel usado para gurdar nome de planilha monetaneamente
Public Mak1 As String
Public Mak2 As String
Public Ab As Long
Public Ac As Long
Public Ma As Long
Public Temp As Date
'*************************DE SETORES
Public Ti As String 'Coluna titulo
Public CData As String 'Coluna Data
Public Ci As String 'Coluna inicial
Public Cf As String 'Coluna final
Public Li As Long 'linha inicial
Public Lf As Long 'Linha final
Public Di As Byte 'indica mudaça nos setores entre planilhas
Public Cq As Long 'indica quantidade de colunas do setor
'Public cor1 As Long 'AINDA SEM USO
'Public cor2 As Long 'AINDA SEM USO
Public Fc As String
'****************************ENDEREÇO DE SETOR AUXILIAR
Public Gd As String 'Coluna Aux 2 Antigo "GO" para trabalhos de macros que ficam lentas quando tem muita formatação ou que as alteram
Public Ge As String 'Coluna Aux 1 para transferencias de outras planilhas começa em Ti tem que ter a largura do maior setor
Public Ti_O As String 'Coluna titulo
Public CData_O As String 'Coluna Data
Public Ci_O As String 'Coluna inicial
Public Cf_O As String 'Coluna final
Public Li_O As Long 'linha inicial
Public Lf_O As Long 'Linha final
Public Di_O As Byte 'indica mudaça nos setores entre planilhas
Public Cq_O As Byte 'indica quantidade de colunas do setor
Sub Setores()
Limit
Cis = Range("D10").Value 'coluna inicial de procura dos setores
Lis = Range("C11").Value ''linha inicial de procura dos setores
sn = 13 'quantidade de setores
If setor <> "" Then
For k = Cis To Cis + sn
If setor = Sheets(Plan).Cells(Lis, k).Value Then 'Localiza setores na planilha de origem
Ti = Sheets(Plan).Cells(Lis + 1, k).Value
CData = Sheets(Plan).Cells(Lis + 2, k).Value
Ci = Sheets(Plan).Cells(Lis + 3, k).Value
Cf = Sheets(Plan).Cells(Lis + 4, k).Value
Fc = Sheets(Plan).Cells(Lis + 5, k).Value
Cq = Sheets(Plan).Cells(Lis + 6, k).Value 'quantidade colunas de dados do setor
'Di = Sheets(Plan).Cells(Lis + 7, k).Value 'diferença de setor entre planilhas
Li = Sheets(Plan).Cells(Lis + 8, k).Value
Lf = Sheets(Plan).Cells(Lis + 9, k).Value
'Ge = Range("E12").Value
'cor1 = Sheets(Plan).Cells(Lis + 8, k).Value
'cor2 = Sheets(Plan).Cells(Lis + 9, k).Value
Exit Sub
End If
Next k
End If
End Sub
Sub Limit()
Li = 100
Lf = 5000
Di = Cells(18, 16).Value
Ge = Range("E12").Value 'Coluna Aux 1 para transferencias de outras planilhas começa em Ti
Gd = Range("D14").Value 'Coluna Aux 2 Antigo "GO"
Plan_Aq = ActiveSheet.Name 'Planilha Ativa
Plan_Princ = Range("E10").Value 'Planilha Principal
End Sub
Sub Sa() '<<<macro de setor define as posições
Ti = "W" 'Coluna titulo
CData = "X"
Ci = "Z" 'Coluna inicial
Cf = "AI" 'Coluna final
Limit
If Di > 0 Then setor = "Sa": Plan = Plan_Aq: Setores
End Sub
uma das macros que apresenta instabilidade "vai ser chamada por outras macros"
Sub ColunasN()
Limit '<<<coloquei para não falhar Afinal pq chamando essa macro não ocorre o problema ????
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Mac = Range("v1").Value '<<<não vai ser usado
k = Range("u1").Value '<<<não vai ser usado <<<<quantidade de colunas de ci até cf vai ser uma variavel publica definida por outra macro :P
If k > 3 And Mac <> "" Then
Application.Run Mac '>>>chama SA
c = Range(Ci & "6", Cf & "6").Columns.Count
ci1 = Range(Ci & "1").Column
cf1 = Range(Cf & "1").Column
If c < k Then
n = k - c
Range(Cells(6, ci1 + 2), Cells(1, ci1 + (n + 1))).EntireColumn.Insert
Range(Cells(6, ci1), Cells(9, ci1 + 1)).AutoFill Destination:=Range(Cells(6, ci1), Cells(9, cf1 + n)), Type:=xlFillDefault '
End If
If c > k Then
n = c - k
Range(Cells(6, ci1 + 2), Cells(1, ci1 + (n + 1))).EntireColumn.Delete
Range(Cells(6, ci1), Cells(9, ci1 + 1)).AutoFill Destination:=Range(Cells(6, ci1), Cells(9, cf1 - n)), Type:=xlFillDefault '
End If
End If
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
End Sub
Como podem ver meio complicado. o engraçado é que macros mais complexas que chamam até 8 outras macros direta ou indiretamente funcionam sem problemas trabalhando com as mesma macros e variaveis.
Creio que deveria ser aberto outro tópico para o assunto
Somente é impossíveis até que alguém faça
A logica está presa na irracionalidade humana, e morta nos que se consideram donos da verdade.
"ALGUM MODERADOR ME EXPULSE DO FÓRUM POR FAVOR"
Postado : 22/03/2014 10:51 pm