Notifications
Clear all

Compartilhar Pasta de Trabalho na Rede

6 Posts
2 Usuários
0 Reactions
1,606 Visualizações
(@marcosuke)
Posts: 72
Trusted Member
Topic starter
 

Olá meu povo!

Estou com uma demanda onde preciso jogar uma planilha na rede e vários colaboradores deverão preencher algumas linhas ao longo do dia. Fui confiante que a função "Compartilhar Pasta de Trabalho" fosse me ajudar nessa questão mas fiquei decepcionado quando utilizei pois, se preencho uma linha em que um outro colega ja preencheu anteriormente, sou obrigado a escolher qual dos registros deverá permanecer, o meu ou a do meu colega.
O que eu procuro é uma forma de todos preencherem ao mesmo tempo e o próprio excel ir jogando esses registros nas linhas sem preenchimento conforme o pessoal for registrando as informações.
Alguém tem idéia de como posso fazer isso? A planilha em questão tem vários dropdowns, não sei se isso pode ser um impecílio caso exista uma forma de compartilhar essa planilha da forma como almejo.

Fico aguardando um ser iluminado me orientar nessa missão.

Abraços!

 
Postado : 23/02/2018 8:33 am
carlosrgs
(@carlosrgs)
Posts: 631
Prominent Member
 

Bom dia marcosuke

A algum tempo me deparei com um problema parecido, a solução foi criar uma Pasta de Trabalho para cada usuário e uma Pasta de Trabalho Base.

Dentro do arquivo dos usuários tem botões para importar / exportar dados da base.

O único risco é duas pessoas abrir a base ao mesmo tempo, mas resolvi o problema colocando o código abaixo, antes de executar as macros de imp/exp.

Sub TestFileOpened()

    ' Test to see if the file is open.
    If IsFileOpen("V:FILIALLivro FiscalBase 785.xlsm") Then
        ' Display a message stating the file in use.
        MsgBox "File already in use!"
        '
        ' Add code here to handle case where file is open by another
        ' user.
        '
    Else
        ' Display a message stating the file is not in use.
        MsgBox "File not in use!"
        ' Open the file in Microsoft Excel.
        Workbooks.Open "V:FILIALLivro FiscalBase 785.xlsm"
        '
        ' Add code here to handle case where file is NOT open by another
        ' user.
        '
    End If

End Sub

Function IsFileOpen(filename As String)
    Dim filenum As Integer, errnum As Integer

    On Error Resume Next   ' Turn error checking off.
    filenum = FreeFile()   ' Get a free file number.
    ' Attempt to open the file and lock it.
    Open filename For Input Lock Read As #filenum
    Close filenum          ' Close the file.
    errnum = Err           ' Save the error number that occurred.
    On Error GoTo 0        ' Turn error checking back on.

    ' Check to see which error occurred.
    Select Case errnum

        ' No error occurred.
        ' File is NOT already open by another user.
        Case 0
         IsFileOpen = False

        ' Error number for "Permission Denied."
        ' File is already opened by another user.
        Case 70
            IsFileOpen = True

        ' Another error occurred.
        Case Else
            Error errnum
    End Select

End Function

Espero ter ajudado!

_______________________________________________________________________________________________
Carlos Santos
* Marque o tópico como Resolvido se foi solucionado seu problema.

 
Postado : 23/02/2018 8:45 am
(@marcosuke)
Posts: 72
Trusted Member
Topic starter
 

carlosrgs

Aoww meu amigo! Deus te abençoe pela ajuda. Lancei a macro aqui para fazer a checagem do arquivo que está na rede e ele identificou perfeitamente. Não querendo abusar da sua boa vontade, mas não entendo muito sobre VBA, estou me esforçando mas ainda estou engatinhando. Gostaria de saber como você criou essa forma de exportar os dados preenchidos para a planilha base e como funciona. No meu caso, se cada usuário tiver uma pasta de trabalho que terá dados exportados para uma planilha base, não corre o risco de duplicar valores ja exportados anteriormente? Outra questão é, ao exportar esses dados, como a macro exportar dados vai identificar a ultima linha preechida para não sobrepor o ultimo registro?

 
Postado : 23/02/2018 9:30 am
carlosrgs
(@carlosrgs)
Posts: 631
Prominent Member
 

Boa tarde marcosuke.

Então existe varias maneiras de fazer a exportação.

Sub Exportar()

'       Copia dados para exportar para a Base.
    Range("B8:E100").Select
    Selection.Copy
    
'       Abre o arquivo Base.
    Workbooks.Open Filename:="Z:UserscsantosDocumentsBase.xlsm"
    
'       Selecionando ultima linha.
    Range("B7").Select
    Selection.End(xlDown).Select
    ActiveCell.Offset(1, 0).Select
    
'       Colando dados.
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Application.CutCopyMode = False
    
'       Eliminando duplicidade.
'       "Mesma função em Dados Remover Duplicatas".
    Range("B9:E53").Select
    ActiveSheet.Range("$B$9:$E$53").RemoveDuplicates Columns:=Array(1, 2, 3, 4), _
        Header:=xlNo
    
'       Fechando Arquivo base sem msg de alerta.
    Application.DisplayAlerts = False
    ActiveWorkbook.Save
    ActiveWindow.Close
    
'       Deletando dados que foram exportados.
    Selection.ClearContents
End Sub

Essa macro é simples.

