Notifications
Clear all

[Resolvido] Acertando o loop

5 Posts
2 Usuários
0 Reactions
1,521 Visualizações
(@cmbruno)
Posts: 73
Estimable Member
Topic starter
 

Bom dia pessoal,

 

Estou tentando resolver um problema e não consegui, se puderem dar uma ajuda.

Na rotina que estou tentando montar no excel eu tinha a instrução abaixo em vermelho e consegui substituir pela que esta em verde.

Não estou conseguindo fazer o mesmo tipo de código para a instrução que esta em azul.

 

O processo seria de acordo com a informação que esta na coluna a da planilha a instrução em verde abre a planilha que esta salva em uma pasta depois ela teria que de acordo com a informação na coluna a executar a instrução em azul.

 

Nãos ei se ficou claro, mas se puder dar uma olhada agradeço.

'workbooks.Open Filename:="\\hbbwflsp005\rondonopolis\_Controle de Estoque\ESTOQUE SEDE E SILOS\INVENTARIOS SILOS MT\Bases Inventários Silos MT2\Centro 2245 - Primavera do Leste.xlsm"

 

ulinha = Cells(Cells.Rows.Count, "a").End(xlUp).Row
For i = 8 To ulinha

Workbooks.Open Filename:=Cells(i, "b")
Range("A5").Select

Sheets("Prints Saldos. Preços e valores").Select
Range("A5:N32").Select

ActiveSheet.Pictures.Insert("\\hbbwflsp005\rondonopolis\_Controle de Estoque\ESTOQUE SEDE E SILOS\INVENTARIOS SILOS MT\Bases Inventários Silos MT2\1 - Pasta Saldos Contábeis\Saldo 2245 - Primavera do Leste.png"). _
Select

 
Postado : 11/05/2021 12:39 pm
EdsonBR
(@edsonbr)
Posts: 1057
Noble Member
 

Acho que vc precisaria anexar seu modelo pra podermos avançar, @cmbruno...

 
Postado : 11/05/2021 1:52 pm
(@cmbruno)
Posts: 73
Estimable Member
Topic starter
 

Boa tarde,

Seguindo a sua orientação @EdsonBR coloquei as informações no anexo abaixo:

Se vocês abriem a planilha " Plan base " e executar a macro verão que ela abri as planilhas que estão nomeadas com nomes de cidades
vai até a aba " Prints Saldos. Preços e valores " copia os prints que estão nas pasta 1 e 2 e colam nos locais definidos nessa aba, salva e fecha a planilha.

Essa macro me atende muito bem, porém se eu preciso incluir nova filial eu preciso copiar e alterar todo o código novamente para cada filial que acrescento.

O que estou tentando fazer sem sucesso é melhorar essa macro para que ao incluir a informação de nova filial na coluna a da " Plan base " a macro faça essa leitura e execute a rotina.

Obs. As planilhas nomeadas com nomes das cidades eu ja vou ter elas prontas e salvas na pasta, porém ela só será utilizada se estivem informada na planilha Plan base na coluna a.
Não sei se melhorou a explicação dessa vez.

 

 
Postado : 11/05/2021 2:55 pm
EdsonBR
(@edsonbr)
Posts: 1057
Noble Member
 

Bom dia, @cmbruno

Teste o código abaixo.

Observações:

  • O código só funcionará se os nomes que estão no intervalo e o dos arquivos forem idênticos: tanto os dos modelos (.xlsm) quanto os dos prints (imagens .png) em suas respectivas pastas.
  • Da mesma forma, considerei que as imagens sempre serão instaladas na planilha "Prints Saldos. Preços e valores" dos arquivos modelos (.xlsm). Portanto, cada um deles deverá ter uma planilha sempre com esse nome.
  • Alterei um pouco a parte em que a imagem é encaixada na área mesclada: ao invés de definir tanto largura como altura em pontos, a imagem agora se encaixa na Largura da área mesclada mas ainda assim mantém a proporção da imagem original (definindo travar proporção -LockAspectRatio- como verdadeiro e deixando sem definir a altura -Shape.Height- pois ela é definida automaticamente pela proporção).
  • Por ora insireri manualmente o range de cidades no código (A7:A10). Logicamente daria pra ter deixado o range automático de acordo com a célula inicial, mas pelo que vi sua planilha ainda é provisória, então não me ocupei com isso.
Sub Copiar_Prints()
  Dim PastaRaiz As String, PastaSaldos As String, PastaPreços As String, cidade As Range, Indisponível As String
  'PastaRaiz = "\\hbbwflsp005\rondonopolis\_Controle de Estoque\ESTOQUE SEDE E SILOS\INVENTARIOS SILOS MT\Bases Inventários Silos MT2\"
  PastaRaiz = "C:\Users\c1721798\Desktop\Modelo\"
  PastaSaldos = PastaRaiz & "01 - Saldos\"       '= PastaRaiz & "1 - Pasta Saldos Contábeis\"
  PastaPreços = PastaRaiz & "02 - Preços\"
  Application.ScreenUpdating = False
    For Each cidade In Range("A7:A10")   'Ajuste seu intervalo de cidades aqui (Planilha Chamar Macros)
      'Antes de abrir verifica se os 3 arquivos existem: o arquivo Excel e os dois prints
      If (Dir(PastaRaiz & cidade.Value & ".xlsm") <> "") And _
         (Dir(PastaSaldos & cidade.Value & ".png") <> "") And _
         (Dir(PastaPreços & cidade.Value & ".png") <> "") Then
         InserePrintItem nomeCidade:=cidade.Value, pModelo:=PastaRaiz, pSaldos:=PastaSaldos, pPreços:=PastaPreços
      Else
         Indisponível = Indisponível & cidade.Value & vbCrLf
      End If
    Next cidade
  Application.ScreenUpdating = True
  MsgBox IIf(Indisponível = "", "Prints copiados.", "Os arquivos:" & vbCrLf & Indisponível & "Não puderam ser processados."), vbOKOnly, "INSERÇÃO DE PRINTS"
End Sub

Sub InserePrintItem(nomeCidade As String, pModelo As String, pSaldos As String, pPreços As String)
  Dim sh As Shape
  With Workbooks.Open(Filename:=pModelo & nomeCidade & ".xlsm").Worksheets("Prints Saldos. Preços e valores")
    Set sh = .Pictures.Insert(Filename:=pSaldos & nomeCidade & ".png").ShapeRange(1)
     sh.LockAspectRatio = msoTrue                    'sh.LockAspectRatio = msoFalse
      sh.Placement = xlMoveAndSize
       sh.Top = .[A5].Top
        sh.Left = .[A5].Left
         sh.Width = .[A5].MergeArea.Width            'sh.Width = 671.811023622
                                                     'sh.Height = 377.8582677165
    Set sh = .Pictures.Insert(Filename:=pPreços & nomeCidade & ".png").ShapeRange(1)
     sh.LockAspectRatio = msoTrue                    'sh.LockAspectRatio = msoFalse
      sh.Placement = xlMoveAndSize
       sh.Top = .[A35].Top
        sh.Left = .[A35].Left
         sh.Width = .[A35].MergeArea.Width           'sh.Width = 671.811023622
                                                     'sh.Height = 377.8582677165
    .Parent.Close SaveChanges:=True
  End With
End Sub

 

 
Postado : 14/05/2021 11:10 am
(@cmbruno)
Posts: 73
Estimable Member
Topic starter
 

@edsonbr

Boa tarde, é exatamente isso. ficou demais.

 

Muito obrigado pelo tempo dispensado nessa ajuda.

 

 
Postado : 14/05/2021 4:52 pm