none
Alternativa para uso do select dentro de uma planilha (sheet) RRS feed

  • Pergunta

  • Senhores,

    Não tem jeito!

    O Felipe Gualberto já me disse que eu deveria evitar comandos que utilizassem o select, e qdo aciono uma planilha passei a utilizar o activate, e resolveu.

    Porém qdo se trata de trabalhar com linhas, áreas, colunas, usando autofit, ainda não encontrei uma alternativa para o select e efetivamente sempre ocorre o erro 1004.

    Por favor, existe alguma forma de contornar esses erros e definir tamanhos de linhas e colunas, e utilizr o autofit sem o erro 1004?

    Obrigado


    Rui Martins

    terça-feira, 18 de agosto de 2015 20:26

Respostas

  • Oi Rui

    Para usar o Autofit, por exemplo, nas colunas A:C não há necessidade de Select

    Basta isto

    Columns("A:C").AutoFit

    Espero que ajude

    M.


    terça-feira, 18 de agosto de 2015 21:06
  • "Existe alguma diferença em utilizar esses comando em uma sub de evento, tipo Activate, Deactivate, ou de um módulo de macro?"
    Não existe diferença.

    "esse método direto, tipo Columns("A:C").AutoFit, também não funcionou"
    Faça uma qualificação mais específica dos seus objetos, como:

    ThisWorkbook.Worksheets("Plan1").Columns("A:C").AutoFit


    Felipe Costa Gualberto - http://www.ambienteoffice.com.br

    quarta-feira, 2 de setembro de 2015 20:42
    Moderador

