Para que precisamos disso? Nem me perguntem. Por uma necessidade de um dos sistemas na empresa, precisamos fazer uma verificação da versão do framework em que o assembly estaria executando.
Em primeiro instante, pareceu ser algo monstruoso, mas, como de costume, o .NET Framework não nos decepcionou. A linha que traz o dado que queríamos resume-se a seguinte:
System.Environment.Version.ToString()
System.Environment.Version.ToString()
A linha devolve a versão exata do Framework em que o assembly está executando. É curioso ver o código funcionando em diferentes versões. Tente compilar o programa abaixo em diferentes versões do compilador csc.exe:
A dúvida veio de um familiar. Na necessidade de querer dar uma limpada em seus emoticons no MSN, ou Windows Live Messenger, veio a dúvida se era possível excluir aquele monte de coisas que foram adicionadas com o tempo, mas que acabaram ficando desorganizadas.
Claro que existe o tradicional recurso excluir, mas um a um, quando a quantidade é relativamente grande, pode se tornar um pesadelo. Como fazer então para excluir todos os Emoticons personalizados de uma só vez? É só fazero seguinte:
Navegue até a pasta <drive>:\Documents and Settings\<Windows_LoginId>\Local Settings\Application
Data\Microsoft\Messenger\<Messenger_UserId>\ObjectStore\CustomEmoticons, onde:
Drive é a letra do drive onde está instalado seu sistema
Windows_LoginId é o nome do seu usuário no computador
Messenger_UserId é o seu login no MSN\Windows Live
Ao chegar nessa pasta,verá uma séria de arquivos que no caso, representam os emoticons personalizados no seu perfil no MSN\Windows Live. Com ele fechado, basta apagar todo o conteúdo desta pasta e, ao voltar a entrar, verá que todo os emoticons voltaram ao normal.
Infelizmente, como os arquivos são de alguma forma codificados, não é possível, pelo menos não facilmente, identificar qual arquivo se refere a qual emoticon especificamente.
Observações
Caso esteja rodando o sistema Windows Vista ou Windows 7, troque a pasta “Documents and Settings” no caminho informado por “Users”
Como feedback de um dos usuários do nosso Modelo de Cadastro em Excel, foi descoberto um erro (ou bug, mas é que culpar um inseto por tudo é meio injusto, não?) que assola a versão 3 do modelo.
Quando a seguinte sequência é de ações é executada:
Na tela de Pesquisa, clicar no botão Exportar;
Clicar 2x em um registro
Clicar no botão Pesquisar
Um erro é gerado. A explicação é simples. Como a função exportar cria uma nova planilha e a apresenta, porém, mantém a tela de Pesquisa aberta, mas muda o contexto do Workbook, ou seja, o ThisWorkbook no VBA passa a valer para a planilha exportada. Quando a linha:
ARQUIVO_DADOS = Range("ARQUIVO_DADOS").Value
ARQUIVO_DADOS = Range("ARQUIVO_DADOS").Value
no método DefinePlanilhaDados é executada, torna-se inválida, pois a área nomeada “ARQUIVO_DADOS” só existe na pasta de trabalho ModeloCadastro_FrontEnd.xls. Existem algumas formas de corrigir o problema, mas, para simplificar a correção, coloquei a seguinte linha antes da mencionada acima:
ThisWorkbook.Activate
ThisWorkbook.Activate
Foi o suficiente para resolver o problema. No final, o método DefinePlanilhaDados fica da seguinte forma:
PrivateSub DefinePlanilhaDados()
Dim wb As Workbook
Dim caminhoCompleto AsStringDim ARQUIVO_DADOS AsStringDim PASTA_DADOS AsString
ThisWorkbook.Activate
ARQUIVO_DADOS = Range("ARQUIVO_DADOS").Value
PASTA_DADOS = Range("PASTA_DADOS").Value
If ThisWorkbook.Name <> ARQUIVO_DADOS Then'monta a string do caminho completoIf PASTA_DADOS = vbNullString Or PASTA_DADOS = ""Then
caminhoCompleto = Replace(ThisWorkbook.FullName, ThisWorkbook.Name, vbNullString) & ARQUIVO_DADOS
ElseIf Right(PASTA_DADOS, 1) = "\"Then
caminhoCompleto = PASTA_DADOS & ARQUIVO_DADOS
Else
caminhoCompleto = PASTA_DADOS & "\" & ARQUIVO_DADOS
EndIfEndIfEndIf
caminhoArquivoDados = caminhoCompleto
EndSub
Private Sub DefinePlanilhaDados()
Dim wb As Workbook
Dim caminhoCompleto As String
Dim ARQUIVO_DADOS As String
Dim PASTA_DADOS As String
ThisWorkbook.Activate
ARQUIVO_DADOS = Range("ARQUIVO_DADOS").Value
PASTA_DADOS = Range("PASTA_DADOS").Value
If ThisWorkbook.Name <> ARQUIVO_DADOS Then
'monta a string do caminho completo
If PASTA_DADOS = vbNullString Or PASTA_DADOS = "" Then
caminhoCompleto = Replace(ThisWorkbook.FullName, ThisWorkbook.Name, vbNullString) & ARQUIVO_DADOS
Else
If Right(PASTA_DADOS, 1) = "\" Then
caminhoCompleto = PASTA_DADOS & ARQUIVO_DADOS
Else
caminhoCompleto = PASTA_DADOS & "\" & ARQUIVO_DADOS
End If
End If
End If
caminhoArquivoDados = caminhoCompleto
End Sub
O modelo já está corrigido na sua própria página. Os agradecimentos vão para a colega Fernanda Esper, que identificou e reportou o problema. Valeu!
O jQuery é uma biblioteca tão bacana que é usada intensamente por desenvolvedores e web designers.
Isso é ótimo por um lado, pois além de todas as vantagens, traz certa uniformidade para o desenvolvimento, e impede que um dos dois suje demais o código.
O lado péssimo é que, se desenvolvedores e designers não se conversam, o que é comum, cada um acaba por usar versões diferentes do jQuery, o que pode gerar conflitos. Algumas vezes nem dá para chegar em um acordo, pois a depender a implementação, a dependência gerada de uma determinada biblioteca pode tornar inevitável o uso de duas versões. O erro mais comum é passar a não encontrar determinadas funções, mesmo as padrões do jQuery, obtendo resultados como:
$(“#datepicker”).datepicker() is not a function
Isso acontece porque, com mais de uma versão do jQuery, cada uma tenta declarar a variável “$”. Na segunda tentativa de usá-la, o erro acima aparece. A solução? Veja o código abaixo:
var $j = jQuery.noConflict();
$j("#datepicker").datepicker();
var $j = jQuery.noConflict();
$j("#datepicker").datepicker();
O que isso faz? Cria um novo contexto para o jQuery, permitindo que você trabalhe com ele a partir desta nova variável. Uma explicação melhor do que o método noConflict() faz pode ser vista no link abaixo: