none
definir uma proporção da largura da coluna do listbox para celula RRS feed

  • Pergunta

  • inicialmente peço desculpas pela pergunta confusa

    queria saber se tem como definir uma proporção da largura da coluna do listbox para celula e para o userform

    improvisei essa macro que usa componentes já presentes da minha planilha que serve se controle

    Private Sub Selec_NumL_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
        Call SetorL(Cells(7, ActiveCell.Column).Value2)
        Selec_NumL.Value = Cells(ActiveCell.Row, Ti).Value2
        vc = 18
        With ListBox1
            .ColumnCount = Cq + 4
            .RowSource = Range(Ti & ActiveCell.Row - 3, Fc & ActiveCell.Row + 3).Address
            cwid = ";" & vc
            For c = 1 To Cq + 1
                cwid = cwid & ";" & vc
            Next
            .ColumnWidths = "35;40" & cwid
        End With
        vv = Cq - 3
        Lista_Busca.Width = 321 + (vv * (vc - (vv / Cq)))
    End Sub

    como a area é dinamica na posição, na quantidade de colunas quanto largura estou fazendo alguns testes

    mas com alguns valores não ficou legal

    vc = 18 'define a largura
        'loop para ajustar as colunas do list box   

    For c = 1 To Cq + 1 cwid = cwid & ";" & vc Next

      .ColumnWidths = "35;40" & cwid

    essa parte ajusta o userform não ficou preciso mas chega proximo ao tamanho ideal "não me pergunte como cheguei nessa conta maluca"

    vv = Cq - 3 'define a quantidade minima de colunas "cq nunca vai ser menor que 3"
        Lista_Busca.Width = 321 + (vv * (vc - (vv / Cq)))

    a macro está funcionando direito fora o ajuste de colunas  já que eu ainda não consegui uma proporção exata

    é a segunra vez que uso listbox então ainda não sei trabalhar bem com ele

    quarta-feira, 19 de agosto de 2015 20:42

Respostas

  • bem, como achei o listview monotono decidi mudar

    como eu somente queria visualizar os dados e para chegar neles seria somente usar as mesma informações decidi usar caixa de imagem e formatação condicional em tempo real na area que seria mostrada

    como a caixa de imagem tem auto ajuste eu somente precisei ajustar a userfor

    e  para isso usei um loop para verificar a largura da celula e se ela está visivel

                For c = Cells(1, Ti).Column To Cells(1, Fc).Column
                    If Columns(c).Hidden = False Then cwid = cwid + (Columns(c).Width * 1.2)
                Next

    até adicionei a opção de uma segunda caixa de imagem de outra area

    ficou meio lento, acho que pq não se pode congelar a tela

    provavelmente eu largue isso de lado e apenas subdivida a planilha por macro e cole as informações direto nela

    • Marcado como Resposta Edcronos quinta-feira, 27 de agosto de 2015 20:19
    sexta-feira, 21 de agosto de 2015 23:48

Todas as Respostas

  • consegui um ajuste próximo com o valor ColumnWidth da celula  * 8

    a segunda coluna da list eu coloquei *9 pq é de data

    Cells(Li, Cd).ColumnWidth * 9

    With ListBox1 .ColumnCount = Cq + 5 .RowSource = Ti & ActiveCell.Row - 3 & ":" & Fc & ActiveCell.Row + 3 vc = Cells(Li, Ci).ColumnWidth * 8

    cwid = Cells(Li, Ti).ColumnWidth * 8 & ";" & Cells(Li, Cd).ColumnWidth * 9 For c = 1 To Cq + 2 cwid = cwid & ";" & vc Next .ColumnWidths = cwid End With

    agora tenho que ver o ajuste para o userform que é a soma desses valores menos a diferença da proporção que tem tamanho fixo

    • Marcado como Resposta Edcronos quinta-feira, 20 de agosto de 2015 02:30
    • Não Marcado como Resposta Edcronos quinta-feira, 20 de agosto de 2015 03:23
    quarta-feira, 19 de agosto de 2015 22:34
  • bem, como achei o listview monotono decidi mudar

    como eu somente queria visualizar os dados e para chegar neles seria somente usar as mesma informações decidi usar caixa de imagem e formatação condicional em tempo real na area que seria mostrada

    como a caixa de imagem tem auto ajuste eu somente precisei ajustar a userfor

    e  para isso usei um loop para verificar a largura da celula e se ela está visivel

                For c = Cells(1, Ti).Column To Cells(1, Fc).Column
                    If Columns(c).Hidden = False Then cwid = cwid + (Columns(c).Width * 1.2)
                Next

    até adicionei a opção de uma segunda caixa de imagem de outra area

    ficou meio lento, acho que pq não se pode congelar a tela

    provavelmente eu largue isso de lado e apenas subdivida a planilha por macro e cole as informações direto nela

    • Marcado como Resposta Edcronos quinta-feira, 27 de agosto de 2015 20:19
    sexta-feira, 21 de agosto de 2015 23:48
  • Tente algo como:

                Application.ScreenUpdating = False
                Application.Calculation = xlCalculationManual
                For c = Cells(1, Ti).Column To Cells(1, Fc).Column
                    If Columns(c).Hidden = False Then cwid = cwid + (Columns(c).Width * 1.2)
                Next
                Application.ScreenUpdating = True
                Application.Calculation = xlCalculationAutomatic


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


    segunda-feira, 24 de agosto de 2015 14:21
    Moderador
  • Ola

    para falar a verdade tbm achei a listbox lento

    não sei se foi pelo uso do .RowSource

    mas na caixa de imagem o problema é na parte de criar a imagem, pq nesse ponto não pode congelar a tela senão a imagem não aparece

    eu separei a macro de controle e criei uma para adicionar as imagens nas caixas por referencia

    mas bem, a userform está funcionando com duas caixas de imagem e mostra ranges que tem o valor procurado

    adicionei setas para navegar na planilha ou pular para o proximo valor

    mas como falei achei lento, mas pode ser pq eu estou acostumado a usar arrays e minhas macros fazer execuções em milhares de linhas de maneira instantânea.,

    para falar a verdade a questão de proporção do topico está resolvido

    If Columns(c).Hidden = False Then cwid = cwid + (Columns(c).Width * 1.2)

    o Width *1.2   " é a largura da celula *1.2 para ajustar o userform"

    useform.Width = cwid

    Ajustando direto não fica na proporção correta  "useform.Width = cwid *1.2"

    sobre

               Application.ScreenUpdating = False
                Application.Calculation = xlCalculationManual

    eu já tenho  macro que faz essa função e que adiciono no inicio de minhas macros de chamada

    Sub Inicio()
        Range(TabelaSetores).Calculate
        Application.ScreenUpdating = False
        Application.Calculation = xlCalculationManual
        ThisWorkbook.Sheets("AUXIa").Visible = xlSheetVisible
    End Sub
    
    Sub Final()
        Worksheets("AUXIa").Visible = xlSheetVeryHidden
        Application.Calculation = xlCalculationAutomatic
        Application.ScreenUpdating = True
    End Sub
    mas para pegar a imagem da range tem que desativar , e tbm por causa da formatação condicional que a macro aplica na range antes de pegar a imagem


    • Editado Edcronos quarta-feira, 26 de agosto de 2015 00:34
    terça-feira, 25 de agosto de 2015 22:44
  • "mas na caixa de imagem o problema é na parte de criar a imagem, pq nesse ponto não pode congelar a tela senão a imagem não aparece"

    Caixa de imagem é um objeto picture?

    De onde você carrega essa imagem? De um caminho no computador mesmo? Qual é o tamanho da imagem e seu formato?


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

    quarta-feira, 26 de agosto de 2015 13:27
    Moderador
  • é uma imagem de range de planilha

    eu fiz essa macro para adicionar a imagem na caixa

    Private Sub insereimagem(Objet As Object, Rango As Range)
    
        Dim PLt As Worksheet
        Rango.CopyPicture xlScreen, xlBitmap
        Set PLt = Rango.Worksheet
        With PLt.ChartObjects.Add(0, 0, Rango.Width, Rango.Height)
            .Chart.Paste
            .Chart.Export ThisWorkbook.Path & "\imagew.gif"
            .Delete
        End With
        Objet.Picture = LoadPicture(ThisWorkbook.Path & "\imagew.gif")
    End Sub
               

    para usar

    Final
     Call insereimagem(Me.Image2, Sheets(Plan_Ory.Value).Range(Ti & ldd - Lr, Fc & ldd + Lr))

    mas como falei, o fato de aplicar formatação condicional em tempo real para ter uma imagem com dados formatados pode está gerando o retardo no inicio

    quarta-feira, 26 de agosto de 2015 15:24
  • consegui melhorar um pouco a velocidade desativando  o congelamento da tela somente na hora de capturar a imagem

        Final-->( Application.Calculation = xlCalculationAutomatic : Application.ScreenUpdating = True)    Rango.CopyPicture xlScreen, xlBitmap
        Inicio-->( Application.Calculation = xlCalculationManual : Application.ScreenUpdating =False)


    mas acho que definir a imagem , exportar para gif e logo colocar na caixa de imagem está atrazando a macro

        With PLt.ChartObjects.Add(0, 0, Rango.Width, Rango.Height)
            .Chart.Paste
            .Chart.Export ThisWorkbook.Path & "\imagew.gif"
            .Delete
        End With
        Objet.Picture = LoadPicture(ThisWorkbook.Path & "\imagew.gif")

    será que tem como passar a imagem direto para a caixa de imagem? ?

    Edit:

    tbm é da formatação condicional,

    desse jeito que coloquei somente pega as formatações já aplicadas e não a gerada no momento da busca de valores ,

    isso por causa do atraso em formatar e pelo tamanho da planilha "6000 linhas * 140 colunas"

    Novo edit:

    o efeito que falei é devido ser de outra aba,

    na mesma aba pega a formatação criada na hora,

    mas em outra aba não cria formatação condicional instantânea, mesmo sem congelara a tela, "teria que tornar a aba ativa"

    • Editado Edcronos quarta-feira, 26 de agosto de 2015 22:55
    quarta-feira, 26 de agosto de 2015 22:25
  • Remover todas as formatações condicionais não é uma opção?

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

    quinta-feira, 27 de agosto de 2015 12:58
    Moderador
  • infelizmente não,

    pq é a unica maneira de analisar visualmente as diferenças

    mas tudo bem, já apliquei a mesma solução na propria planilha e com muito mais funcionalidades

    as imagens no formulario seria apenas um extra

    mas até dá para usar se eu precisar de uma quarta area visível, somente seria ruim de usar se chegasse a 1 segundo para procurar os dados e aplicar as imagens

    mas bem, eu até já fugi da pergunta inicial

    até mais

    quinta-feira, 27 de agosto de 2015 20:18