AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / coding / Perguntas / 79146192
Accepted
Forward Ed
Forward Ed
Asked: 2024-11-01 04:02:01 +0800 CST2024-11-01 04:02:01 +0800 CST 2024-11-01 04:02:01 +0800 CST

Como passar informações de um formulário para um sub

  • 772

Essa pergunta parece corresponder exatamente ao que estou procurando em termos de declaração de uma variável que pode ser chamada e retém informações de qualquer lugar.

Tenho um userform que fornece um número de projeto e um caminho de arquivo como string e tenho outro como booleano para determinar se o botão OK ou CANCELAR foi selecionado e como proceder quando o processo retorna ao sub. Da pesquisa que estava fazendo, parece indicar que a maneira mais fácil de fazer isso é por meio de algo chamado variável global. Embora essa possa ser a maneira mais fácil, é a maneira correta?

Tentei colocar minha declaração de variável no topo da folha de código antes do primeiro sub/fun na Sheet3, onde está a maior parte do meu código e onde está o código de clique do botão para iniciar o formulário do usuário. Também tentei colocá-lo no topo do código em ThisWorkBook. E também tentei colocá-lo no topo da página de código para o formulário do usuário associado.

Eu só os declaro em um lugar. Eu não os declaro em vários lugares ao mesmo tempo.

Quando declaro na Planilha3 recebo um erro em um sub colocado no código do userform

insira a descrição da imagem aqui

Código associado:

Private Sub OKBtn_Click()
    
    strPPTFilepath = PPTPath.text
    strProjectNumber = ProjectNoTextBox.text
    bCancelled = False
    
End Sub

Quando declaro em ThisWorkBook recebo:

insira a descrição da imagem aqui

E o código que causa o erro está localizado na Planilha3 e é o seguinte:

Private Sub LoadPPT_Click()

Dim frm As PPT_Picker_Form
Dim wbPPT As Workbook
Dim wsPPT As Worksheet
Dim rngTopLeft As Range
Dim lngLastUsedRow As Long
Dim lngLastCo As Long

'Public strPPTFilepath As String
'Public strProjectNumber As String
    
    Set frm = UserForms.Add(PPT_Picker_Form.Name)
    frm.ListData = ThisWorkbook.Worksheets("Project Numbers").ListObjects("Project_Number_List").DataBodyRange
    
    frm.show
    
    Unload frm
    
    If bCancelled Then '<----this is the undeclared variable
        Exit Sub
    End If
    
    'Define PPT Table
        
    Set wbPPT = Workbooks.Add(strPPTFilepath)
    Set wsPPT = wbPPT.Worksheets("Fee Estimate")
    
    'Find top left corner
    With wsPPT.Cells
        Set rngTopLeft = .Find("WBS Code", LookIn:=xlValues)
        
        If rngTopLeft Is Nothing Then
            'nothing found
            'add a manual cell picker routine
          
        End If
    End With
    'Find last row
    'find Right edge
    
   ' strProjectNumber

End Sub

Quando declaro isso na área de código do formulário de usuário, recebo o mesmo erro acima no mesmo local.

Pergunta

Qual é a maneira correta de passar informações de um formulário para um sub na planilha3?

Atualizar

Puta merda, não acredito que esqueci de mostrar o código para declarar minhas variáveis, então aqui está:

'set it so that all subs and functions require variables to be dimensioned
Option Explicit

'variable available across all modules?
Public strPPTFilepath As String
Public strProjectNumber As String
Public bCancelled As Boolean
vba
  • 2 2 respostas
  • 52 Views

2 respostas

  • Voted
  1. Tim Williams
    2024-11-01T07:04:48+08:002024-11-01T07:04:48+08:00

    Você também pode declarar uma variável pública no topo do módulo de formulário:

    Public bCancelled As Boolean

    Isso pode ser definido pelo código no formulário do usuário e lido pelo código de chamada:

    Dim frm As PPT_Picker_Form, wasCancelled As Boolean
    '...
    '...
    Set frm = New PPT_Picker_Form
    frm.Show
    wasCancelled = frm.bCancelled 'read the value from the form
    Unload frm                    '...before unloading it
    '...
    '...
    

    Isso evita a criação de uma variável global em nível de projeto.

    • 2
  2. Best Answer
    taller
    2024-11-01T04:53:36+08:002024-11-01T04:53:36+08:00

    Você pode usar uma variável pública para que o script possa acessá-la tanto do módulo UserForm, ThisWorkbookquanto do módulo worksheet. As variáveis ​​públicas devem ser declaradas em um módulo padrão em vez de em outros módulos.

    No editor VBA (VBE) Insert -> Module, adicione a linha abaixo na Codejanela.

    Option Explicit
    
    'variable available across all modules?
    Public strPPTFilepath As String
    Public strProjectNumber As String
    Public bCancelled As Boolean
    

    Documentação da Microsoft:

    Variáveis ​​públicas podem ser usadas em quaisquer procedimentos no projeto. Se uma variável pública for declarada em um módulo padrão ou em um módulo de classe, ela também pode ser usada em quaisquer projetos que façam referência ao projeto onde a variável pública é declarada. [De: Declarando variáveis ​​]

    • 1