Unica regra que eu ainda não sei como fazer, é nessa parte

Range("B7").Select
Selection.End(xlDown).Select
ActiveCell.Offset(1, 0).Select

Na célula B7 e B8 vc deixa com cabeçalho (dado qualquer)
A macro vai copiar os arquivos do usuário abrir a base selecionar a célula B7 e ir na ultima preenchida (mesmo que Ctrl+Seta) esse comando ActiveCell.Offset(1, 0).Select vai mais uma célula para baixo e cola o conteúdo copiado!

Se vc não tiver nada ba célula B7 e B8 será selecionado a ultima linha da planilha!

_______________________________________________________________________________________________
Carlos Santos
* Marque o tópico como Resolvido se foi solucionado seu problema.

 
Postado : 23/02/2018 10:18 am
(@marcosuke)
Posts: 72
Trusted Member
Topic starter
 

Boa tarde marcosuke.

Então existe varias maneiras de fazer a exportação.

Sub Exportar()

'       Copia dados para exportar para a Base.
    Range("B8:E100").Select
    Selection.Copy
    
'       Abre o arquivo Base.
    Workbooks.Open Filename:="Z:UserscsantosDocumentsBase.xlsm"
    
'       Selecionando ultima linha.
    Range("B7").Select
    Selection.End(xlDown).Select
    ActiveCell.Offset(1, 0).Select
    
'       Colando dados.
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Application.CutCopyMode = False
    
'       Eliminando duplicidade.
'       "Mesma função em Dados Remover Duplicatas".
    Range("B9:E53").Select
    ActiveSheet.Range("$B$9:$E$53").RemoveDuplicates Columns:=Array(1, 2, 3, 4), _
        Header:=xlNo
    
'       Fechando Arquivo base sem msg de alerta.
    Application.DisplayAlerts = False
    ActiveWorkbook.Save
    ActiveWindow.Close
    
'       Deletando dados que foram exportados.
    Selection.ClearContents
End Sub

Essa macro é simples.

Unica regra que eu ainda não sei como fazer, é nessa parte

Range("B7").Select
Selection.End(xlDown).Select
ActiveCell.Offset(1, 0).Select

Na célula B7 e B8 vc deixa com cabeçalho (dado qualquer)
A macro vai copiar os arquivos do usuário abrir a base selecionar a célula B7 e ir na ultima preenchida (mesmo que Ctrl+Seta) esse comando ActiveCell.Offset(1, 0).Select vai mais uma célula para baixo e cola o conteúdo copiado!

Se vc não tiver nada ba célula B7 e B8 será selecionado a ultima linha da planilha!

Muito obrigado mais uma vez!

Infelizmente na depuração a macro apresenta erro nessa parte:

Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

Já verifiquei se a planilha base está com alguma célula bloqueada mas está tudo certo.

Quanto ao código abaixo, eu entendi pela descrição que ela serve para deletar informações em duplicidade, mas como ela funciona? Qual critério é usado para identificar o que está em duplicidade?
Eliminando duplicidade.
' "Mesma função em Dados Remover Duplicatas".
Range("B9:E53").Select
ActiveSheet.Range("$B$9:$E$53").RemoveDuplicates Columns:=Array(1, 2, 3, 4), _
Header:=xlNo

Sobre o código abaixo, o conteúdo exportado é deletado da planilha do usuário depois de exportado? E se eu excluir esse procedimento, ele não excluirá e na próxima vez que for exportado ficará duplicado na planilha base?

' Deletando dados que foram exportados.
Selection.ClearContents
End Sub

 
Postado : 23/02/2018 12:28 pm
carlosrgs
(@carlosrgs)
Posts: 631
Prominent Member
 

Eu coloquei somente um exemplo de como fazer a exportação.

Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

Depende do que está fazendo o excel pode ter cancelado a área copiada, por isso do erro, observe se após aparece e mensagem de Depurar, se no Excel existe algum conteúdo copiado.

Quanto ao código abaixo, eu entendi pela descrição que ela serve para deletar informações em duplicidade, mas como ela funciona? Qual critério é usado para identificar o que está em duplicidade?
Eliminando duplicidade.
' "Mesma função em Dados Remover Duplicatas".
Range("B9:E53").Select
ActiveSheet.Range("$B$9:$E$53").RemoveDuplicates Columns:=Array(1, 2, 3, 4), _
Header:=xlNo

No exemplo eu copio da coluna B até E
Então com a própria ferramenta do Excel "Dados -> Remover Duplicidade" eu elimino os dados duplicados, considerando todas as 4 colunas
Mas adaptando a rotina, é possivel importar somente dados novos, e informar o usuário quais os dados que não foram exportados por já estarem na Base.

Sobre o código abaixo, o conteúdo exportado é deletado da planilha do usuário depois de exportado? E se eu excluir esse procedimento, ele não excluirá e na próxima vez que for exportado ficará duplicado na planilha base?
Sim, após copiar para a base ele deleta.
Conforme comentei é só um exemplo que postei, no arquivo que fiz para os usuários aqui, eles exportam para a base, e ao final da rotina importa tudo da base para o arquivo do usuário.

Postei com o intuito de dar um norte para vc desenvolver as rotinas!

_______________________________________________________________________________________________
Carlos Santos
* Marque o tópico como Resolvido se foi solucionado seu problema.

 
Postado : 23/02/2018 1:22 pm