Usuário(a):Vinickw/Macros/Gerador de lista de episódios
Esta página é escrita em português brasileiro e, portanto, as instruções de botões a clicar (por exemplo) são dadas com o nome em português brasileiro. Se você utiliza o software na variante portuguesa, há um tooltip na primeira vez que um termo é introduzido que seja diferente entre as duas variante. |
Ocorreu algum erro, está com dúvidas de como usar ou tem alguma sugestão? Por favor, adicione uma mensagem na página de discussão. |
Listas de episódios podem ser bastante chatas de serem criadas, são tantos parâmetros para serem inseridos, e o editor visual não facilita tanto assim. Essa macro cria uma lista de episódios utilizando as predefinições {{Tabela de episódios}}
e {{Lista de episódios}}
a partir de uma tabela Excel.
Como usar macros[editar | editar código-fonte]
Para criar macros você tem duas opções:
- Clique em Arquivo → Opções → Personalizar Faixa de Opções e marque a opção Desenvolvedor. Será habilitado a aba Desenvolvedor, clique nela e então Visual Basic.
- Precione Ctrl + F11, se não funcionar tente Ctrl + Fn + F11.
Nesta área poderá ser criado códigos para a realização automática de tarefas.
Criar pasta de trabalho[editar | editar código-fonte]
Inicialmente, deverá ser criado a pasta de trabalho. Para isso, crie uma nova pasta em branco. Em seguida acesse o painel VBA (ver § Como usar macros) e no canto superior esquerdo clique na setinha que está à direita do botão com a logo do excel () e à esquerda do botão se salvar (ícone de disquete 💾), e selecione a opção Módulo. Será aberto uma nova janela para inserir texto, copie o código abaixo e cole lá, em seguida clique em executar (localizado na mesma barra do botão anterior, poderá também ser apertado F5). Se tudo ocorrer corretamente, será criado quatro planilhas, Lista episódio, Tabela episódio, Saída e Log. As demais planinhas podem ser excluídas tranquilamente. Após rodar esta sub ela não será mais necessária, por isso até sugiro que todo o código seja apagado.
Módulo para criar pasta de trabalho
|
---|
Sub CriarPasta()
Dim Ws As Worksheet
Set Ws = Worksheets.Add(After:=ActiveWorkbook.Worksheets(ActiveWorkbook.Worksheets.Count))
Ws.[_CodeName] = "ListaEpisodio"
Ws.Name = "Lista episódio"
Ws.Cells(1, 1).Value2 = "NúmeroEpisódio"
Ws.Cells(1, 2).Value2 = "NúmeroEpisódio2"
Ws.Cells(1, 3).Value2 = "Título"
Ws.Cells(1, 4).Value2 = "Rtítulo"
Ws.Cells(1, 5).Value2 = "TítuloAlter"
Ws.Cells(1, 6).Value2 = "RTítuloAlter"
Ws.Cells(1, 7).Value2 = "Aux1"
Ws.Cells(1, 8).Value2 = "Dirigido"
Ws.Cells(1, 9).Value2 = "Escrito"
Ws.Cells(1, 10).Value2 = "Aux2"
Ws.Cells(1, 11).Value2 = "Aux3"
Ws.Cells(1, 12).Value2 = "DataTransmissãoOriginal"
Ws.Cells(1, 13).Value2 = "CódigoProd"
Ws.Cells(1, 14).Value2 = "Audiência"
Ws.Cells(1, 15).Value2 = "Aux4"
Ws.Cells(1, 16).Value2 = "Sinopse"
Ws.Columns("L:L").NumberFormat = "dd/mm/yyyy"
Ws.Columns("A:P").EntireColumn.AutoFit
Set Ws = Worksheets.Add(After:=ActiveWorkbook.Worksheets(ActiveWorkbook.Worksheets.Count))
Ws.[_CodeName] = "TabelaEpisodio"
Ws.Name = "Tabela episódio"
Ws.Cells(1, 1).Value2 = "Legenda"
Ws.Cells(2, 1).Value2 = "CorFundo"
Ws.Cells(3, 1).Value2 = "CorLinha"
Ws.Cells(4, 1).Value2 = "LarguraTotal"
Ws.Cells(5, 1).Value2 = "Pais"
Ws.Range("A1:B6").Borders.LineStyle = xlContinuous
Ws.Cells(6, 1).Value2 = "Lançado/Exibido"
Ws.Cells(8, 2).Value2 = "Largura"
Ws.Cells(8, 3).Value2 = "Título"
Ws.Cells(8, 4).Value2 = "Referência"
Ws.Cells(9, 1).Value2 = "NúmeroEpisódio"
Ws.Cells(10, 1).Value2 = "NúmeroEpisódio2"
Ws.Cells(11, 1).Value2 = "Título"
Ws.Cells(12, 1).Value2 = "Aux1"
Ws.Cells(13, 1).Value2 = "Dirigido"
Ws.Cells(14, 1).Value2 = "Escrito"
Ws.Cells(15, 1).Value2 = "Aux2"
Ws.Cells(16, 1).Value2 = "Aux3"
Ws.Cells(17, 1).Value2 = "DataTransmissãoOriginal"
Ws.Cells(18, 1).Value2 = "CódigoProd"
Ws.Cells(19, 1).Value2 = "Audiência"
Ws.Cells(20, 1).Value2 = "Aux4"
Ws.Range("A8:D20").Borders.LineStyle = xlContinuous
Ws.Columns("A:D").EntireColumn.AutoFit
Set Ws = Worksheets.Add(After:=ActiveWorkbook.Worksheets(ActiveWorkbook.Worksheets.Count))
Ws.[_CodeName] = "Saida"
Ws.Name = "Saída"
Ws.Columns("A:A").EntireColumn.Font.Name = "Lucida Console"
Ws.Activate
ActiveWindow.DisplayGridlines = False
Set Ws = Worksheets.Add(After:=ActiveWorkbook.Worksheets(ActiveWorkbook.Worksheets.Count))
Ws.[_CodeName] = "sLog"
Ws.Name = "Log"
Ws.Cells(1, 1).Value2 = "Mensagem"
Ws.Activate
ActiveWindow.DisplayGridlines = False
End Sub
|
Criar macro para gerar lista[editar | editar código-fonte]
Com a pasta de trabalho já criada adequadamente (não realizar o passo anterior fará com que a macro não execute) poderá ser criado um módulo (ou reutilizar o módulo anterior se você tiver apagado tudo) para a macro que gera a lista, para isso é só colar o código abaixo. Sugiro que você adicione "botões" para executar a macro. A forma mais simples é Inserir → Formas e escolher qualquer uma (sugiro retângulo). Insira-as onde achar conveniente e então clique com o botão direito na forma e Atribuir macro... e escolha GerarLista e CopiarTexto (uma forma para cada uma das macros).
Módulo para gerar lista
|
---|
' Macro criada por Vinickw
' Versão 1.0 (2024/05/13)
'
' CC BY-SA 4.0
' Você pode compartilhar e adaptar esta pasta de trabalho e
' seu código desde que você dê o crédito apropriado.
'
' Para mais informações acesse:
' https://pt.wikipedia.org/wiki/User:Vinickw/Macros/Gerador_de_lista_de_episódios
Option Explicit
Global LinhaSaida As Integer
Global SemDia As Boolean
Sub GerarLista()
Saida.Range("A:A").Clear
sLog.Range("A2:A100000").Clear
LinhaSaida = 1
SemDia = False
Dim NumeroEpisodio As Boolean
Dim NumeroEpisodio2 As Boolean
Dim Titulo As Integer
Dim Rtitulo As Boolean
Dim TituloAlter As Boolean
Dim RTituloAlter As Boolean
Dim Aux1 As Boolean
Dim Dirigido As Boolean
Dim Escrito As Boolean
Dim Aux2 As Boolean
Dim Aux3 As Boolean
Dim DataOriginal As Boolean
Dim CodigoProd As Boolean
Dim Audiencia As Boolean
Dim Aux4 As Boolean
Dim Sinopse As Boolean
Dim CorTopo As String
Dim CorLinha As String
Dim x As Byte
Dim ep As Integer
Titulo = ListaEpisodio.Cells(100000, 3).End(xlUp).Row
CorTopo = TabelaEpisodio.Cells(2, 2).Value2
CorLinha = TabelaEpisodio.Cells(3, 2).Value2
NumeroEpisodio = IsUsed(1)
NumeroEpisodio2 = IsUsed(2)
Rtitulo = IsUsed(4)
TituloAlter = IsUsed(5)
RTituloAlter = IsUsed(6)
Aux1 = IsUsed(7)
Dirigido = IsUsed(8)
Escrito = IsUsed(9)
Aux2 = IsUsed(10)
Aux3 = IsUsed(11)
DataOriginal = IsUsed(12)
CodigoProd = IsUsed(13)
Audiencia = IsUsed(14)
Aux4 = IsUsed(15)
Sinopse = IsUsed(16)
x = MsgBox("Sua tabela contém " & Titulo - 1 & " episódio e os seguintes campos:" & Chr(13) & Chr(10) _
& IIf(NumeroEpisodio, "NumeroEpisodio" & Chr(13) & Chr(10), "") _
& IIf(NumeroEpisodio2, "NumeroEpisodio2" & Chr(13) & Chr(10), "") _
& "Titulo" & Chr(13) & Chr(10) _
& IIf(Rtitulo, "Rtitulo" & Chr(13) & Chr(10), "") _
& IIf(TituloAlter, "TituloAlter" & Chr(13) & Chr(10), "") _
& IIf(RTituloAlter, "RTituloAlter" & Chr(13) & Chr(10), "") _
& IIf(Aux1, "Aux1" & Chr(13) & Chr(10), "") _
& IIf(Dirigido, "Dirigido" & Chr(13) & Chr(10), "") _
& IIf(Escrito, "Escrito" & Chr(13) & Chr(10), "") _
& IIf(Aux2, "Aux2" & Chr(13) & Chr(10), "") _
& IIf(Aux3, "Aux3" & Chr(13) & Chr(10), "") _
& IIf(DataOriginal, "DataTransmissãoOriginal" & Chr(13) & Chr(10), "") _
& IIf(CodigoProd, "CodigoProd" & Chr(13) & Chr(10), "") _
& IIf(Audiencia, "Audiencia" & Chr(13) & Chr(10), "") _
& IIf(Aux4, "Aux4" & Chr(13) & Chr(10), "") _
& IIf(Sinopse, "Sinopse" & Chr(13) & Chr(10), "") _
& Chr(13) & Chr(10) & "Confirma?", vbYesNo)
If x = vbNo Then
Exit Sub
End If
If IIf(Aux1, TabelaEpisodio.Cells(12, 3).Value2 = "", False) _
Or IIf(Aux2, TabelaEpisodio.Cells(15, 3).Value2 = "", False) _
Or IIf(Aux3, TabelaEpisodio.Cells(16, 3).Value2 = "", False) _
Or IIf(Aux4, TabelaEpisodio.Cells(20, 3).Value2 = "", False) _
Then
MsgBox "Os campos Aux requerem que o requerem um título." & Chr(13) & Chr(10) _
& "Consulte a documentação da predefinição Tabela de episódios para mais informações."
Exit Sub
End If
For ep = 2 To Titulo
If IsNumeric(ListaEpisodio.Cells(ep, 12).Value2) Then
If Day(ListaEpisodio.Cells(ep, 12).Value2) = 1 Then
SemDia = True
End If
Else
sLog.Cells(100000, 1).End(xlUp).Offset(1, 0).Value2 = "O valor da célula L" & ep & _
"(" & ListaEpisodio.Cells(ep, 12).Value2 & ") não foi reconhecido como data."
End If
Next ep
If SemDia Then
x = MsgBox("Algumas das datas inseridas na coluna data possuem dia igual a 1, deseja suprimir o dia dessas datas, mantendo somente o mês e o ano?" _
& vbCrLf & "(Nem sempre é possível encontrar o dia específico de lançamento, deste modo, pode ser mantido somente o mês e o ano.)", vbYesNo)
If x = vbNo Then
SemDia = False
End If
End If
fPrint "{{Tabela de episódios"
If NumeroEpisodio Then
fPrint "| overall = " & TabelaEpisodio.Cells(9, 2).Value2
fPrint "| overallT = " & TabelaEpisodio.Cells(9, 3).Value2, TabelaEpisodio.Cells(9, 3).Value2 <> ""
fPrint "| overallR = " & TabelaEpisodio.Cells(9, 4).Value2, TabelaEpisodio.Cells(9, 4).Value2 <> ""
End If
If NumeroEpisodio2 Then
fPrint "| season = " & TabelaEpisodio.Cells(10, 2).Value2
fPrint "| seasonT = " & TabelaEpisodio.Cells(10, 3).Value2, TabelaEpisodio.Cells(10, 3).Value2 <> ""
fPrint "| seasonR = " & TabelaEpisodio.Cells(10, 4).Value2, TabelaEpisodio.Cells(10, 4).Value2 <> ""
End If
'Não precisa de if
fPrint "| title = " & TabelaEpisodio.Cells(11, 2).Value2
fPrint "| titleT = " & TabelaEpisodio.Cells(11, 3).Value2, TabelaEpisodio.Cells(11, 3).Value2 <> ""
fPrint "| titleR = " & TabelaEpisodio.Cells(11, 4).Value2, TabelaEpisodio.Cells(11, 4).Value2 <> ""
'End If
If Aux1 Then
fPrint "| aux1 = " & TabelaEpisodio.Cells(12, 2).Value2
fPrint "| aux1T = " & TabelaEpisodio.Cells(12, 3).Value2, TabelaEpisodio.Cells(12, 3).Value2 <> ""
fPrint "| aux1R = " & TabelaEpisodio.Cells(12, 4).Value2, TabelaEpisodio.Cells(12, 4).Value2 <> ""
End If
If Dirigido Then
fPrint "| director = " & TabelaEpisodio.Cells(13, 2).Value2
fPrint "| directorT = " & TabelaEpisodio.Cells(13, 3).Value2, TabelaEpisodio.Cells(13, 3).Value2 <> ""
fPrint "| directorR = " & TabelaEpisodio.Cells(13, 4).Value2, TabelaEpisodio.Cells(13, 4).Value2 <> ""
End If
If Escrito Then
fPrint "| writer = " & TabelaEpisodio.Cells(14, 2).Value2
fPrint "| writerT = " & TabelaEpisodio.Cells(14, 3).Value2, TabelaEpisodio.Cells(14, 3).Value2 <> ""
fPrint "| writerR = " & TabelaEpisodio.Cells(14, 4).Value2, TabelaEpisodio.Cells(14, 4).Value2 <> ""
End If
If Aux2 Then
fPrint "| aux2 = " & TabelaEpisodio.Cells(15, 2).Value2
fPrint "| aux2T = " & TabelaEpisodio.Cells(15, 3).Value2, TabelaEpisodio.Cells(15, 3).Value2 <> ""
fPrint "| aux2R = " & TabelaEpisodio.Cells(15, 4).Value2, TabelaEpisodio.Cells(15, 4).Value2 <> ""
End If
If Aux3 Then
fPrint "| aux3 = " & TabelaEpisodio.Cells(16, 2).Value2
fPrint "| aux3T = " & TabelaEpisodio.Cells(16, 3).Value2, TabelaEpisodio.Cells(16, 3).Value2 <> ""
fPrint "| aux3R = " & TabelaEpisodio.Cells(16, 4).Value2, TabelaEpisodio.Cells(16, 4).Value2 <> ""
End If
If DataOriginal Then
fPrint "| airdate = " & TabelaEpisodio.Cells(17, 2).Value2
fPrint "| airdateT = " & TabelaEpisodio.Cells(17, 3).Value2, TabelaEpisodio.Cells(17, 3).Value2 <> ""
fPrint "| airdateR = " & TabelaEpisodio.Cells(17, 4).Value2, TabelaEpisodio.Cells(17, 4).Value2 <> ""
End If
If CodigoProd Then
fPrint "| prodcode = " & TabelaEpisodio.Cells(18, 2).Value2
fPrint "| prodcodeT = " & TabelaEpisodio.Cells(18, 3).Value2, TabelaEpisodio.Cells(18, 3).Value2 <> ""
fPrint "| prodcodeR = " & TabelaEpisodio.Cells(18, 4).Value2, TabelaEpisodio.Cells(18, 4).Value2 <> ""
End If
If Audiencia Then
fPrint "| viewers = " & TabelaEpisodio.Cells(19, 2).Value2
fPrint "| viewersT = " & TabelaEpisodio.Cells(19, 3).Value2, TabelaEpisodio.Cells(19, 3).Value2 <> ""
fPrint "| viewersR = " & TabelaEpisodio.Cells(19, 4).Value2, TabelaEpisodio.Cells(19, 4).Value2 <> ""
End If
If Aux4 Then
fPrint "| aux4 = " & TabelaEpisodio.Cells(20, 2).Value2
fPrint "| aux4T = " & TabelaEpisodio.Cells(20, 3).Value2, TabelaEpisodio.Cells(20, 3).Value2 <> ""
fPrint "| aux4R = " & TabelaEpisodio.Cells(20, 4).Value2, TabelaEpisodio.Cells(20, 4).Value2 <> ""
End If
fPrint "| caption = " & TabelaEpisodio.Cells(1, 2).Value2, TabelaEpisodio.Cells(1, 2).Value2 <> ""
fPrint "| background = " & CorLinha, CorLinha <> ""
fPrint "| total_width = " & TabelaEpisodio.Cells(4, 2).Value2, TabelaEpisodio.Cells(4, 2).Value2 <> ""
fPrint "| country = " & TabelaEpisodio.Cells(5, 2).Value2, TabelaEpisodio.Cells(5, 2).Value2 <> ""
fPrint "| released = y", TabelaEpisodio.Cells(6, 2).Value2 = "y"
fPrint "| episodes = "
For ep = 2 To Titulo
fPrint "{{Lista de episódio"
fPrint "| CorTopo = " & CorTopo, CorTopo <> ""
fPrint "| CorLinha = " & CorLinha, CorLinha <> ""
fPrint "| NúmeroEpisódio = " & ListaEpisodio.Cells(ep, 1).Value2, NumeroEpisodio
fPrint "| NúmeroEpisódio2 = " & ListaEpisodio.Cells(ep, 2).Value2, NumeroEpisodio2
fPrint "| Título = " & ListaEpisodio.Cells(ep, 3).Value2
fPrint "| RTítulo = " & ListaEpisodio.Cells(ep, 4).Value2, Rtitulo
fPrint "| TítuloAlter = " & ListaEpisodio.Cells(ep, 5).Value2, TituloAlter
fPrint "| RTítuloAlter = " & ListaEpisodio.Cells(ep, 6).Value2, RTituloAlter
fPrint "| Aux1 = " & ListaEpisodio.Cells(ep, 7).Value2, Aux1
fPrint "| Dirigido = " & ListaEpisodio.Cells(ep, 8).Value2, Dirigido
fPrint "| Escrito = " & ListaEpisodio.Cells(ep, 9).Value2, Escrito
fPrint "| Aux2 = " & ListaEpisodio.Cells(ep, 10).Value2, Aux2
fPrint "| Aux3 = " & ListaEpisodio.Cells(ep, 11).Value2, Aux3
fPrint "| DataTransmissãoOriginal = " & ConverteData(ListaEpisodio.Cells(ep, 12).Value2), DataOriginal
fPrint "| CódigoProd = " & ListaEpisodio.Cells(ep, 13).Value2, CodigoProd
fPrint "| Audiência = " & ListaEpisodio.Cells(ep, 14).Value2, Audiencia
fPrint "| Aux4 = " & ListaEpisodio.Cells(ep, 15).Value2, Aux4
fPrint "| Sinopse = ", Sinopse
fPrint ListaEpisodio.Cells(ep, 16).Value2, ListaEpisodio.Cells(ep, 16).Value2 <> ""
fPrint "}}"
Next ep
fPrint "}}"
MsgBox "Concluído"
End Sub
Function ConverteData(dt As String)
Dim meses
meses = Array("Janeiro", "Fevereiro", "Março", "Abril", "Maio", "Junho", "Julho", "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro")
If IsNumeric(dt) Then
ConverteData = IIf(SemDia And Day(dt) = 1, meses(Month(dt) - 1), Day(dt) & " de " & LCase(meses(Month(dt) - 1))) & " de " & Year(dt)
Else
ConverteData = dt
End If
End Function
Function IsUsed(vCol As Integer) As Boolean
IsUsed = ListaEpisodio.Cells(100000, vCol).End(xlUp).Row <> 1
End Function
Sub fPrint(Texto As String, Optional Condicao As Boolean = True)
If Condicao Then
Saida.Cells(LinhaSaida, 1).Value2 = "'" & Texto
LinhaSaida = LinhaSaida + 1
End If
End Sub
Sub CopiarTexto()
Saida.Range("A1:A" & Cells(1000000, 1).End(xlUp).Row).Select
Selection.Copy
End Sub
|
Como gerar a lista[editar | editar código-fonte]
Com a pasta de trabalho já configurada é bastante fácil de gerar a lista. A primeira planilha que sugiro preencher é a Lista episódio, essa seria referente às entradas que seriam inseridas em {{Lista de episódios}}
, então recomendo que leia a documentação para saber preencher adequadamente. Por exemplo, para geração de Lista de episódios de Oreimo foi preenchido da seguinte maneira para as duas primeiras entradas:
NúmeroEpisódio | ··· | Título | ··· | TítuloAlter | ··· | Aux1 | ··· | DataTransmissãoOriginal | ··· |
---|---|---|---|---|---|---|---|---|---|
1 | ··· | Eu não Posso me Apaixonar pela Minha Irmãzinha | ··· | {{japonês|Ore ga Imōto to Koi o Suru Wake ga Nai|俺が妹と恋をするわけがない}} | ··· | {{Nihongo|"Imōto, Plea~se!"|妹プリ〜ズ!|Imōto Purīzu!}} por [[Ayana Taketatsu]] | ··· | 3/10/2010 | ··· |
2 | ··· | Eu não Posso Sair com Minha Irmãzinha na Vida Real | ··· | {{japonês|Ore ga Imōto to Ofu Kai ni Iku Wake ga Nai|俺が妹とオフ会に行くわけがない}} | ··· | "Shine!" por Ayana Taketatsu | ··· | 10/10/2010 | ··· |
As colunas podem ser redimensionadas ou ocultas sem nenhum problema, no entanto, jamais elimine colunas, isso fará a macro se perder. A única coluna necessária de ser preenchida é Título.
Após isso pode ser preenchido Tabela episódio, referente à predefinição {{Tabela de episódios}}
, essa etapa pode não ser necessária, pois a macro é esperta suficiente para preencer a predefinição adequadamente. Porém às vezes pode ser necessário adicionar referencias ou alterar o rótulo. No mesmo exemplo anterior foi preenchido da seguinte maneira
··· | ··· |
CorLinha | 2020C9 |
··· | ··· |
Largura | Título | Referência | |
---|---|---|---|
NúmeroEpisódio | 5 | ||
··· | ··· | ··· | ··· |
Título | 50 | {{nre|name=Crunchyroll}} | |
Aux | Tema de encerramento | ||
··· | ··· | ··· | ··· |
DataTransmissãoOriginal | 15 | ||
··· | ··· | ··· | ··· |
Note que é obrigatório haver um Título para os parâmetros aux, se eles forem utilizados.
Após isso, poderá ser executado a macro GerarLista (ver § Criar macro para gerar lista). Se houver algum erro será exibido uma caixa de mensagem avisando sobre o erro e a macro será abortada, exceto se uma data não for reconhecida, neste caso a macro não converterá a data por extenso, ela apenas será inserida sem modificação e haverá um aviso na planilha Log. Caso tudo ocorra como esperado, o código será gerado em Saída. Poderá ser selecionado todo o código e então copiado, ou apenas execurat a macro CopiarTexto para facilitar (note que o texto do código só estará na coluna A).
Atribuição[editar | editar código-fonte]
Se for utilizar esta macro, por favor, dê os créditos no sumário de edição. Um exemplo de de atribuição é Lista de episódios gerada utilizando [[User:Vinickw/Macros/Gerador de lista de episódios|macro]]
.