relate perguntas

  • Pesquise e formate texto entre parênteses

  • Atribuindo formas a um grupo no PowerPoint usando VBA

  • Word VBA, mova o cursor para o início do próximo número em uma lista numerada

  • Execute uma regra do Outlook para cada conta usando macro vba

  • Extrair arquivos de um objeto OLE do Access

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Vue 3: Erro na criação "Identificador esperado, mas encontrado 'import'" [duplicado]

    • 1 respostas
  • Marko Smith

    Por que esse código Java simples e pequeno roda 30x mais rápido em todas as JVMs Graal, mas não em nenhuma JVM Oracle?

    • 1 respostas
  • Marko Smith

    Qual é o propósito de `enum class` com um tipo subjacente especificado, mas sem enumeradores?

    • 1 respostas
  • Marko Smith

    Como faço para corrigir um erro MODULE_NOT_FOUND para um módulo que não importei manualmente?

    • 6 respostas
  • Marko Smith

    `(expression, lvalue) = rvalue` é uma atribuição válida em C ou C++? Por que alguns compiladores aceitam/rejeitam isso?

    • 3 respostas
  • Marko Smith

    Quando devo usar um std::inplace_vector em vez de um std::vector?

    • 3 respostas
  • Marko Smith

    Um programa vazio que não faz nada em C++ precisa de um heap de 204 KB, mas não em C

    • 1 respostas
  • Marko Smith

    PowerBI atualmente quebrado com BigQuery: problema de driver Simba com atualização do Windows

    • 2 respostas
  • Marko Smith

    AdMob: MobileAds.initialize() - "java.lang.Integer não pode ser convertido em java.lang.String" para alguns dispositivos

    • 1 respostas
  • Marko Smith

    Estou tentando fazer o jogo pacman usando apenas o módulo Turtle Random e Math

    • 1 respostas
  • Martin Hope
    Aleksandr Dubinsky Por que a correspondência de padrões com o switch no InetAddress falha com 'não cobre todos os valores de entrada possíveis'? 2024-12-23 06:56:21 +0800 CST
  • Martin Hope
    Phillip Borge Por que esse código Java simples e pequeno roda 30x mais rápido em todas as JVMs Graal, mas não em nenhuma JVM Oracle? 2024-12-12 20:46:46 +0800 CST
  • Martin Hope
    Oodini Qual é o propósito de `enum class` com um tipo subjacente especificado, mas sem enumeradores? 2024-12-12 06:27:11 +0800 CST
  • Martin Hope
    sleeptightAnsiC `(expression, lvalue) = rvalue` é uma atribuição válida em C ou C++? Por que alguns compiladores aceitam/rejeitam isso? 2024-11-09 07:18:53 +0800 CST
  • Martin Hope
    The Mad Gamer Quando devo usar um std::inplace_vector em vez de um std::vector? 2024-10-29 23:01:00 +0800 CST
  • Martin Hope
    Chad Feller O ponto e vírgula agora é opcional em condicionais bash com [[ .. ]] na versão 5.2? 2024-10-21 05:50:33 +0800 CST
  • Martin Hope
    Wrench Por que um traço duplo (--) faz com que esta cláusula MariaDB seja avaliada como verdadeira? 2024-05-05 13:37:20 +0800 CST
  • Martin Hope
    Waket Zheng Por que `dict(id=1, **{'id': 2})` às vezes gera `KeyError: 'id'` em vez de um TypeError? 2024-05-04 14:19:19 +0800 CST
  • Martin Hope
    user924 AdMob: MobileAds.initialize() - "java.lang.Integer não pode ser convertido em java.lang.String" para alguns dispositivos 2024-03-20 03:12:31 +0800 CST
  • Martin Hope
    MarkB Por que o GCC gera código que executa condicionalmente uma implementação SIMD? 2024-02-17 06:17:14 +0800 CST

Hot tag

python javascript c++ c# java typescript sql reactjs html

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve