Este é meu primeiro projeto usando o VBA. Eu tenho um código (veja abaixo) que lê se um número na folha está presente. Se estiver, o código chamará uma macro para copiar a imagem de origem de outra folha, colá-la na nova folha e renomear / redimensionar / centralizar a imagem colada na célula.
O problema é que já posso dizer que esse código está sendo executado lentamente. Eu sei que usar ".select" diminui muito o código, mas não sei se existe uma solução para o que preciso fazer.
Aqui está o código funcional (embora lento) que tenho. (desloque-se para o final da imagem de referência)
Este é o primeiro código que testa os números e chama as macros:
Sub xGridA_Pic_Setup()
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
If Evaluate(WorksheetFunction.CountIf(Worksheets("Rent Grid A").Range("D1:H1"), "1")) < 1 Then
Else
Call xGridA_Comp1
End If
If Evaluate(WorksheetFunction.CountIf(Worksheets("Rent Grid A").Range("D1:H1"), "2")) < 1 Then
Else
Call xGridA_Comp2
End If
If Evaluate(WorksheetFunction.CountIf(Worksheets("Rent Grid A").Range("D1:H1"), "3")) < 1 Then
Else
Call xGridA_Comp3
End If
If Evaluate(WorksheetFunction.CountIf(Worksheets("Rent Grid A").Range("D1:H1"), "4")) < 1 Then
Else
Call xGridA_Comp4
End If
If Evaluate(WorksheetFunction.CountIf(Worksheets("Rent Grid A").Range("D1:H1"), "5")) < 1 Then
Else
Call xGridA_Comp5
End If
If Worksheets("Rent Roll").Range("TOTAL_UNIT_TYPE") > 1 Then
End If
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
End Sub
Aqui está uma parte da macro que chama:
Sub xGridA_Comp1()
Sheets("Rent Data Entry").Select
ActiveSheet.Shapes.Range(Array("PIC_RENTCOMP1")).Select
Selection.Copy
Sheets("Rent Grid A").Select
If Range("D1") <> 1 Then
Else
Range("RGA_COMP1_CELL").Select
ActiveSheet.Paste
With ActiveSheet.Shapes.Range(Array("PIC_RENTCOMP1")).Select
Selection.Name = "PIC_RGA_CMP1_1"
Selection.ShapeRange.Height = 97.2
Selection.ShapeRange.Width = 129.6
End With
With ActiveSheet.Shapes("PIC_RGA_CMP1_1")
.Top = Range("RGA_COMP1_CELL").Top + (Range("RGA_COMP1_CELL").Height - .Height) / 2
.Left = Range("RGA_COMP1_CELL").Left + (Range("RGA_COMP1_CELL").Width - .Width) / 2
End With
End If
If Range("E1") <> 1 Then
Else
Range("RGA_COMP2_CELL").Select
ActiveSheet.Paste
With ActiveSheet.Shapes.Range(Array("PIC_RENTCOMP1")).Select
Selection.Name = "PIC_RGA_CMP1_2"
Selection.ShapeRange.Height = 97.2
Selection.ShapeRange.Width = 129.6
End With
With ActiveSheet.Shapes("PIC_RGA_CMP1_2")
.Top = Range("RGA_COMP2_CELL").Top + (Range("RGA_COMP2_CELL").Height - .Height) / 2
.Left = Range("RGA_COMP2_CELL").Left + (Range("RGA_COMP2_CELL").Width - .Width) / 2
End With
End If
If Range("F1") <> 1 Then
Else
Range("RGA_COMP3_CELL").Select
ActiveSheet.Paste
With ActiveSheet.Shapes.Range(Array("PIC_RENTCOMP1")).Select
Selection.Name = "PIC_RGA_CMP1_3"
Selection.ShapeRange.Height = 97.2
Selection.ShapeRange.Width = 129.6
End With
With ActiveSheet.Shapes("PIC_RGA_CMP1_3")
.Top = Range("RGA_COMP3_CELL").Top + (Range("RGA_COMP3_CELL").Height - .Height) / 2
.Left = Range("RGA_COMP3_CELL").Left + (Range("RGA_COMP3_CELL").Width - .Width) / 2
End With
End If
If Range("G1") <> 1 Then
Else
Range("RGA_COMP4_CELL").Select
ActiveSheet.Paste
With ActiveSheet.Shapes.Range(Array("PIC_RENTCOMP1")).Select
Selection.Name = "PIC_RGA_CMP1_4"
Selection.ShapeRange.Height = 97.2
Selection.ShapeRange.Width = 129.6
End With
With ActiveSheet.Shapes("PIC_RGA_CMP1_4")
.Top = Range("RGA_COMP4_CELL").Top + (Range("RGA_COMP4_CELL").Height - .Height) / 2
.Left = Range("RGA_COMP4_CELL").Left + (Range("RGA_COMP4_CELL").Width - .Width) / 2
End With
End If
If Range("H1") <> 1 Then
Else
Range("RGA_COMP5_CELL").Select
ActiveSheet.Paste
With ActiveSheet.Shapes.Range(Array("PIC_RENTCOMP1")).Select
Selection.Name = "PIC_RGA_CMP1_5"
Selection.ShapeRange.Height = 97.2
Selection.ShapeRange.Width = 129.6
End With
With ActiveSheet.Shapes("PIC_RGA_CMP1_5")
.Top = Range("RGA_COMP5_CELL").Top + (Range("RGA_COMP5_CELL").Height - .Height) / 2
.Left = Range("RGA_COMP5_CELL").Left + (Range("RGA_COMP5_CELL").Width - .Width) / 2
End With
End If
End Sub
Aqui está uma captura de tela da planilha onde as imagens estão sendo coladas, mostrando onde os números estão sendo lidos:
Qualquer dica para acelerar isso seria muito apreciada! Este código precisa ser executado em até 10 tabelas idênticas às da imagem. Obrigado !!!
Tags microsoft-excel macros vba