Chamar um formulário a partir de um procedimento Sub

Anônima
2011-12-13T03:02:50+00:00

A idéia é a seguinte. Tenho um código cuja função é atuar sobre um arquivo do Word (2010) para modificá-lo de acordo com certas regras e, depois, usá-lo como comandos de sintax de um pacote estatístico. O processo:

  1. Criar um arquivo .txt, vazio, onde serão incluídos os comandos da sintax.
  2. Este arquivo deve ser salvo em um diretório a ser escolhido usuário, com um nome escolhido pelo usuário e depois aberto para gravação.

Imaginei esta solução:

Chamar um formulario onde há:

  • Uma caixa de texto, para o usuário escrever o nome do arquivo, sem extensão e sem o caminho.
  • Um botão de comando que abre uma caixa de diálogo "salvar como", já com o nome do arquivo inserido, com a extensão .txt.
  • Um label que intitula a caixa de texto.

O código do formulário é o seguinte:

Private Sub UserForm_Initialize()

    Userform13.CAPTION = "Criar arquivo para sintax"

    With Label1

        .CAPTION = "Digite o nome do arquivo"

        .Font.Name = "Calibri"

        .Font.Size = 11

    End With

    With CommandButton1

        .CAPTION = "Selecionar"

        .Font.Name = "Calibri"

        .Font.Size = 11

        .BackStyle = fmBackStyleTransparent

    End With

    With TextBox1

        .Font.Name = "Calibri"

        .Font.Size = 11

        .TextAlign = fmTextAlignLeft

    End With

End Sub

Private Sub CommandButton1_Click()

    Set NFile = TextBox1

    With Dialogs(wdDialogFileSaveAs)

        .Name = NFile

        .Format = (wdFormatText)

        If .Show = -1 Then

            Exit Sub

        End If

    End With

End Sub

No tópico CommandButton1_Click há um problema: quando o botão "Salvar" da DialogSaveAs é acionado e salva o arquivo nomeado, a instrução Exit Sub não é acionada e, consequentemente. não interrompe a execução do procedimento.

O  início do procedimento que chama a UserForm e vai gravar o arquivo de sintax seria o seguinte:

Sub MontaSintaxRecode()

Dim TítuloMb, Inf

Dim Msg

Dim Style As VbMsgBoxStyle

'Conteúdo da MsgBox

Msg = "Para utilizar esta macro, é necessário que a recodificação" & Chr(10) + Chr(13) _

        & "seja feita no programa AtlasTI e que o documento inicial" & Chr(10) + Chr(13) _

        & "tenha sido gerado com a macro SaidaAtlasTI_Code"

TítuloMb = "IMPORTANTE"

Style = vbCritical

Inf = MsgBox(Msg, Style, TítuloMb)

Call UserForm("UserForm13")  'Aqui está o problema: este comando, com ou sem a instrução Call, gera erros de compilação. Com a instrução e o 

                                                           'argumento,  "Sub" ou "Function" não definida, o que ocorre, também se se retirar a instrução e o argumento.

                                                          'Se a chamada for feita apenas com "UserForm13" (sem aspas), o erro de compilação indica "Uso inválido da propriedade".

                                                          'Tentei declarar variáveis em módulo de classe na UserForm, definir tipos de variáveis com ByVal e ByRec, mas não deu certo.

                                                          'Onde está meu erro?

End Sub

Também não consegui, ainda, resolver como chamar de volta o arquivo .txt. O seu nome pode ser "guardado" em uma variável. Mas o caminho completo só é definido pelas escolhas do usuário em With Dialogs(wdDialogFileSaveAs). Como chamar o caminho completo? Tem como atribuir a ele uma variável para uso em outras partes do código? 

Sou novo nisto e tenho pouca, ou nenhum, experiência com programação, a não com as sintax do pacote estatístico que uso para trabalhar. Mas é bem diferente do VBA. Então, alguém pode me ajudar?

Desde já, muito obrigado.

Microsoft 365 e Office | Word | Para uso doméstico | Windows

Pergunta bloqueada. Essa pergunta foi migrada da Comunidade de Suporte da Microsoft. É possível votar se é útil, mas não é possível adicionar comentários ou respostas ou seguir a pergunta.

0 comentários Sem comentários

1 resposta

Classificar por: Mais útil
  1. Anônima
    2014-03-12T03:00:06+00:00

    Call UserForm("UserForm13")  'Aqui está o problema: este comando, com ou sem a instrução Call, gera erros de compilação. Com a instrução e o 

    para chamar um form vc deve proceder assim (ou algo parecido):

    Private Sub CommandButton1_Click()

      UserForm13.Show

    End Sub

    Sem Mais...

    Esta resposta foi útil?

    2 pessoas acharam esta resposta útil.
    0 comentários Sem comentários