Página 1 de 1

Ajuda com VBA

Enviado: 16 Ago 2019 às 15:39
por Diego100ges
Pessoal, boa tarde.
Estou utilizando um código VBA para salvar dados de uma pasta de trabalho em outra (que uso para banco de dados), o código está funcionando bem, mas percebi um problema, ele não está salvando no lugar correto(que está especificado no código) ele acaba salvando na última aba em que estive na planilha Base(banco de dados citado). Podem revisar meu código e ver se está correto?

Atenciosamente.

Private Sub Lançamento_medições()
Application.ScreenUpdating = False

Dim WP As Workbook 'Pasta atual
Dim WS As Workbook 'Base
Dim WSSheet As Worksheet 'Planilha destino
Dim WPSheet As Worksheet 'Planilha Atual
Dim rngWP As Range 'região com dados
Dim resultado As VbMsgBoxResult 'Msg box


resultado = MsgBox("Tem certeza que deseja prosseguir com esta ação?", vbYesNo, "Tomando uma decisão")
If resultado = vbNo Then
MsgBox "Medições SCDE NÃO FORAM cadastradas"
Exit Sub
End If

Set WP = ActiveWorkbook
Set WPSheet = WP.Sheets("Lançamento de medições SCDE")

WPSheet.Select
Range("LanMedicoes").Select
Selection.Copy
Application.CutCopyMode = False
Selection.Copy

Set WS = Workbooks.Open("Y:\Diego Matos\Base.xlsx")
Set WSSheet = WS.Sheets("Base-Medicoes-SCDE")
Range("a2:g2").Select
Do
If ActiveCell <> "" Then
ActiveCell.Offset(1, 0).Select
End If
Loop Until ActiveCell = ""
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False

Application.DisplayAlerts = False

WS.Close savechanges:=True

Application.DisplayAlerts = True

WP.Activate
WP.Sheets("Lançamento de medições SCDE").Select

WPSheet.Range("A1").Select

MsgBox "Medições SCDE cadastradas com sucesso", vbOKOnly

Application.ScreenUpdating = True
ActiveWorkbook.RefreshAll

MsgBox ("A planilha será atualizada")
End Sub

Re: Ajuda com VBA

Enviado: 16 Ago 2019 às 16:22
por babdallas
Testa isso. Não sei se está funcionando porque você não anexou a pasta de trabalho para testar.
Código: Selecionar todos
Private Sub Lançamento_medições()
    Application.ScreenUpdating = False
    
    Dim WP              As Workbook 'Pasta atual
    Dim WS              As Workbook 'Base
    Dim WSSheet         As Worksheet 'Planilha destino
    Dim WPSheet         As Worksheet 'Planilha Atual
    Dim rngWP           As Range 'região com dados
    Dim resultado       As VbMsgBoxResult 'Msg box
    Dim lngUltLin       As Long
    
    resultado = MsgBox("Tem certeza que deseja prosseguir com esta ação?", vbYesNo, "Tomando uma decisão")
    If resultado = vbNo Then
        VBA.MsgBox "Medições SCDE não foram cadastradas"
        Exit Sub
    End If
    
    Set WP = ThisWorkbook
    Set WPSheet = WP.Sheets("Lançamento de medições SCDE")
    
    Set WS = Workbooks.Open("Y:\Diego Matos\Base.xlsx")
    Set WSSheet = WS.Sheets("Base-Medicoes-SCDE")
    
    lngUltLin = WSSheet.Cells(WSSheet.Rows.Count, 1).End(xlUp).Row
    
    WSSheet.Range("A" & lngUltLin + 1).Resize(WPSheet.Range("LanMedicoes").Rows.Count, _
                                            WPSheet.Range("LanMedicoes").Columns.Count).Value = _
                                                                            WPSheet.Range("LanMedicoes").Value
    Application.DisplayAlerts = False
    
    WS.Close savechanges:=True
    
    Application.DisplayAlerts = True
    
    WP.Activate
    WP.Sheets("Lançamento de medições SCDE").Select
    WPSheet.Range("A1").Select
    
    MsgBox "Medições SCDE cadastradas com sucesso", vbOKOnly
    Application.ScreenUpdating = True
    ThisWorkbook.RefreshAll
End Sub

Ajuda com VBA

Enviado: 16 Ago 2019 às 16:25
por eduardogrigull
Coloque: WSSheet.Activate na linha antes de: Range("a2:g2").Select...
Ficaria assim:
Código: Selecionar todos
Set WSSheet = WS.Sheets("Base-Medicoes-SCDE")
WSSheet.Activate
Range("a2:g2").Select

Re: Ajuda com VBA

Enviado: 16 Ago 2019 às 16:39
por Diego100ges
babdallas escreveu:Testa isso. Não sei se está funcionando porque você não anexou a pasta de trabalho para testar.
Código: Selecionar todos
Private Sub Lançamento_medições()
    Application.ScreenUpdating = False
    
    Dim WP              As Workbook 'Pasta atual
    Dim WS              As Workbook 'Base
    Dim WSSheet         As Worksheet 'Planilha destino
    Dim WPSheet         As Worksheet 'Planilha Atual
    Dim rngWP           As Range 'região com dados
    Dim resultado       As VbMsgBoxResult 'Msg box
    Dim lngUltLin       As Long
    
    resultado = MsgBox("Tem certeza que deseja prosseguir com esta ação?", vbYesNo, "Tomando uma decisão")
    If resultado = vbNo Then
        VBA.MsgBox "Medições SCDE não foram cadastradas"
        Exit Sub
    End If
    
    Set WP = ThisWorkbook
    Set WPSheet = WP.Sheets("Lançamento de medições SCDE")
    
    Set WS = Workbooks.Open("Y:\Diego Matos\Base.xlsx")
    Set WSSheet = WS.Sheets("Base-Medicoes-SCDE")
    
    lngUltLin = WSSheet.Cells(WSSheet.Rows.Count, 1).End(xlUp).Row
    
    WSSheet.Range("A" & lngUltLin + 1).Resize(WPSheet.Range("LanMedicoes").Rows.Count, _
                                            WPSheet.Range("LanMedicoes").Columns.Count).Value = _
                                                                            WPSheet.Range("LanMedicoes").Value
    Application.DisplayAlerts = False
    
    WS.Close savechanges:=True
    
    Application.DisplayAlerts = True
    
    WP.Activate
    WP.Sheets("Lançamento de medições SCDE").Select
    WPSheet.Range("A1").Select
    
    MsgBox "Medições SCDE cadastradas com sucesso", vbOKOnly
    Application.ScreenUpdating = True
    ThisWorkbook.RefreshAll
End Sub
Funcionou, o código passou a gravar, porém está apresentando um erro desconhecido pra mim

[DataFormat.Error] Valor de célula inválido '#N/A'.

Sabe o que pode ser?

Re: Ajuda com VBA

Enviado: 16 Ago 2019 às 16:39
por Diego100ges
eduardogrigull escreveu:Coloque: WSSheet.Activate na linha antes de: Range("a2:g2").Select...
Ficaria assim:
Código: Selecionar todos
Set WSSheet = WS.Sheets("Base-Medicoes-SCDE")
WSSheet.Activate
Range("a2:g2").Select
Também funcionou, gravou no lugar correto, mas passou a apresentar o mesmo erro da solução apresentada pelo amigo ali em cima
[DataFormat.Error] Valor de célula inválido '#N/A'.

Sabe o que pode ser?

Re: Ajuda com VBA

Enviado: 16 Ago 2019 às 17:00
por Diego100ges
Prezados encontrei o Erro.

Muito obrigado com a ajuda!