Inquiridor
identificar arquivo somente leitura - VBA

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.
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 UsoSet 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. -
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
-
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
Instrução On Error (Visual Basic)
https://stackoverflow.com/questions/31986386/on-error-goto-statement-in-vba
=================================================
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