none
identificar arquivo somente leitura - VBA RRS feed

  • Discussão Geral

  • Colegas, 

    Estou em um trabalho no VBA que consiste em salvar dados de uma planilha (checklist) para duas outras planilhas base, porém esse processo acontece em arquivo em rede. Nesse caso, os arquivos podem estar sendo usados por outras pessoas o que levaria a macro a abrir-lo como SOMENTE LEITURA, portanto, eu queria entender uma forma de caso alguns dos dois arquivos abrirem em somente leitura abortar toda a macro.

    domingo, 1 de dezembro de 2019 15:06

Todas as Respostas

  • Vinicius2200,

      Por favor, teste a propriedade "ReadOnly" do "Workbook":

    =========================================
    Propriedade Workbook. ReadOnly (Excel)

    If ActiveWorkbook.ReadOnly Then 
       ActiveWorkbook.SaveAs fileName:="NEWFILE.XLS" 
    End If

    https://docs.microsoft.com/pt-br/office/vba/api/excel.workbook.readonly
    =========================================

      Você poderá fazer de outra forma se quiser...
      ... verificando tudo que está em uso no Excel:

    =========================================
    Arquivo Em Uso
    Set excel = GetObject(, "Excel.Application")
    
    For Each pasta In excel.Workbooks
        Debug.Print pasta.Name
    Next pasta
       

    https://forum.scriptbrasil.com.br/topic/91919-arquivo-em-uso/
    =========================================

    []'s,
    Fabio I.

    domingo, 1 de dezembro de 2019 18:05
  • Fábio, 

    Porém meu problema está nesse trecho da macro(justamente a verificação do arquivo). Minha ideia é: caso um dos dois arquivos abertos estejam em modo leitura, eu quero interromper a macro por completo. 

    Do modo como estou fazendo, mesmo que um esteja em modo leitura o outro ainda irá abrir. E eu preciso que os dois não abram, caso um esteja em modo leitura.

    Agradeço a atenção.

    Sub verificar()
    
    Workbook.Open "C:\Users\Pedro\Desktop\TESTE EXCEL\BASE - SOMENTE LEITURA.xlsx"
    If ActiveWorkbook.ReadOnly Then
    MsgBox "erro"
    activeworbook.Close savechanges:=False
    End If
    
    Workbook.Open "C:\Users\Pedro\Desktop\TESTE EXCEL\RECOMENDAÇÕES - SOMENTE LEITURA.xlsx"
    If ActiveWorkbook.ReadOnly Then
    MsgBox "erro"
    activeworbook.Close savechanges:=False
    End If
    
    
    End Sub

    domingo, 1 de dezembro de 2019 20:34
  • Vinicius2200,

       Existem várias maneiras de você resolver isso.

       1º) Você pode criar uma variável booleana para controlar isso:

    Sub verificar()
    Dim BlnVerifica As Boolean
    
    BlnVerifica = True
    
    Workbook.Open "C:\Users\Pedro\Desktop\TESTE EXCEL\BASE - SOMENTE LEITURA.xlsx"
    
    If ActiveWorkbook.ReadOnly Then
       MsgBox "erro"
       activeworbook.Close savechanges:=False
       BlnVerifica = False
    End If
    
    If BlnVerifica Then
    
        Workbook.Open "C:\Users\Pedro\Desktop\TESTE EXCEL\RECOMENDAÇÕES - SOMENTE LEITURA.xlsx"
        
        If ActiveWorkbook.ReadOnly Then
           MsgBox "erro"
           activeworbook.Close savechanges:=False
           BlnVerifica = False
        End If
    
    End If

        2º) Você pode usar um "Exit Sub":

    Sub verificar()
    
    Workbook.Open "C:\Users\Pedro\Desktop\TESTE EXCEL\BASE - SOMENTE LEITURA.xlsx"
    
    If ActiveWorkbook.ReadOnly Then
       MsgBox "erro"
       activeworbook.Close savechanges:=False
       Exit Sub
    End If
        
    If ActiveWorkbook.ReadOnly Then
       MsgBox "erro"
       activeworbook.Close savechanges:=False
       Exit Sub
    End If
    
    End Sub

    =================================================

    VBA - INTERROMPER TOTALMENTE O CODIGO - VBMania

    http://www.vbmania.com.br/index.php?modulo=forum&metodo=abrir&id=377388
    =================================================
    Como sair de um sub em VBA

    http://ptcomputador.com/P/visual-basics-programming/94917.html
    =================================================

       3º) Você pode usar o "On Error GoTo" também:

    Sub verificar()
    On Error GoTo Fora
    
    Workbook.Open "C:\Users\Pedro\Desktop\TESTE EXCEL\BASE - SOMENTE LEITURA.xlsx"
    
    If ActiveWorkbook.ReadOnly Then
       MsgBox "erro"
       activeworbook.Close savechanges:=False
       GoTo Fora
    End If
    
    Workbook.Open "C:\Users\Pedro\Desktop\TESTE EXCEL\RECOMENDAÇÕES - SOMENTE LEITURA.xlsx"
    
    If ActiveWorkbook.ReadOnly Then
       MsgBox "erro"
       activeworbook.Close savechanges:=False
       GoTo Fora
    End If
    
    Fora:
    
    End Sub

    =================================================

    On error GOTO statement in VBA

    https://stackoverflow.com/questions/31986386/on-error-goto-statement-in-vba
    =================================================

    Instrução On Error (Visual Basic)

    https://docs.microsoft.com/pt-br/dotnet/visual-basic/language-reference/statements/on-error-statement
    =================================================



    []'s,
    Fabio I. 

    • Editado Fabio I segunda-feira, 2 de dezembro de 2019 11:41
    segunda-feira, 2 de dezembro de 2019 11:39