Todas as Respostas

  • Olá Rui,

    Se entendi direito você quer redimensionar altura e largura de células, 

    Pois bem, segue um exemplo abaixo

        Rows("4:11").Select
        Selection.RowHeight = 36
        Columns("B:D").Select
        Selection.ColumnWidth = 14.57

    Este exemplo seleciona as linhas de 4 a  11 e fixa a altura para 36 pixels, depois seleciona as colunas de B a D e fixa a largura para 14.57

    Seria isso que você precisa ?

    terça-feira, 18 de agosto de 2015 20:37
  • Oi Rui

    Para usar o Autofit, por exemplo, nas colunas A:C não há necessidade de Select

    Basta isto

    Columns("A:C").AutoFit

    Espero que ajude

    M.


    terça-feira, 18 de agosto de 2015 21:06
  • Oi André,

    sim, é isso mesmo, mas sempre retorna erro.

    Já tentei de todas as formas que encontrei, mas todas dão erro no select.

    Já experimentei com áreas nomeadas, usando with/end with e não obtive resultado


    Rui Martins

    quarta-feira, 19 de agosto de 2015 15:11
  • Oi Felipe,

    Obrigado. vou experimentar


    Rui Martins

    quarta-feira, 19 de agosto de 2015 15:14
  • Hmm .. Entendi..

    Tem celulas mescladas ou bloqueadas no intervalo que você esta selecionando ?

    quarta-feira, 19 de agosto de 2015 16:11
  • Oi André,

    Sim, tem, tanto bloqueadas, como mescladas, às vezes as duas.

    Mas qto às bloqueadas, normalmente eu desprotejo as planilhas antes de fazer as alterações e protejo depois, antes de liberar para o operador, só não faço o mesmo com as mescladas.

    A propósito, posso seguir o mesmo raciocínio do autofit, para RowHeight e similares?

    Obrigado.


    Rui Martins


    quarta-feira, 19 de agosto de 2015 18:14
  • Rui, foi um chute...

    Mas testei aqui e vi que não há problema nenhum em redimensionar células mescladas.

    Acho que um teste interessante seria executar o procedimento através do gravador de macros e ver como ficaria esse código ...

    quarta-feira, 19 de agosto de 2015 18:32
  • testei e continua retornando erro 1004

    mudei todos os select para activate e continuou a mesma coisa


    Rui Martins


    quarta-feira, 19 de agosto de 2015 20:51
  • E redimensionar direto, sem selecionar antes ?

    Rows("1:2").rowheight = 50

    quarta-feira, 19 de agosto de 2015 20:58
  • Rui, favor postar seu código completo aqui.

    Felipe Costa Gualberto - http://www.ambienteoffice.com.br

    sexta-feira, 21 de agosto de 2015 13:12
    Moderador
  • 1. Sobre utilizar o gravador de macros, já fiz e continua retornando erro.

    O pior é que não acontece em todos os comandos. Tenho alguns procedimentos que estão funcionando sem problemas.

    Existe alguma diferença em utilizar esses comando em uma sub de evento, tipo Activate, Deactivate, ou de um módulo de macro?

    2. esse método direto, tipo Columns("A:C").AutoFit, também não funcionou. Pergunto se a posição do comando dentro da Sub, influencia, ou alguma instrução anterior.

    O que me intriga é que não é em todos os casos que ocorre o erro.

    exemplo 1:
    Sub AjustaMonitoramento()
    '
    '   05 AjustaMonitoramento Macro
    '
    '
        p02_Monitoramento.Activate
        p02_Monitoramento.Unprotect
        
        Rows("1:1").Select
        Selection.RowHeight = 40.5
        
        Rows("2:2").Select
        Selection.RowHeight = 24
        
        Rows("3:3").Select
        Selection.RowHeight = 43
        
        Rows("7:7").Select
        Selection.RowHeight = 5
        
        Rows("8:113").AutoFit
        Range("A1:A22").Select                '[AjstMonitoramento].() .Select
        ActiveWindow.Zoom = True
        
        Range("G8").Select                     '[CelFxMonit]
        ActiveWindow.FreezePanes = True
        
        Range("B8").Select                     '[CelIniMonit]
        p02_Monitoramento.Protect
        
    End Sub
    =====================================================
    exemplo 2:
    Private Sub Worksheet_Activate()
    '
        ActiveWindow.DisplayHorizontalScrollBar = True
        ActiveWindow.DisplayVerticalScrollBar = True
        
        ActiveWindow.FreezePanes = False
        
        DiretorioAtual = p99_VariaveisTrab.[varDirAtual]
        NomeArqGravacao = p99_VariaveisTrab.[varNomeArqGravacao]
        
        Range("A1:A16").Select                      '[AjstMntAcaoPac]
        ActiveWindow.Zoom = true
        p10_mntAcaoPac.Unprotect
        
        If p01_Inicio.[DesOper] = "D" Then
                m03_MostraPlan.MostraTodasPlanilhas
        Else
        m02_Principal.NVeElemntTela
        ActiveWindow.Caption = "Monitoramento das Ações Pactuadas => " & DiretorioAtual & "\" & NomeArqGravacao
        End If
        Application.Goto Reference:=p10_mntAcaoPac.Range("a1"), scroll:=True
        
        p10_mntAcaoPac.Range("7:113").AutoFit         '[LinDadosMntAcaoPac]
        p10_mntAcaoPac.Rows("6:6").Select
        Selection.EntireRow.Hidden = True
        p10_mntAcaoPac.Rows("2:3").Select
        Selection.RowHeight = 25
        p10_mntAcaoPac.Rows("4:4").Select
        Selection.RowHeight = 40
        
        p10_mntAcaoPac.Range("F7").Select                '[CelFxMntAcaoPac] congela paineis de cabeçalho
        ActiveWindow.FreezePanes = True
        
        p10_mntAcaoPac.Range("B7").Select
        p10_mntAcaoPac.Protect
    End Sub


    Rui Martins

    quarta-feira, 2 de setembro de 2015 20:31
  • "Existe alguma diferença em utilizar esses comando em uma sub de evento, tipo Activate, Deactivate, ou de um módulo de macro?"
    Não existe diferença.

    "esse método direto, tipo Columns("A:C").AutoFit, também não funcionou"
    Faça uma qualificação mais específica dos seus objetos, como:

    ThisWorkbook.Worksheets("Plan1").Columns("A:C").AutoFit


    Felipe Costa Gualberto - http://www.ambienteoffice.com.br

    quarta-feira, 2 de setembro de 2015 20:42
    Moderador
  • OK. Vou experimentar e retorno.

    Obrigado


    Rui Martins

    terça-feira, 8 de setembro de 2015 12:23