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?)"
microsoft-excel
worksheet-function
vba
ExcelNovice
fonte
fonte
Set WS = Activesheet ... WS.Name = oriSheet
.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 serPublic
.Respostas:
Altere sua primeira macro para armazenar
oriSheet
em outra variável no final dela;Então, no seu segundo,
Sub
tenha o seguinte:O motivo pelo qual seu código não funciona no momento é o seguinte: você limpa
oriSheet
nesta 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-quote
no 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.fonte
2
e criar outro e não substituí-lo. Provavelmente você precisa remover / renomear o primeiro e depois mudar o nome paraoriSheet
.