Consulte a folha que a entrada do usuário denominada

0

Depois de executar a macro e gerar dados nesta planilha original, solicito ao usuário que nomeie essa planilha original usando o código abaixo.

oriSheet = InputBox("Please Name the Sheet?", vbOKCancel)
If oriSheet = False Or oriSheet = "" Then
MsgBox "Invalid Name"
Exit Sub
Else
ActiveSheet.Name = oriSheet
End If
oriSheet = ""

Então eu corro outra sub, para pegar o oriSheet agora para filtragem.
É possível consultar essa planilha usando a variável?
Porque parece que não chego lá com o erro "subscrito fora do intervalo" no código abaixo.

Set sht = ThisWorkbook.Worksheets("oriSheet")
Set newsht = ThisWorkbook.Worksheets("sheet2")

Tirei as aspas duplas pensando por causa delas, oriSheet não é interpretado, como outra linguagem de programação. Mas ainda não está funcionando.

Achei que poderia ser fácil, mas havia passado horas nisso.
Eu entrei no Google, há um ditado que diz: "Há duas maneiras de se referir à planilha, por índice (mas idk o índice) e por nome (mas idk o nome também?)"

ExcelNovice
fonte
Você precisa definir a referência para a folha antes de renomeá-la, por exemplo Set WS = Activesheet ... WS.Name = oriSheet.
Máximo Juhász
Você deveria tentar isso. Set sht = ThisWorkbook.Worksheets(oriSheet)já que o oriSheet é uma string em si. Claro que você precisa evitar redefini-lo ( oriSheet = " ") no final do outro procedimento e também a variável (e preferencialmente Subs) deve ser Public.
M--

Respostas:

1

Altere sua primeira macro para armazenar oriSheetem outra variável no final dela;

Public oriSheetRecorder As String
oriSheet = InputBox("Please Name the Sheet?", vbOKCancel)
If oriSheet = False Or oriSheet = "" Then
MsgBox "Invalid Name"
Exit Sub
Else
ActiveSheet.Name = oriSheet
On Error Goto Errorhandler
oriSheetRecorder = oriSheet
oriSheet = ""
End If

Errorhandler:
MsgBox "Name of the active sheet is " , ActiveSheet.Name, "It is Invalid Name or an error has happened"
Exit Sub

Então, no seu segundo, Subtenha o seguinte:

Set sht = ThisWorkbook.Worksheets(oriSheetRecorder)
Set newsht = ThisWorkbook.Worksheets("sheet2")

O motivo pelo qual seu código não funciona no momento é o seguinte: você limpa oriSheetnesta linha: oriSheet = ""mais tarde, não é possível consultá-lo. Além disso, você não precisa (não deve) colocar "uma variável. double-quoteno excel é para distinguir entre textos e comandos e variáveis. oriSheeté uma variável que é uma string por sua definição, para que nunca precise "ser identificada como texto.

M--
fonte
Olá @Masoud, obrigado. Percebi que você adicionou algumas linhas no Errorhandler. Em seguida, descobri que, independentemente do nome que eu inserisse, receberia o erro: Nome inválido, mas a planilha com o "nome inválido" ainda será criada sem que seja solicitada outra entrada? Posso também saber, é possível renomear o sheet2 para o oriSheetRecorder como apenas substituí-lo? (porque no Google, vejo que o padrão é criar outra versão dele, nomeie-o automaticamente como "oriSheetRecorder 2"). Ou você gostaria que eu adicionasse isso à minha pergunta original? Obrigado novamente.
ExcelNovice
@ExcelNovice adicione-o à sua pergunta original. Vou pensar nisso, mas como você mencionou, está definido para adicionar 2e criar outro e não substituí-lo. Provavelmente você precisa remover / renomear o primeiro e depois mudar o nome para oriSheet.
M--
Oi @Masoud, eu posso excluir e renomear planilhas por ThisWorkbook.Worksheets (oriSheetRecorder) .Exclua ThisWorkbook.Worksheets ("sheet2"). Name = oriSheetRecorder! obrigado +1! Vejo você por aí
ExcelNovice