Fala galera boa tarde, estou um pouco sumido aqui do forum porque o tempo anda curto, estou tendo um problema com uma macro VBA no excel, sei que este e um forum de access mas espero que voces possam me dar essa forca mais uma vez, estou usando um codigo para importar dados de varios arquivos de excel que vi em video no youtube, tratei de fazer algumas adptacoes para minhas necessidades e em um principio funcionou bem mas depois quando adicionei as seguintes linhas de codigo em "ThisWorkbook" nos meus arquivos de origem:
deixando o codigo em "ThisWorkBook" desta forma:
ao executar a macro no arquivo de destino que importa os dados tenho o Run-time error ´1004´: PastSpecial method of Range class failed apontando para a linha
Alguem pode me ajudar ver onde esta meu erro? Nao sei se e no arquivo de origem ou destino, esta e a macro executada no modulo de origem:
Muito obrigado a todos.
- Código:
Application.ExecuteExcel4Macro "SHOW.TOOLBAR(""Ribbon"",False)"
Application.DisplayFormulaBar = False
ActiveWindow.DisplayWorkbookTabs = False
Application.DisplayStatusBar = False
- Código:
Application.ExecuteExcel4Macro "SHOW.TOOLBAR(""Ribbon"",True)"
Application.DisplayFormulaBar = True
Application.DisplayStatusBar = True
ActiveWindow.DisplayWorkbookTabs = True
deixando o codigo em "ThisWorkBook" desta forma:
- Código:
Private Sub Workbook_Activate()
Application.ScreenUpdating = False
Application.OnKey "^v", "AtajoTeclado"
Application.ExecuteExcel4Macro "SHOW.TOOLBAR(""Ribbon"",False)"
Application.DisplayFormulaBar = False
ActiveWindow.DisplayWorkbookTabs = False
Application.DisplayStatusBar = False
Application.ScreenUpdating = True
End Sub
Private Sub Workbook_Deactivate()
Application.ScreenUpdating = False
Application.OnKey "^v"
Application.ExecuteExcel4Macro "SHOW.TOOLBAR(""Ribbon"",True)"
Application.DisplayFormulaBar = True
Application.DisplayStatusBar = True
ActiveWindow.DisplayWorkbookTabs = True
Application.ScreenUpdating = True
End Sub
Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
Cancel = True
End Sub
ao executar a macro no arquivo de destino que importa os dados tenho o Run-time error ´1004´: PastSpecial method of Range class failed apontando para a linha
- Código:
wsDestino.Cells(Columns.Count, 1).End(xlUp).Offset(1, 0).PasteSpecial xlPasteValues
Alguem pode me ajudar ver onde esta meu erro? Nao sei se e no arquivo de origem ou destino, esta e a macro executada no modulo de origem:
- Código:
Option Explicit
Dim nArchivo As Integer, Conteo As Integer, i As Integer, j As Integer, n As Integer
Sub ImportarData()
Call Clear
Call ContarArchivos
Application.ScreenUpdating = False
Dim WorkBookOrigen As Workbook
Dim wsOrigen As Excel.Worksheet, _
wsDestino As Excel.Worksheet, _
rngOrigen As Excel.Range, _
rngDestino As Excel.Range, _
NombreArchivo As String, _
Carpeta As String
Carpeta = ActiveWorkbook.Path & "\"
nArchivo = 1
NombreArchivo = Dir(Carpeta & "BASE_A_COPIAR" & "*.xlsm*")
Do While Len(NombreArchivo) > 0
Set WorkBookOrigen = Workbooks.Open(Carpeta & NombreArchivo)
NombreArchivo = Dir()
ThisWorkbook.Activate
Set wsOrigen = WorkBookOrigen.Worksheets(2)
Set wsDestino = Worksheets(1)
Const celdaOrigen = "A2"
Set rngOrigen = wsOrigen.Range(celdaOrigen)
wsOrigen.Activate
wsOrigen.Visible = True
wsOrigen.Unprotect Password:="password"
rngOrigen.Select
Range(Selection, Selection.End(xlDown)).Select
Range(Selection, Selection.End(xlToRight)).Select
Selection.Copy
Errores:
If Err.Number = 1004 Then
wsOrigen.Activate
wsOrigen.Visible = True
wsOrigen.Unprotect Password:="password"
rngOrigen.Select
Range(Selection, Selection.End(xlToRight)).Select
Selection.Copy
End If
For n = 1 To 1
wsDestino.Activate
On Error GoTo Errores
wsDestino.Cells(Columns.Count, 1).End(xlUp).Offset(1, 0).PasteSpecial xlPasteValues
Next n
Application.CutCopyMode = False
WorkBookOrigen.Save
WorkBookOrigen.Close
nArchivo = nArchivo + 1
Call Progreso
Loop
j = nArchivo - 1
Application.ScreenUpdating = True
MsgBox j & " Archivos procesados"
End Sub
Public Sub Progreso()
Dim Contador As Integer
Dim Maximo As Integer
Dim Mitiempo As Double
Maximo = nArchivo - 1
For Contador = 1 To Maximo Step 1
Mitiempo = Timer
Do
Loop While Timer - Mitiempo < 0.02
Application.StatusBar = "Progreso: " & Maximo & _
" de " & i & " (" & Format(Maximo / i, "Percent") & ")"
DoEvents
Next Contador
Application.StatusBar = False
End Sub
Public Sub ContarArchivos()
Dim cNombreArchivo, cCarpeta As String
cCarpeta = ActiveWorkbook.Path & "\"
Conteo = 1
cNombreArchivo = Dir(cCarpeta & "BASE_A_COPIAR" & "*.xlsm*")
Do While Len(cNombreArchivo) > 0
cNombreArchivo = Dir()
Conteo = Conteo + 1
Loop
i = Conteo - 1
End Sub
Muito obrigado a todos.