Exemplo da diretiva #Const

Este exemplo usa a diretiva #Const para declarar constante de compilador condicional para uso em construções #If...#Else...#End If.

#Const DebugVersion = 1	' Avaliará verdadeiro no bloco #If.


Exemplo de #If...Then...#Else
Exemplo da Diretiva #If...Then...#Else

Este exemplo faz referência a constante de compilador condicional em uma construção #If...Then...#Else para determinar se certas instruções serão compiladas.

' Se Mac avalia como verdadeiro, execute as instruções que se seguem a #If também o fazem.

#If Mac Then

'. Insira aqui exclusivamente instruções Mac.

'.

'.

' Caso contrário, se for um programa do Windows de 32 bits, faça o seguinte:

#ElseIf Win32 Then

'. Insira aqui exclusivamente instruções do Windows de 32 bits.

'.

'.

' Caso contrário, se não for nenhum desses, faça o seguinte:

#Else

'. Insira aqui instruções de outra plataforma.

'.

'.

#End If


Diretiva #Const

Usada para definir constante de compilador condicional para o Visual Basic.

Sintaxe

#Const constname = expression

A sintaxe da diretiva de compilador #Const tem as seguintes partes:

Parte	Descrição
constname	Obrigatória; Variant (String). Nome da constante;segue as convenções de nomenclatura padrão da variável.
expression	Obrigatória. Literal, outra constante condicional do compilador ou qualquer combinação que inclua algum ou todos os operadores aritméticos ou lógicos, exceto Is.
Comentários

As constante de compilador condicional são sempre Private para o módulo em que aparecem. Não é possível criar constantes do compilador Public usando a diretiva #Const. As constantes do compilador Public só podem ser criadas na interface do usuário.

Somente constante de compilador condicional e literais podem ser usados em expression. O uso de uma constante padrão definida com Const ou de uma constante não definida causará um erro. Por outro lado, as constantes definidas com a palavra-chave #Const podem ser usadas somente para compilação condicional.

As constante de compilador condicional são sempre avaliadas a nível de módulo, independentemente da sua posição no código.


Diretiva #If...Then...#Else

Compila condicionalmente blocos selecionados do código do Visual Basic.

Sintaxe

#If expression Then

statements

[#ElseIf expression-n Then

[elseifstatements]]

[#Else

[elsestatements]]

#End If

A sintaxe da diretiva #If...Then...#Else tem as seguintes partes:

Parte	Descrição
Expression	Obrigatória. Qualquer expressão, consistindo exclusivamente em uma ou mais constante de compilador condicional, literais e operadores que avalia como True ou False.
Statements	Obrigatória. Linhas de programa ou diretivas de compilador do Visual Basic que são avaliadas se a expressão associada for True.
Expression-n	Opcional. Qualquer expressão, consistindo exclusivamente em uma ou mais constante de compilador condicional, literais e operadores que avalia como True ou False.
Elseifstatements	Opcional. Uma ou mais linhas de programa ou diretivas de compilador que são avaliadas se expression-n for True.
Elsestatements	Opcional. Uma ou mais linhas de programa ou diretivas de compilador que são avaliadas se nenhuma expression ou expression-n anterior for True.
Comentários

O comportamento da diretiva #If...Then...#Else é igual ao da instrução If...Then...Else, exceto pelo fato de que não há um formulário de linha única para as diretivas #If, #Else, #ElseIf e #End If; isto é, nenhum outro código pode aparecer na mesma linha que qualquer uma das diretivas. Normalmente a compilação condicional é usada para compilar o mesmo programa para plataformas diferentes. Ela também é usada para evitar que o código de depuração apareça em um arquivo executável. O código excluído durante a compilação condicional é omitido completamente do arquivo executável final e, desta forma, ele não afeta o tamanho ou desempenho.

Independentemente do resultado de qualquer avaliação, todas as expressões são avaliadas. Portanto, todas as constantes usadas em expressões devem ser definidas — qualquer constante não definida é avaliada como Empty.

Observação   A instrução Option Compare não afeta expressões em instruções #If e #ElseIf. Expressões em uma diretiva de compilador condicional são sempre avaliadas com Option Compare Text.


Constantes do Visual Basic

O Visual Basic for Applications define constantes  para simplificar sua programação. As constantes a seguir podem ser usadas em qualquer parte do seu código no lugar dos valores reais:

Constantes Calendar

Constantes CallType

Constantes Color

Constantes Comparison

Constantes Compiler

Constantes Date

Constantes Date Format

Constantes Dir, GetAttr e SetAttr

Constantes DriveType

Constantes File Attribute

Constantes File Input/Output

Constantes Form

Constantes IMEStatus

Constantes Keycode

Constantes Miscellaneous

Constantes MsgBox

Constantes QueryClose

Constantes Shell

Constantes SpecialFolder

Constantes StrConv

Constantes System Color

Constantes Tristate

Constantes VarType

Constantes Visual Basic


Constantes QueryClose

As seguintes constantes podem ser usadas em qualquer parte do seu código no lugar dos valores reais:

Constante	Valor	Descrição
VbFormControlMenu	0	O usuário escolheu o comando Fechar a partir do menu Controle no formulário.
VbFormCode	1	A instrução Unload é invocada a partir do código.
VbAppWindows	2	A sessão do ambiente operacional Microsoft Windows atual está terminando.
VbAppTaskManager	3	O Gerenciador de tarefas do Windows está fechando o aplicativo.


Constantes Calendar

As seguintes constantes podem ser usadas em qualquer parte do seu código no lugar dos valores reais:

Constante	Valor	Descrição
VbCalGreg	0	Indica que será usado o calendário Gregoriano.
VbCalHijri	1	Indica que será usado o calendário Hijri.


Constantes Compiler

O Visual Basic for Applications define constantes para uso exclusivo com a diretiva #If...Then...#Else. Estas constantes são funcionalmente equivalentes a constantes definidas com a diretiva #If...Then...#Else, com a exceção de que são globais no escopo; isto é, elas se aplicam a qualquer parte de um projeto.

Em plataformas de desenvolvimento de 16 bits, as constantes do compilador são definidas como a seguir:

Constante	Valor	Descrição
Win16	True	Indica que o ambiente de desenvolvimento é de 16 bits.
Win32	False	Indica que o ambiente de desenvolvimento não é de 32 bits.
Em plataformas de desenvolvimento de 32 bits, as constantes do compilador são definidas como a seguir:

Constante	Valor	Descrição
Vba6	True	Indica que o ambiente de desenvolvimento é o Visual Basic for Applications, versão 6.0.
Vba6	False	Indica que o ambiente de desenvolvimento não é o Visual Basic for Applications, versão 6.0.
Win16	False	Indica que o ambiente de desenvolvimento não é de 16 bits.
Win32	True	Indica que o ambiente de desenvolvimento é de 32 bits.
Mac	False	Indica que o ambiente de desenvolvimento não é Macintosh.
Win16	False	Indica que o ambiente de desenvolvimento não é de 16 bits.
Win32	False	Indica que o ambiente de desenvolvimento é Windows de 32 bits.
Mac	True	Indica que o ambiente de desenvolvimento é Macintosh.
Observação   Estas constantes são fornecidas pelo Visual Basic, portanto, você não pode definir suas próprias constantes com estes mesmos nomes em qualquer nível.


Constantes Date

As seguintes constantes podem ser usadas em qualquer parte do seu código no lugar dos valores reais:

Valores de argumentos

O argumento firstdayofweek tem os seguintes valores:

Constante	Valor	Descrição
VbUseSystem	0	Use a configuração NLS API.
VbSunday	1	Domingo (padrão)
VbMonday	2	Segunda-feira
VbTuesday	3	Terça-feira
VbWednesday	4	Quarta-feira
VbThursday	5	Quinta-feira
VbFriday	6	Sexta-feira
VbSaturday	7	Sábado
O argumento firstdayofyear tem os seguintes valores:

Constante	Valor	Descrição
VbUseSystem	0	Use a configuração NLS API.
VbUseSystem DayOfWeek	0	Use o dia da semana especificado nas configurações do seu sistema como o primeiro dia da semana.
VbFirstJan1	1	Inicie com a semana na qual ocorre o dia 1  de janeiro (padrão).
VbFirstFourDays	2	Inicie com a primeira semana que tem pelo menos quatro dias no ano novo.
VbFirstFullWeek	3	Inicie com a primeira semana completa do ano.
Valores retornados

Constante	Valor	Descrição
VbSunday	1	Domingo
VbMonday	2	Segunda-feira
VbTuesday	3	Terça-feira
VbWednesday	4	Quarta-feira
VbThursday	5	Quinta-feira
VbFriday	6	Sexta-feira
VbSaturday	7	Sábado


Constantes Dir, GetAttr e SetAttr

As seguintes constantes podem ser usadas em qualquer parte do seu código no lugar dos valores reais:

Constante	Valor	Descrição
VbNormal	0	Normal (padrão para Dir e SetAttr)
VbReadOnly	1	Somente leitura
VbHidden	2	Oculto
VbSystem	4	Arquivo de sistema
VbVolume	8	Rótulo do volume
VbDirectory	16	Diretório ou pasta
VbArchive	32	O arquivo foi alterado desde o último backup
VbAlias	64	No Macintosh, o identificador é um alias.
Somente VbNormal, vbReadOnly, vbHidden e vbAlias estão disponíveis no Macintosh.


Constantes IMEStatus

As seguintes constantes podem ser usadas em qualquer parte do seu código no lugar dos valores reais.

As constantes para a localidade japonesa são:

Constante	Valor	Descrição
VbIMEModeNoControl	0	Não controla o IME (padrão)
VbIMEModeOn	1	IME ativado
VbIMEModeOff	2	IME desabilitado
VbIMEModeDisable	3	IME desabilitado
VbIMEModeHiragana	4	Modo Hiragana de largura total
VbIMEModeKatakana	5	Modo Katakana de largura total
VbIMEModeKatakanaHalf	6	Modo Katakana de semi-largura
VbIMEModeAlphaFull	7	Modo Alfanumérico de largura total
VbIMEModeAlpha	8	Modo Alfanumérico de semi-largura
Os valores de constantes para a localidade coreana são:

Constante	Valor	Descrição
VbIMEModeNoControl	0	Não controla o IME (padrão)
VbIMEModeAlphaFull	7	Modo Alfanumérico de largura total
VbIMEModeAlpha	8	Modo Alfanumérico de semi-largura
VbIMEModeHangulFull	9	Modo Hangul de largura total
VbIMEModeHangul	10	Modo Hangul de semi-largura
Os valores de constantes para a localidade chinesa são:

Constante	Valor	Descrição
VbIMEModeNoControl	0	Não controla o IME (padrão)
VbIMEModeOn	1	IME ativado
VbIMEModeOff	2	IME desabilitado


Constantes Comparison

As seguintes constantes são definidas na biblioteca de tipos do Visual Basic for Applications e podem ser usadas em qualquer parte do seu código no lugar dos valores reais:

Constante	Valor	Descrição
VbUseCompareOption	-1	Executa uma comparação usando a configuração da instrução Option Compare.
VbBinaryCompare	0	Executa uma comparação binária.
VbTextCompare	1	Executa uma comparação textual.
VbDatabaseCompare	2	Para o Microsoft Access (somente Windows), executa uma comparação baseada nas informações contidas no seu banco de dados.


Constantes Miscellaneous

As seguintes constantes são definidas na biblioteca de tipos do Visual Basic for Applications e podem ser usadas em qualquer parte do seu código no lugar dos valores reais:

Constante	Equivalente	Descrição
VbCrLf	Chr(13) + Chr(10)	Combinação de retorno de carro–alimentação de linha
VbCr	Chr(13)	Caractere de retorno de carro
VbLf	Chr(10)	Caractere de alimentação de linha
vbNewLine	Chr(13) + Chr(10)  ou, no Macintosh, Chr(13)	Caractere de nova linha específico da plataforma; qualquer que seja apropriado para a plataforma atual
vbNullChar	Chr(0)	Caractere com valor 0
vbNullString	Seqüência com valor 0	Diferente de uma seqüência de comprimento zero (""); usada para chamar procedimentos externos
vbObjectError	-2147221504	Números de erro definidos pelo usuário devem ser maiores que este valor. Por exemplo: Err.Raise Number = vbObjectError + 1000
vbTab	Chr(9)	Caractere de tabulação
vbBack	Chr(8)	Caractere Backspace
vbFormFeed	Chr(12)	Inútil no Microsoft Windows ou no Macintosh
vbVerticalTab	Chr(11)	Inútil no Microsoft Windows ou no Macintosh


Constantes MsgBox

As seguintes constantes podem ser usadas em qualquer parte do seu código no lugar dos valores reais:

Argumentos MsgBox

Constante	Valor	Descrição
VbOKOnly	0	Somente botão OK (padrão)
VbOKCancel	1	Botões OK e Cancelar
VbAbortRetryIgnore	2	Botões Abortar, Repetir e Ignorar
VbYesNoCancel	3	Botões Sim, Não e Cancelar
VbYesNo	4	Botões Sim e Não
VbRetryCancel	5	Botões Repetir e Cancelar
VbCritical	16	Mensagem crítica
VbQuestion	32	Consulta de aviso
VbExclamation	48	Mensagem de aviso
VbInformation	64	Mensagem informativa
VbDefaultButton1	0	O primeiro botão é padrão (padrão)
VbDefaultButton2	256	O segundo botão é padrão
VbDefaultButton3	512	O terceiro botão é padrão
VbDefaultButton4	768	O quarto botão é padrão
VbApplicationModal	0	Caixa de mensagens da janela restrita do aplicativo (padrão)
VbSystemModal	4096	Caixa de mensagens da janela restrita de sistema
VbMsgBoxHelpButton	16384	Adiciona o botão ‘Ajuda’ à caixa de mensagens
VbMsgBoxSetForeground	65536	Especifica a janela da caixa de mensagens como a janela de primeiro plano
VbMsgBoxRight	524288	O texto é alinhado à direita
VbMsgBoxRtlReading	1048576	Especifica que o texto deve aparecer como leitura da direita para a esquerda em sistemas hebraico e árabe
Valores retornados MsgBox

Constante	Valor	Descrição
VbOK	1	Botão OK pressionado
VbCancel	2	Botão Cancelar pressionado
VbAbort	3	Botão Abortar pressionado
VbRetry	4	Botão Repetir pressionado
VbIgnore	5	Botão Ignorar pressionado
VbYes	6	Botão Sim pressionado
VbNo	7	Botão Não pressionado


Constantes Shell

As seguintes constantes podem ser usadas em qualquer parte do seu código no lugar dos valores reais:

Constante	Valor	Descrição
VbHide	0	A janela fica oculta e o foco é passado para a janela oculta.
VbNormalFocus	1	A janela tem foco e é restaurada para seu tamanho e posição originais.
VbMinimizedFocus	2	A janela é exibida como um ícone com foco.
VbMaximizedFocus	3	A janela é maximizada com foco.
vbNormalNoFocus	4	A janela é restaurada para seu tamanho e posição mais recentes. A janela atualmente ativa permanece ativa.
vbMinimizedNoFocus	6	A janela é exibida como um ícone. A janela atualmente ativa permanece ativa.
No Macintosh, vbNormalFocus, vbMinimizedFocus e vbMaximizedFocus colocam o aplicativo no primeiro plano; vbHide, vbNoFocus, vbMinimizedFocus colocam o aplicativo no segundo plano.


Constantes StrConv

As seguintes constantes podem ser usadas em qualquer parte do seu código no lugar dos valores reais:

Constante	Valor	Descrição
vbUpperCase	1	Converte a seqüência em caracteres maiúsculos.
vbLowerCase	2	Converte a seqüência em caracteres minúsculos.
vbProperCase	3	Converte a primeira letra de cada palavra na seqüência em letra maiúscula.
vbWide	4	Converte os caracteres estreitos (byte único) na seqüência em caracteres largos (byte duplo). Aplica-se a localidades do Extremo Oriente.
vbNarrow	8	Converte os caracteres largos (byte duplo) na seqüência em caracteres estreitos (byte único). Aplica-se a localidades do Extremo Oriente.
vbKatakana	16	Converte os caracteres Hiragana na seqüência em caracteres Katakana. Aplica-se somente ao Japão.
vbHiragana	32	Converte os caracteres Katakana na seqüência em caracteres Hiragana. Aplica-se somente ao Japão.
vbUnicode	64	Converte a seqüência em Unicode, usando a página de código padrão do sistema. (Não disponível no Macintosh.)
vbFromUnicode	128	Converte a seqüência de Unicode para a página de código padrão do sistema. (Não disponível no Macintosh.)


Constantes VarType

As seguintes constantes podem ser usadas em qualquer parte do seu código no lugar dos valores reais:

Constante	Valor	Descrição
VbEmpty	0	Não inicializada (padrão)
VbNull	1	Contém dados inválidos
VbInteger	2	Integer
VbLong	3	Número inteiro longo
VbSingle	4	Número de ponto flutuante de precisão simples
VbDouble	5	Número de ponto flutuante de dupla precisão
VbCurrency	6	Currency
VbDate	7	Date
VbString	8	String
VbObject	9	Objeto
VbError	10	Erro
VbBoolean	11	Boolean
VbVariant	12	Variant (usada somente para matrizes de variantes)
vbDataObject	13	Objeto de acesso de dados
vbDecimal	14	Decimal
vbByte	17	Byte
vbUserDefinedType	36	Variantes que contêm tipos definidos pelo usuário
vbArray	8192	Matriz


Constantes Color

As seguintes constantes podem ser usadas em qualquer parte do seu código no lugar dos valores reais:

Constante	Valor	Descrição
vbBlack	0x0	Preto
vbRed	0xFF	Vermelho
vbGreen	0xFF00	Verde
vbYellow	0xFFFF	Amarelo
vbBlue	0xFF0000	Azul
vbMagenta	0xFF00FF	Magenta
vbCyan	0xFFFF00	Ciano
vbWhite	0xFFFFFF	Branco


Constantes Keycode

As seguintes constantes podem ser usadas em qualquer parte do seu código no lugar dos valores reais:

Constante	Valor	Descrição
VbKeyLButton	0x1	Botão esquerdo do mouse
VbKeyRButton	0x2	Botão direito do mouse
vbKeyCancel	0x3	Tecla CANCEL
vbKeyMButton	0x4	Botão central do mouse
vbKeyBack	0x8	Tecla BACKSPACE
vbKeyTab	0x9	Tecla TAB
vbKeyClear	0xC	Tecla CLEAR
vbKeyReturn	0xD	Tecla ENTER
vbKeyShift	0x10	Tecla SHIFT
vbKeyControl	0x11	Tecla CTRL
vbKeyMenu	0x12	Tecla MENU
vbKeyPause	0x13	Tecla PAUSE
vbKeyCapital	0x14	Tecla CAPS LOCK
vbKeyEscape	0x1B	Tecla ESC
vbKeySpace	0x20	BARRA DE ESPAÇOS
vbKeyPageUp	0x21	Tecla PAGE UP
vbKeyPageDown	0x22	Tecla PAGE DOWN
vbKeyEnd	0x23	Tecla END
vbKeyHome	0x24	Tecla HOME
vbKeyLeft	0x25	Tecla SETA À ESQUERDA
vbKeyUp	0x26	Tecla SETA ACIMA
vbKeyRight	0x27	Tecla SETA À DIREITA
vbKeyDown	0x28	Tecla SETA ABAIXO
vbKeySelect	0x29	Tecla SELECT
vbKeyPrint	0x2A	Tecla PRINT SCREEN
vbKeyExecute	0x2B	Tecla EXECUTE
vbKeySnapshot	0x2C	Tecla SNAPSHOT
vbKeyInsert	0x2D	Tecla INSERT
vbKeyDelete	0x2E	Tecla DELETE
vbKeyHelp	0x2F	Tecla HELP
vbKeyNumlock	0x90	Tecla NUM LOCK
As teclas de A a Z são iguais a seus equivalentes A – Z em ASCII:

Constante	Valor	Descrição
vbKeyA	65	Tecla A
vbKeyB	66	Tecla B
vbKeyC	67	Tecla C
vbKeyD	68	Tecla D
vbKeyE	69	Tecla E
vbKeyF	70	Tecla F
vbKeyG	71	Tecla G
vbKeyH	72	Tecla H
vbKeyI	73	Tecla I
vbKeyJ	74	Tecla J
vbKeyK	75	Tecla K
vbKeyL	76	Tecla L
vbKeyM	77	Tecla M
vbKeyN	78	Tecla N
vbKeyO	79	Tecla O
vbKeyP	80	Tecla P
vbKeyQ	81	Tecla Q
vbKeyR	82	Tecla R
vbKeyS	83	Tecla S
vbKeyT	84	Tecla T
vbKeyU	85	Tecla Usuário
vbKeyV	86	Tecla V
vbKeyW	87	Tecla W
vbKeyX	88	Tecla X
vbKeyY	89	Tecla Y
vbKeyZ	90	Tecla Z
As teclas de 0 a 9 são iguais a seus equivalentes 0 – 9 em ASCII:

Constante	Valor	Descrição
vbKey0	48	Tecla 0
vbKey1	49	Tecla 1
vbKey2	50	Tecla 2
vbKey3	51	Tecla 3
vbKey4	52	Tecla 4
vbKey5	53	Tecla 5
vbKey6	54	Tecla 6
vbKey7	55	Tecla 7
vbKey8	56	Tecla 8
vbKey9	57	Tecla 9
As seguintes constantes representam teclas no teclado numérico:

Constante	Valor	Descrição
vbKeyNumpad0	0x60	Tecla 0
vbKeyNumpad1	0x61	Tecla 1
vbKeyNumpad2	0x62	Tecla 2
vbKeyNumpad3	0x63	Tecla 3
vbKeyNumpad4	0x64	Tecla 4
vbKeyNumpad5	0x65	Tecla 5
vbKeyNumpad6	0x66	Tecla 6
vbKeyNumpad7	0x67	Tecla 7
vbKeyNumpad8	0x68	Tecla 8
vbKeyNumpad9	0x69	Tecla 9
vbKeyMultiply	0x6A	Tecla SINAL DE MULTIPLICAÇÃO (*)
vbKeyAdd	0x6B	Tecla SINAL DE MAIS (+)
vbKeySeparator	0x6C	Tecla ENTER
vbKeySubtract	0x6D	Tecla SINAL DE MENOS (-)
vbKeyDecimal	0x6E	Tecla PONTO DECIMAL (.)
vbKeyDivide	0x6F	Tecla SINAL DE DIVISÃO (/)
As seguintes constantes representam teclas de função:

Constante	Valor	Descrição
vbKeyF1	0x70	Tecla F1
vbKeyF2	0x71	Tecla F2
vbKeyF3	0x72	Tecla F3
vbKeyF4	0x73	Tecla F4
vbKeyF5	0x74	Tecla F5
vbKeyF6	0x75	Tecla F6
vbKeyF7	0x76	Tecla F7
vbKeyF8	0x77	Tecla F8
vbKeyF9	0x78	Tecla F9
vbKeyF10	0x79	Tecla F10
vbKeyF11	0x7A	Tecla F11
vbKeyF12	0x7B	Tecla F12
vbKeyF13	0x7C	Tecla F13
vbKeyF14	0x7D	Tecla F14
vbKeyF15	0x7E	Tecla F15
vbKeyF16	0x7F	Tecla F16


Constantes System Color

As seguintes constantes podem ser usadas em qualquer parte do seu código no lugar dos valores reais:

Constante	Valor	Descrição
VbScrollBars	0x80000000	Cor da barra de rolagem
VbDesktop	0x80000001	Cor da área de trabalho
VbActiveTitleBar	0x80000002	Cor da barra de título para a janela ativa
VbInactiveTitleBar	0x80000003	Cor da barra de título para a janela inativa
VbMenuBar	0x80000004	Cor de segundo plano do menu
VbWindowBackground	0x80000005	Cor de segundo plano da janela
VbWindowFrame	0x80000006	Cor da moldura da janela
VbMenuText	0x80000007	Cor de texto em menus
VbWindowText	0x80000008	Cor de texto em janelas
VbTitleBarText	0x80000009	Cor de texto em legenda, caixa de tamanho e seta de rolagem
VbActiveBorder	0x8000000A	Cor de borda de janela ativa
VbInactiveBorder	0x8000000B	Cor de borda de janela inativa
VbApplicationWorkspace	0x8000000C	Cor de segundo plano de aplicativos multiple-document interface (MDI, interface de documentos múltiplos)
VbHighlight	0x8000000D	Cor de segundo plano de itens selecionados em um controle
VbHighlightText	0x8000000E	Cor de texto de itens selecionados em um controle
VbButtonFace	0x8000000F	Cor de sombreado na face dos botões de comando
VbButtonShadow	0x80000010	Cor de sombreado na borda dos botões de comando
VbGrayText	0x80000011	Texto acizentado (desativado)
VbButtonText	0x80000012	Cor de texto em botões de ação
VbInactiveCaptionText	0x80000013	Cor de texto em uma legenda inativa
vb3Dhighlight	0x80000014	Cor destacada para elementos de exibição 3D
vb3DDKShadow	0x80000015	Cor da sombra mais escura para elementos de exibição 3D
vb3Dlight	0x80000016	Segunda cor 3D mais clara após vb3DHighlight
VbInfoText	0x80000017	Cor de texto em Dicas de ferramentas
VbInfoBackground	0x80000018	Cor de segundo plano de Dicas de ferramentas


Constantes CallType

As seguintes constantes podem ser usadas em qualquer parte do seu código no lugar dos valores reais:

Constante	Valor	Descrição
VbMethod	1	Indica que um método foi invocado.
VbGet	2	Indica um procedimento Property Get.
VbLet	4	Indica um procedimento Property Let.
vbSet	8	Indica um procedimento Property Set.


Constantes Form

As seguintes constantes podem ser usadas em qualquer parte do seu código no lugar dos valores reais:

Constante	Valor	Descrição
vbModeless	0	UserForm é sem janela restrita.
vbModal	1	UserForm é de janela restrita (padrão).


Exemplo da instrução Call

Este exemplo ilustra como a instrução Call é usada para transferir o controle para um procedimento Sub, uma função intrínseca e um procedimento dynamic-link library (DLL, biblioteca de vínculo dinâmico). As DLLs não são usadas no Macintosh.

' Chame um procedimento Sub.

Call PrintToDebugWindow("Alô Mundo")

' A instrução acima faz com que o controle seja passado para o

' procedimento Sub seguinte.

Sub PrintToDebugWindow(AnyString)

Debug.Print AnyString	' Imprima na janela Immediate.

End Sub

' Chame uma função intrínseca. O valor retornado da função é

' descartado.

Call Shell(AppName, 1)	' AppName contém o caminho do

' arquivo executável.

' Chame um procedimento DLL do Microsoft Windows. A instrução Declare

' deve ser Private em um Módulo de classe, mas não em um Módulo padrão.

Private Declare Sub MessageBeep Lib "Usuário" (ByVal N As Integer)

Sub CallMyDll()

Call MessageBeep(0)	' Chame o procedimento DLL do Windows.

MessageBeep 0	' Chame novamente sem a palavra-chave Call.

End Sub


Exemplo da função Choose

Este exemplo usa a função Choose para exibir um nome em resposta a um índice passado ao procedimento no parâmetro Ind.

Function GetChoice(Ind As Integer)

GetChoice = Choose(Ind, "Expresso", "United", "Federal")

End Function


Exemplo da função DoEvents

Este exemplo usa a função DoEvents para fazer com que a execução seja submetida ao sistema operacional uma vez a cada 1000 iterações do loop. DoEvents retorna o número de formulários abertos do Visual Basic, mas somente quando o aplicativo host for o Visual Basic.

' Crie uma variável para conter o número de formulários do Visual Basic

' carregados e visíveis.

Dim I, OpenForms

For I = 1 To 150000	' Inicie loop.

If I Mod 1000 = 0 Then 	' Se o loop tiver se repetido 1000 vezes.

OpenForms = DoEvents	' Submeter ao sistema operacional.

End If

Next I	' Incrementar o contador de loops.


Exemplo da instrução Do...Loop

Este exemplo mostra como as instruções Do...Loop podem ser usadas. A instrução Do...Loop interna faz o loop 10 vezes, define o valor do sinalizador como False e sai prematuramente usando a instrução Exit Do. O loop externo sai imediatamente após a verificação do valor do sinalizador.

Dim Check, Counter

Check = True: Counter = 0	' Inicialize variáveis.

Do	' Loop externo.

Do While Counter < 20	' Loop interno.

Counter = Counter + 1	' Incremente contador.

If Counter = 10 Then	' Se a condição for True.

Check = False	' Defina o valor do sinalizador como False.

Exit Do	' Saia do loop interno.

End If

Loop

Loop Until Check = False	' Saia do loop externo imediatamente.


Exemplo da instrução End

Este exemplo usa a instrução End para encerrar a execução do código se o usuário inserir uma senha inválida.

Sub Form_Load

Dim Password, Pword

PassWord = "Swordfish"

Pword = InputBox("Digite sua senha")

If Pword <> PassWord Then

MsgBox "Sinto muito, senha incorreta"

End

End If

End Sub


Exemplo da instrução Exit

Este exemplo usa a instrução Exit para sair de um loop For...Next, Do...Loop e de um procedimento Sub.

Sub ExitStatementDemo()

Dim I, MyNum

Do	' Configure loop infinito.

For I = 1 To 1000	' Fazer o loop 1000 vezes.

MyNum = Int(Rnd * 1000)	' Gere números aleatórios.

Select Case MyNum	' Avalie o número aleatório.

Case 7: Exit For	' Se 7, saia de For...Next.

Case 29: Exit Do	' Se 29, saia de Do...Loop.

Case 54: Exit Sub	' Se 54, saia do procedimento Sub.

End Select

Next I

Loop

End Sub


Exemplo da instrução For Each...Next

Este exemplo usa a instrução For Each...Next para pesquisar a propriedade Text de todos os elementos em uma coleção para a seqüência "Olá". No exemplo, MyObject é um objeto relacionado ao texto e é um elemento da coleção MyCollection. Ambos são nomes genéricos usados apenas para fins ilustrativos.

Dim Found, MyObject, MyCollection

Found = False	' Inicialize variável.

For Each MyObject In MyCollection	' Itere através de cada elemento.

If MyObject.Text = "Olá" Then	' Se Text for igual a "Olá".

Found = True	' Defina Found como True.

Exit For	' Saia do loop.

End If

Next


Exemplo da instrução For...Next

Este exemplo usa a instrução For...Next para criar uma seqüência que contém 10 ocorrências dos números de 0 a 9, cada seqüência separada da outra por um único espaço. O loop externo usa uma variável do contador de loops que é decrescida toda vez através do loop.

Dim Words, Chars, MyString

For Words = 10 To 1 Step -1 	' Configure 10 repetições.

For Chars = 0 To 9	' Configure 10 repetições.

MyString = MyString & Chars	' Acrescente número à seqüência.

Next Chars	' Incremente o contador

MyString = MyString & " "	' Acrescente um espaço.

Next Words


Exemplo da instrução GoSub...Return

Este exemplo usa GoSub para chamar uma sub-rotina dentro de um procedimento Sub. A instrução Return faz com que a execução continue imediatamente após a instrução GoSub. A instrução Exit Sub é usada para evitar que o controle flua acidentalmente para a sub-rotina.

Sub GosubDemo()

Dim Num

' Solicite um número ao usuário.

Num = InputBox("Insira um número positivo para ser dividido por 2.")

' Use a rotina somente se o usuário inserir um número positivo.

If Num > 0 Then GoSub MyRoutine

Debug.Print Num

Exit Sub	' Use Exit para evitar um erro.

MyRoutine:

Num = Num/2	' Execute a divisão.

Return	' Retorne o controle à instrução

End Sub	' que se segue à instrução GoSub.


Exemplo da instrução GoTo

Este exemplo usa a instrução GoTo para desviar para etiquetas da linha dentro de um procedimento.

Sub GotoStatementDemo()

Dim Number, MyString

Number = 1 	' Inicialize variável.

' Avalie Number e desvie para a etiqueta apropriada.

If Number = 1 Then GoTo Line1 Else GoTo Line2

Line1:

MyString = "Número igual a 1"

GoTo LastLine	' Vá para LastLine.

Line2:

' A instrução a seguir nunca é executada.

MyString = "Número igual a 2"

LastLine:

Debug.Print MyString	' Imprima "Número é igual a 1" na

' janela Immediate.

End Sub


Exemplo da instrução If...Then...Else

Este exemplo mostra as formas de bloco e de linha única da instrução If...Then...Else. Ele também ilustra o uso de If TypeOf...Then...Else.

Dim Number, Digits, MyString

Number = 53	' Inicialize variável.

If Number < 10 Then

Digits = 1

ElseIf Number < 100 Then

' A condição avalia como True, então a próxima instrução é executada.

Digits = 2

Else

Digits = 3

End If

' Atribua um valor usando a forma de sintaxe de linha única.

If Digits = 1 Then MyString = "Um" Else MyString = "Mais de um"

Use a construção If TypeOf para determinar se o Controle passado para um procedimento é uma caixa de texto.

Sub ControlProcessor(MyControl As Control)

If TypeOf MyControl Is CommandButton Then

Debug.Print "Você passou um " & TypeName(MyControl)

ElseIf TypeOf MyControl Is CheckBox Then

Debug.Print "Você passou um " & TypeName(MyControl)

ElseIf TypeOf MyControl Is TextBox Then

Debug.Print "Você passou um " & TypeName(MyControl)

End If

End Sub


Exemplo da função IIf

Este exemplo usa a função IIf para avaliar o parâmetro TestMe do procedimento CheckIt e retorna a palavra "Grande" se a quantidade for maior que 1000; caso contrário, retorna a palavra "Pequena".

Function CheckIt (TestMe As Integer)

CheckIt = IIf(TestMe > 1000, "Grande", "Pequena")

End Function


Exemplo das instruções On...GoSub, On...GoTo

Este exemplo usa as instruções On...GoSub e On...GoTo para desviar para sub-rotinas e rótulos de linha, respectivamente.

Sub OnGosubGotoDemo()

Dim Number, MyString

Number = 2	' Inicialize variável.

' Desvie para Sub2.

On Number GoSub Sub1, Sub2	' A execução continua aqui depois de

' On...GoSub.

On Number GoTo Line1, Line2	' Desvie para Line2.

' A execução não continua aqui depois de On...GoTo.

Exit Sub

Sub1:

MyString = "Em Sub1" : Return

Sub2:

MyString = "Em Sub2" : Return

Line1:

MyString = "Em Line1"

Line2:

MyString = "Em Line2"

End Sub


Exemplo da função Partition

Este exemplo pressupõe que você tenha uma tabela Pedidos com um campo Frete. É criado um procedimento de seleção que conta o número de pedidos para os quais o custo de frete se enquadra em cada um dos diversos intervalos. A função Partition é usada primeiramente para estabelecer esses intervalos e, em seguida, a função SQL Count conta o número de pedidos em cada intervalo. Neste exemplo, os argumentos para a função Partition são start = 0, stop = 500, interval = 50. O primeiro intervalo, portanto, seria 0:49, e assim por diante até 500.

SELECT DISTINCTROW Partition([frete],0, 500, 50) AS Range,

Count(Pedidos.Frete) AS Count

FROM Pedidos

GROUP BY Partition([frete],0,500,50);


Exemplo da instrução Select Case

Este exemplo usa a instrução Select Case para avaliar o valor de uma variável. A segunda cláusula Case contém o valor da variável que está sendo avaliada e, portanto, somente a instrução associada a ela é executada.

Dim Number

Number = 8	' Inicialize variável.

Select Case Number	' Avalie número.

Case 1 To 5	' Número entre 1 e 5, inclusive.

Debug.Print "Entre 1 e 5"

' A cláusula Case a seguir é a única que avalia como True.

Case 6, 7, 8	' Número entre 6 e 8.

Debug.Print "Entre 6 e 8"

Case 9 To 10	' O número é 9 ou 10.

Debug.Print "Maior que 8"

Case Else	' Outros valores.

Debug.Print "Não entre 1 e 10"

End Select


Exemplo da função Shell

Este exemplo usa a função Shell para executar um aplicativo especificado pelo usuário. No MacIntosh, o nome da unidade padrão é “HD” e as partes do nome do caminho são separadas por dois pontos em vez de barras invertidas. De modo semelhante, você especificaria as pastas Macintosh em vez de \Windows.

' Especificar 1 como o segundo argumento abre o aplicativo em

' tamanho normal e o coloca em foco.

Dim RetVal

RetVal = Shell("C:\WINDOWS\CALC.EXE", 1)	' Execute Calculadora.


Exemplo da instrução Stop

Este exemplo usa a instrução Stop para suspender a execução de cada iteração através do loop For...Next.

Dim I

For I = 1 To 10	' Inicie loop For...Next.

Debug.Print I	' Imprima I na janela Immediate.

Stop	' Pare durante cada iteração.

Next I


Exemplo da função Switch

Este exemplo usa a função Switch para retornar o nome de um idioma que corresponde ao nome de uma cidade.

Function MatchUp (CityName As String)

Matchup = Switch(CityName = "Londres", "Inglês", CityName _

= "Roma", "Italiano", CityName = "Paris", "Francês")

End Function


Exemplo da instrução While...Wend

Este exemplo usa a instrução While...Wend para incrementar uma variável do contador. As instruções no loop são executadas desde que a condição avalie como True.

Dim Counter

Counter = 0	' Inicialize variável.

While Counter < 20	' Teste valor de Contador.

Counter = Counter + 1	' Incremente contador.

Wend	' Encerre o loop While quando Counter > 19.

Debug.Print Counter	' Imprima 20 na janela Immediate.


Exemplo da instrução With

Este exemplo usa a instrução With para executar uma série de instruções em um único objeto. O objeto MeuObjeto e as suas propriedades são nomes genéricos usados apenas para fins ilustrativos.

With MyObject

.Height = 100	' Igual a MyObject.Height = 100.

.Caption = "Olá Mundo"	' Igual a MyObject.Caption = "Olá Mundo".

With .Font

.Color = Red	' Igual a MyObject.Font.Color = Red.

.Bold = True	' Igual a MyObject.Font.Bold = True.

End With

End With


Instrução Call

Transfere o controle para um procedimento Sub, um procedimento Function ou procedimento da dynamic-link library (DLL, biblioteca de vínculo dinâmico).

Sintaxe

[Call] name [argumentlist]

A sintaxe da instrução Call possui as seguintes partes:

Parte	Descrição
Call	Opcional; palavra-chave. Se for especificada, você deve colocar argumentlist entre parênteses. Por exemplo:
	Call MyProc(0)
name	Obrigatória. Nome do procedimento a ser chamado.
argumentlist	Opcional. Lista, delimitada por vírgulas, de variáveis, ou expressões a serem passadas ao procedimento. Os componentes de argumentlist podem incluir as palavras-chave ByVal ou ByRef para descrever como os argumentos são tratados pelo procedimento chamado. Entretanto, ByVal e ByRef podem ser usadas com Call somente quando for chamado um procedimento DLL. No Macintosh, ByVal e ByRef podem ser usadas com Call ao fazer uma chamada a um recurso de código do Macintosh.

Comentários

Não é necessário usar a palavra-chave Call quando chamar um procedimento. No entanto, se você usar a palavra-chave Call para chamar um procedimento que requer argumentos, argumentlist deverá estar entre parênteses. Se você omitir a palavra-chave Call, também deverá omitir os parênteses de argumentlist. Se usar qualquer sintaxe de Call para chamar alguma função intrínseca ou definida pelo usuário, o valor retornado da função será descartado.

Para passar uma matriz inteira para um procedimento, use o nome da matriz seguido de parênteses vazios.


Função Choose

Seleciona e retorna um valor de uma lista de argumentos.

Sintaxe

Choose(index, choice-1[, choice-2, ... [, choice-n]])

A sintaxe da função Choose tem as seguintes partes:

Parte	Descrição
index	Obrigatória. Expressão numérica ou campo que resulta em um valor entre 1 e o número de escolhas disponíveis.
choice	Obrigatória. Expressão de variante contendo uma das escolhas possíveis.
Comentários

Choose retorna um valor da lista de escolhas baseado no valor de index. Se index for 1, Choose retorna a primeira escolha da lista, se for 2, retorna a segunda escolha, e assim por diante.

Você pode usar Choose para procurar um valor em uma lista de possibilidades. Por exemplo, se index for avaliado como 3 e choice-1 = "um", choice-2 = "dois" e choice-3 = "três", Choose retorna "três". Este recurso é particularmente útil se index representar o valor em um grupo de opções.

Choose avalia todas as escolhas da lista, embora retorne somente uma. Por isso, você deve observar se existem efeitos colaterais indesejáveis. Por exemplo, se você usar a função MsgBox como parte de uma expressão em todas as escolhas, será exibida uma caixa de mensagens quando cada escolha for avaliada, embora Choose retorne o valor de apenas uma delas.

A função Choose retorna um Nulo se index for menor que 1 ou maior que o número de escolhas listadas.

Se index não for um número inteiro, será arredondado para o número inteiro mais próximo antes de ser avaliado.


Função DoEvents

Cede o controle da execução para que o sistema operacional possa processar outros eventos.

Sintaxe

DoEvents( )

Comentários

A função DoEvents retorna um Número inteiro que representa o número de formulários abertos em versões autônomas do Visual Basic, como o Visual Basic, Professional Edition. DoEvents retorna zero a todos os outros aplicativos.

DoEvents passa o controle para o sistema operacional. O controle é retornado depois que o sistema operacional conclui o processamento dos eventos da sua fila e todas as chaves da fila SendKeys terem sido enviadas.

DoEvents tem uma maior utilidade com ações simples como permitir que um usuário cancele um processo após ter sido iniciado, por exemplo, uma procura por um arquivo. Para processos de longa execução, o controle do processador é conseguido com maior facilidade usando-se um cronômetro ou delegando-se a tarefa a um componente ActiveX EXE. Nesse último caso, a tarefa pode continuar de forma completamente independente de seu aplicativo e o sistema operacional considera a multitarefa e a divisão de tempo.

Atenção   Sempre que você ceder temporariamente o processador dentro de um procedimento do evento, certifique-se de que o procedimento não seja executado novamente a partir de uma parte diferente do seu código antes que a primeira chamada retorne, pois isto pode causar resultados imprevisíveis. Além disso, não use DoEvents se houver possibilidade de outros aplicativos interagirem com o seu procedimento de forma imprevisível quando você cedeu o controle.


Instrução Do...Loop

Repete um bloco de instruções enquanto uma condição é True ou até que ela se torne True.

Sintaxe

Do [{While | Until} condition]
[statements]
[Exit Do]
[statements]

Loop

Ou você pode usar a sintaxe a seguir:

Do
[statements]
[Exit Do]
[statements]

Loop [{While | Until} condition]

A sintaxe da instrução Do Loop possui as seguintes partes:

Parte	Descrição
Condition	Opcional. Expressão numérica ou expressão de seqüência que seja True ou False. Se condition for Null, ela será tratada como False.
Statements	Uma ou mais instruções que são repetidas enquanto, ou até que, condition seja True.
Comentários

Qualquer número de instruções Exit Do pode ser posicionado em qualquer lugar em Do…Loop como alternativa para sair de um Do…Loop. Exit Do é freqüentemente usada após a avaliação de alguma condição, por exemplo, If…Then, caso em que a instrução Exit Do transfere o controle para a instrução imediatamente após o Loop.

Quando usada dentro de instruções Do…Loop aninhadas, Exit Do transfere o controle para o loop que está aninhado em um nível acima do loop onde ocorre Exit Do.


Instrução End

Encerra um procedimento ou bloco.

Sintaxe

End

End Function

End If

End Property

End Select

End Sub

End Type

End With

A sintaxe da instrução End possui as seguintes formas:

Instrução	Descrição
End	Termina a execução imediatamente. Nunca é obrigatória sozinha, mas pode ser posicionada em qualquer lugar dentro de um procedimento para encerrar a execução do código, fechar arquivos abertos com a instrução Open e limpar variáveis.
End Function	Obrigatória para encerrar uma instrução Function.
End If	Obrigatória para encerrar uma instrução do bloco If…Then…Else.
End Property	Obrigatória para encerrar um procedimento Property Let, Property Get ou Property Set.
End Select	Obrigatória para encerrar uma instrução Select Case.
End Sub	Obrigatória para encerrar uma instrução Sub.
End Type	Obrigatória para encerrar uma definição de tipo definido pelo usuário (instrução Type).
End With	Obrigatória para encerrar uma instrução With.
Comentários

Quando é executada, a instrução End redefine todas as variáveis a nível de módulo e todas as variáveis locais estáticas em todos os módulos. Para preservar o valor dessas variáveis, use a instrução Stop. Assim, você poderá continuar a execução preservando o valor dessas variáveis.

Observação   A instrução End pára a execução do código bruscamente, sem invocar o evento Unload, QueryUnload ou Terminate ou qualquer outro código do Visual Basic. O código que você posicionou nos eventos Unload, QueryUnload e Terminate de formulários e módulos classe não é executado. Os objetos criados a partir de módulos classe são destruídos, os arquivos abertos usando a instrução Open são fechados e a memória usada pelo seu programa é liberada. As referências de objeto pertencentes a outros programas são invalidadas.

A instrução End fornece uma maneira de forçar a parada de seu programa. Para a finalização normal de um programa do Visual Basic, você deve descarregar todos os formulários. O seu programa é fechado assim que não haja outros programas mantendo referências a objetos criados a partir de seus módulos classe públicos e nenhum código sendo executado.


Instrução Exit

Sai de um bloco de código Do…Loop, For...Next, Function, Sub ou Property.

Sintaxe

Exit Do

Exit For

Exit Function

Exit Property

Exit Sub

A sintaxe da instrução Exit possui as seguintes formas:

Instrução	Descrição
Exit Do	Fornece um meio de sair de uma instrução Do...Loop. Pode ser usada somente dentro de uma instrução Do...Loop. Exit Do transfere o controle para a instrução seguinte à instrução Loop. Quando usada dentro de instruções Do...Loop aninhadas, Exit Do transfere o controle para o loop que está aninhado em um nível acima do loop onde ocorre Exit Do.
Exit For	Fornece um meio de sair de um loop For. Pode ser usada somente em um loop For...Next ou For Each...Next. Exit For transfere o controle para a instrução seguinte à instrução Next. Quando usada dentro de loops For aninhados, Exit For transfere o controle para o loop que está aninhado em um nível acima do loop onde ocorre Exit For.
Exit Function	Sai imediatamente do procedimento Function em que aparece. A execução continua com a instrução seguinte à instrução que chamou Function.
Exit Property	Sai imediatamente do procedimento Property em que aparece. A execução continua com a instrução seguinte à instrução que chamou o procedimento Property.
Exit Sub	Sai imediatamente do procedimento Sub em que aparece. A execução continua com a instrução seguinte à instrução que chamou o procedimento Sub.
Comentários

Não confunda instruções Exit com instruções End. Exit não define o fim de uma estrutura.


Instrução For Each...Next

Repete um grupo de instruções para cada elemento em uma matriz ou coleção.

Sintaxe

For Each element In group
[statements]
[Exit For]
[statements]

Next [element]

A sintaxe da instrução For...Each...Next possui as seguintes partes:

Parte	Descrição
Element	Obrigatória. Variável usada para iterar através dos elementos da coleção ou matriz. Para coleções, element pode ser somente uma variável Variant, uma variável de objeto genérica ou qualquer variável de objeto específica. Para matrizes, element somente pode ser uma variável Variant.
Group	Obrigatória. Nome de uma coleção ou matriz de objetos (exceto uma matriz de tipos definidos pelo usuário).
Statements	Opcional. Uma ou mais instruções que são executadas em cada item de group.
Comentários

O bloco For...Each é inserido se houver pelo menos um elemento em group. Uma vez inserido o loop, todas as suas instruções são executadas para o primeiro elemento em group. Se houver mais elementos em group, as instruções do loop continuam a ser executadas para cada elemento. Quando não houver mais elementos em group, o loop sai e a execução continua com a instrução seguinte à instrução Next.

Qualquer número de instruções Exit For pode ser posicionado em qualquer lugar do loop como um meio alternativo para sair. Muitas vezes, Exit For é usada depois de se avaliar alguma condição, por exemplo, If...Then, e transfere o controle para a instrução imediatamente seguinte a Next.

Você pode aninhar loops For...Each...Next posicionando um dentro do outro. Entretanto, cada element do loop deve ser exclusivo.

Observação   Se você omitir element em uma instrução Next, a execução continua como se element estivesse incluído. Se uma instrução Next for encontrada antes de sua instrução For correspondente, ocorrerá um erro.

Você não pode usar a instrução For...Each...Next com uma matriz de tipos definidos pelo usuário porque uma Variant não pode conter um tipo definido pelo usuário.


Instrução For...Next

Repete um grupo de instruções um número específico de vezes.

Sintaxe

For counter = start To end [Step step]
[statements]
[Exit For]
[statements]

Next [counter]

A sintaxe da instrução For…Next possui as seguintes partes:

Parte	Descrição
Counter	Obrigatória. Variável numérica usada como um contador de loops. A variável não pode ser um Boolean ou um elemento da matriz.
Start	Obrigatória. Valor inicial de counter.
End	Obrigatória. Valor final de counter.
Step	Opcional. A quantidade em que counter é alterado sempre que passa pelo loop. Se step não for especificado, o padrão será um.
Statements	Opcional. Uma ou mais instruções entre For e Next que são executadas conforme o número de vezes especificado.
Comentários

O argumento step pode ser positivo ou negativo. O valor do argumento step determina o processamento do loop como a seguir:

Valor	O loop é executado se
Positivo ou 0	counter <= end
Negativo	counter >= end
Depois que todas as instruções do loop foram executadas, step é adicionado a counter. Neste ponto, as instruções do loop são executadas novamente (baseadas no mesmo teste que causou a execução inicial do loop) ou o loop sai e a execução continua com a instrução seguinte à instrução Next.

Dica   A alteração do valor de counter enquanto dentro de um loop pode dificultar a leitura e depuração do código.

Qualquer número de instruções Exit For pode ser posicionado em qualquer lugar do loop como meio alternativo de sair. Muitas vezes, Exit For é usada depois da avaliação de alguma condição, por exemplo, If...Then, e transfere o controle para a instrução imediatamente seguinte a Next.

Você pode aninhar loops For...Next posicionando um dentro do outro. Dê um nome de variável exclusivo como seu counter a cada loop. A construção a seguir é correta:

For I = 1 To 10

For J = 1 To 10

For K = 1 To 10

...

Next K

Next J

Next I

Observação   Se você omitir counter em uma instrução Next, a execução continua como se counter estivesse incluído. Se uma instrução Next for encontrada antes de sua instrução For correspondente, ocorrerá um erro.


Instrução GoSub...Return

Desvia para, e retorna de uma sub-rotina dentro de um procedimento.

Sintaxe

GoSub line
...
line
...

Return

O argumento line pode ser qualquer rótulo de linha ou número de linha.

Comentários

Você pode usar GoSub e Return em qualquer posição dentro de um procedimento, mas GoSub e a instrução Return correspondente devem estar no mesmo procedimento. Uma sub-rotina pode conter mais de uma instrução Return, mas a primeira encontrada faz com que o fluxo de execução se desvie de volta para a instrução imediatamente seguinte à instrução GoSub executada mais recentemente.

Observação   Você não pode entrar ou sair de procedimentos Sub com GoSub...Return.

Dica   Criar procedimentos separados que podem ser chamados pode proporcionar uma alternativa mais estruturada para o uso de GoSub...Return.


Instrução GoTo

Desvia incondicionalmente para uma linha especificada dentro de um procedimento.

Sintaxe

GoTo line

O argumento line obrigatório pode ser qualquer rótulo de linha ou número de linha.

Comentários

GoTo pode desviar somente para linhas de dentro do procedimento em que aparece.

Observação   Excesso de instruções GoTo pode tornar difícil a leitura e depuração do código. Sempre que possível, use instruções de controle estruturado (Do...Loop, For...Next, If...Then...Else, Select Case).


Instrução If...Then...Else

Executa condicionalmente um grupo de instruções, dependendo do valor de uma expressão.

Syntax

If condition Then [statements] [Else elsestatements]

Ou você pode usar a sintaxe em forma de bloco:

If condition Then
[statements]

[ElseIf condition-n Then
[elseifstatements] ...

[Else
[elsestatements]]

End If

A instrução If...Then...Else possui as seguintes partes:

Parte	Descrição
condition	Obrigatória. Um ou mais dos dois tipos de expressão a seguir:
	Uma expressão numérica ou expressão de seqüência que avalia como True ou False. Se condition for Null, ela será tratada como False.
	Uma expressão do formato TypeOf objectname Is objecttype. O objectname é qualquer referência de objeto e objecttype é qualquer tipo de objeto válido. A expressão será True se objectname for o tipo de objeto especificado por objecttype; caso contrário, será  False.
Statements	Opcional na forma de bloco; obrigatória na forma de uma linha que não possua cláusula Else. Uma ou mais instruções separadas por dois-pontos; executadas se condition for True.
Condition-n	Opcional. Igual a condition.
Elseifstatements	Opcional. Uma ou mais instruções executadas se condition-n associada for True.
Elsestatements	Opcional. Uma ou mais instruções executadas se nenhuma expressão condition ou condition-n anterior for True.
Comentários

Você pode usar a forma de uma linha (primeira sintaxe) para testes simples e curtos. Entretanto, a forma de bloco (segunda sintaxe) proporciona mais estrutura e flexibilidade do que a forma de uma linha e normalmente é mais fácil de ler, manter e depurar.

Observação   Com a forma de uma linha, é possível ter múltiplas instruções executadas como resultado de uma decisão If...Then. Todas as instruções devem estar na mesma linha e separadas por dois-pontos, como na seguinte instrução:

If A > 10 Then A = A + 1 : B = B + A : C = C + B

Uma instrução If em forma de bloco deve ser a primeira em uma linha. As partes Else, ElseIf e End If da instrução podem ter somente um número de linha ou rótulo de linha precedendo-as. O bloco If deve ser encerrado com uma instrução End If.

Para determinar se uma instrução é ou não um bloco If, examine o que segue a palavra-chave Then. Se qualquer coisa exceto um comentário aparecer depois de Then na mesma linha, a instrução será tratada como instrução If de uma linha.

A cláusulas Else e ElseIf são opcionais. Você pode ter quantas cláusulas ElseIf desejar em um bloco If, mas nenhuma pode aparecer depois de uma cláusula Else. As instruções do bloco If podem ser aninhadas, isto é, contidas uma dentro da outra.

Executando um bloco If (segunda sintaxe), condition é testada. Se condition for True, as instruções seguintes a Then são executadas. Se condition for False, cada condição ElseIf (se houver) será avaliada alternadamente. Quando uma condição True for localizada, as instruções imediatamente seguintes à Then associada serão executadas. Se nenhuma das condições ElseIf for True (ou se não houver cláusulas ElseIf), as instruções seguintes a Else serão executadas. Depois da execução das instruções seguintes a Then ou Else, a execução continua com a instrução seguinte a End If.

Dica   Select Case pode ser mais útil na avaliação de uma expressão única com diversas ações possíveis. No entanto, a claúsula TypeOf objectname Is objecttype não pode ser usada com a instrução Select Case.

Observação  TypeOf não pode ser usada com tipos de dados incondicionais, como Long, Integer e outros diferentes de Object.


Função IIf

Retorna uma das duas partes, dependendo da avaliação de uma expressão.

Sintaxe

IIf(expr, truepart, falsepart)

A sintaxe da função IIf tem os seguintes argumentos nomeados:

Parte	Descrição
expr	Obrigatória. Expressão que você deseja avaliar.
truepart	Obrigatória. Valor ou expressão retornada se expr for True.
falsepart	Obrigatória. Valor ou expressão retornada se expr for False.
Comentários

IIf sempre avalia truepart e falsepart, mesmo que retorne somente uma delas. Em razão disto, você deve observar se ocorrem efeitos colaterais indesejáveis. Por exemplo, se a avaliação de falsepart resultar em um erro de divisão por zero, ocorrerá um erro mesmo se expr for True.


Instruções On...GoSub, On...GoTo

Desviam para uma das diversas linhas especificadas, dependendo do valor de uma expressão.

Sintaxe

On expression GoSub destinationlist

On expression GoTo destinationlist

A sintaxe das instruções On...GoSub e On...GoTo possui as seguintes partes:

Parte	Descrição
expression	Obrigatória. Qualquer expressão numérica avaliada como número inteiro entre 0 e 255, inclusive. Se expression for qualquer número não inteiro, ele será arredondado antes de ser avaliado.
destinationlist	Obrigatória. Lista de números de linha ou rótulos de linha separados por vírgulas.
Comentários

O valor de expression determina a linha para a qual será desviada em destinationlist. Se o valor de expression for menor que 1 ou maior que o número de itens da lista, poderá ocorrer um dos seguintes resultados:

Se expression for	Então
Igual a 0	O controle cai para a instrução seguinte a On...GoSub ou On...GoTo.
Maior que o número de itens de uma lista	O controle cai para a instrução seguinte a On...GoSub ou On...GoTo.
Negativo	Ocorre um erro.
Maior que 255	Ocorre um erro.
Você pode misturar números de linha e rótulos de linha na mesma lista. Pode usar quantos rótulos de linha e números de linha desejar com On...GoSub e On...GoTo. Entretanto, se você usar mais rótulos ou números do que cabem em uma linha, deverá usar o caractere de continuação de linha para continuar a linha lógica até a linha física seguinte.

Dica   Select Case proporciona um meio mais estruturado e flexível de executar múltipla ramificação.


Função Partition

Retorna uma Variant (String) que indica onde ocorre um número dentro de uma série calculada de intervalos.

Sintaxe

Partition(number, start, stop, interval)

A sintaxe da função Partition tem os seguintes argumentos nomeados:

Parte	Descrição
number	Obrigatória. Número inteiro que você deseja avaliar em relação aos intervalos.
start	Obrigatória. Número inteiro que é o início do intervalo geral de números. O número não pode ser menor que 0.
stop	Obrigatória. Número inteiro que é o final do intervalo geral de números. O número não pode ser igual ou menor que start.
Comentários

A função Partition identifica o intervalo específico no qual number está e retorna uma Variant (String) que descreve esse intervalo. A função Partition é mais útil em consultas. Você pode criar uma consulta seleção que mostra quantos pedidos estão dentro de diversos intervalos, por exemplo, valores de pedido de 1 a 1000, 1001 a 2000, e assim por diante.

A tabela a seguir mostra como os intervalos são determinados usando-se três conjuntos de partes start, stop e interval. As colunas Primeiro intervalo e Último intervalo mostram o que Partition retorna. Os intervalos são representados por lowervalue:uppervalue, onde o extremo inferior (lowervalue) do intervalo é separado do extremo superior (uppervalue) por dois-pontos (:).

start	stop	interval	Antes do primeiro	Primeiro intervalo	Último intervalo	Depois do último
0	99	5	"   :-1"	"      0:  4"	"     95: 99"	"   100:   "
20	199	10	"   :  19"	"    20:  29"	"   190: 199"	"   200:   "
100	1010	20	"   :   99"	"  100:  119"	" 1000: 1010"	" 1011:   "
Na tabela acima, a terceira linha mostra o resultado quando start e stop definem um conjunto de números que não podem ser igualmente divididos por interval. O último intervalo estende-se até stop (11 números) embora interval seja 20.

Se for necessário, Partition retorna um intervalo com espaços de preenchimento suficientes para que haja o mesmo número de caracteres à esquerda e à direita de dois-pontos que o número de caracteres em stop mais um. Isto garante que, se você usar Partition com outros números, o texto resultante será devidamente tratado durante qualquer operação de classificação subseqüente.

Se interval for 1, o intervalo será number:number, independentemente dos argumentos start e stop. Por exemplo, se interval for 1, number for 100 e stop for 1000, Partition retornará "  100:  100".

Se qualquer uma das partes for Nulo, Partition retornará um Null.


Instrução Select Case

Executa um dos diversos grupos de instruções, dependendo do valor de uma expressão.

Sintaxe

Select Case testexpression
[Case expressionlist-n
[statements-n]] ...
[Case Else
[elsestatements]]

End Select

A sintaxe da instrução Select Case possui as seguintes partes:

Parte	Descrição
testexpression	Obrigatória. Qualquer expressão numérica ou expressão de seqüência.
expressionlist-n	Obrigatória se aparecer Case. Lista delimitada de uma ou mais das seguintes formas: expression, expression To expression, Is comparisonoperator expression. A palavra-chave To especifica um intervalo de valores. Se você usar a palavra-chave To, o valor menor deve aparecer antes de To. Use a palavra-chave Is com operadores de comparação (exceto Is e Like) para especificar um intervalo de valores. Se não for fornecida, a palavra-chave Is será inserida automaticamente.
statements-n	Opcional. Uma ou mais instruções são executadas se testexpression coincidir com qualquer parte de expressionlist-n.
elsestatements	Opcional. Uma ou mais instruções são executadas se testexpression não coincidir com qualquer das cláusulas Case.
Comentários

Se testexpression coincidir com qualquer expressão Case expressionlist, as statements seguintes àquela cláusula Case serão executadas até a próxima cláusula Case, ou, para a última cláusula, até End Select. Então o controle passa para a instrução seguinte a End Select. Se testexpression coincidir com uma expressão expressionlist em mais de uma cláusula Case, somente as instruções seguintes à primeira coincidência serão executadas.

A cláusula Case Else é usada para indicar as elsestatements a serem executadas se não for encontrada coincidência entre testexpression e uma expressionlist em qualquer das outras seleções Case. Embora não seja necessário, é uma boa idéia ter uma instrução Case Else no seu bloco Select Case para tratar valores testexpression não previstos. Se nenhuma Case expressionlist corresponder a testexpression e não houver instrução Case Else, a execução continua na instrução seguinte a End Select.

Você pode usar múltiplas expressões ou intervalos em cada cláusula Case. Por exemplo, a linha a seguir é válida:

Case 1 To 4, 7 To 9, 11, 13, Is > MaxNumber

Observação   O operador de comparação Is não é igual à palavra-chave Is usada na instrução Select Case.

Você também pode especificar intervalos e múltiplas expressões para seqüências de caracteres. No exemplo a seguir, Case corresponde a seqüências que são exatamente iguais a tudo, seqüências que ficam entre nozes e sopa em ordem alfabética e o valor atual de TestItem:

Case "tudo", "nozes" To "sopa", TestItem

As instruções Select Case podem ser aninhadas. Cada instrução Select Case aninhada deve ter uma instrução End Select correspondente.


Função Shell

Executa um programa executável e retorna uma Variant (Double) que representa a identificação da tarefa do programa, se tiver êxito, caso contrário, retorna zero.

Sintaxe

Shell(pathname[,windowstyle])

A sintaxe da função Shell tem os seguintes argumentos nomeados:

Parte	Descrição
pathname	Obrigatória; Variant (String). Nome do programa a ser executado e qualquer alternativa de argumentos ou linha de comando obrigatória; pode incluir diretório ou pasta e unidade. No Macintosh, você pode usar a função MacID para especificar a assinatura de um aplicativo em vez do seu nome. O exemplo a seguir usa a assinatura para o Microsoft Word:  Shell MacID("MSWD")
windowstyle	Opcional. Variant (Integer) correspondente ao estilo da janela na qual o programa deve ser executado. Se windowstyle for omitido, o programa iniciará minimizado com foco. No Macintosh (Sistema 7.0 ou mais recente), windowstyle determina somente se o aplicativo obtém ou não o foco quando é executado.
O argumento nomeado windowstyle possui os seguintes valores:

Constante	Valor	Descrição
vbHide	0	A janela fica oculta e o foco é passado para a janela oculta. A constante vbHide não se aplica à plataformas Macintosh.
vbNormalFocus	1	A janela tem foco e é restaurada para seu tamanho e posição originais.
vbMinimizedFocus	2	A janela é exibida como um ícone com foco.
vbMaximizedFocus	3	A janela é maximizada com foco.
vbNormalNoFocus	4	A janela é restaurada para seu tamanho e posição mais recentes. A janela atualmente ativa permanece ativa.
vbMinimizedNoFocus	6	A janela é exibida como um ícone. A janela atualmente ativa permanece ativa.
Comentários

Se a função Shell executar o arquivo nomeado com êxito, retornará a identificação da tarefa do programa iniciado. A identificação da tarefa é um número exclusivo que identifica o programa em execução. Se a função Shell não puder iniciar o programa nomeado, ocorrerá um erro.

No Macintosh, vbNormalFocus, vbMinimizedFocus e vbMaximizedFocus posicionam o aplicativo em primeiro plano; vbHide, vbNoFocus, vbMinimizeFocus o posicionam em segundo plano.

Observação   Por padrão, a função Shell executa outros programas assincronamente. Isso significa que um programa iniciado com Shell poderá não concluir a execução antes que as instruções seguintes à função Shell sejam executadas.


Instrução Stop

Suspende a execução.

Sintaxe

Stop

Comentários

Você pode posicionar instruções Stop em qualquer lugar dos procedimentos para suspender a execução. O uso da instrução Stop é semelhane à definição de um ponto de interrupção no código.

A instrução Stop suspende a execução, mas, ao contrário de End, não fecha nenhum arquivo nem limpa variáveis, a menos que esteja em um arquivo executável (.exe) compilado.


Função Switch

Avalia uma lista de expressões e retorna um valor de Variant ou uma expressão associada à primeira expressão da lista que seja True.

Sintaxe

Switch(expr-1, value-1[, expr-2, value-2 … [, expr-n,value-n]])

A sintaxe da função Switch possui as seguintes partes:

Parte	Descrição
expr	Obrigatória. Expressão de variante que você deseja avaliar.
value	Obrigatória. Valor ou expressão a ser retornada se a expressão correspondente for True.
Comentários

A lista de argumentos da função Switch consiste em pares de expressões e valores. As expressões são avaliadas da esquerda para a direita e o valor associado à primeira expressão avaliada como True é retornado. Se as partes não estiverem corretamente dispostas em par, ocorrerá um erro em tempo de execução. Por exemplo, se expr-1 for True, Switch retornará value-1. Se expr-1 for False, mas expr-2 for True, Switch retornará value-2, e assim por diante.

Switch retorna um valor Nulo se:

•	Nenhuma das expressões for True.

•	A primeira expressão True tiver um valor correspondente que seja Null.

Switch avalia todas as expressões, mesmo que retorne apenas uma delas. Por isso, você deve observar se existem efeitos colaterais indesejáveis. Por exemplo, se a avaliação de qualquer expressão resultar em um erro de divisão por zero, ocorrerá um erro.


Instrução While...Wend

Executa uma série de instruções desde que uma determinada condição seja True.

Sintaxe

While condition
[statements]

Wend

A sintaxe da instrução While...Wend possui as seguintes partes:

Parte	Descrição
condition	Obrigatória. Expressão numérica ou expressão de seqüência que avalia como True ou False. Se condition for Null, ela será tratada como False.
statements	Opcional. Uma ou mais instruções executadas enquanto a condição for True.
Comentários

Se condition for True, todas as statements serão executadas até que a instrução Wend seja encontrada. Então o controle retorna para a instrução While e condition é novamente verificada. Se condition ainda for True, o processo é repetido. Se não for True, a execução continua com a instrução seguinte à instrução Wend.

Os loops While...Wend podem ser aninhados a qualquer nível. Cada Wend corresponde ao mais recente While.

Dica   A instrução Do...Loop fornece um meio mais estruturado e flexível para executar um loop.


Instrução With

Executa uma série de instruções em um objeto ou em um tipo definido pelo usuário.

Sintaxe

With object
[statements]

End With

A sintaxe da instrução With possui as seguintes partes:

Parte	Descrição
object	Obrigatória. Nome de um objeto ou um tipo definido pelo usuário.
statements	Opcional. Uma ou mais instruções a serem executadas em object.
Comentários

A instrução With permite executar uma série de instruções em um objeto específico sem requalificar o nome do objeto. Por exemplo, para alterar um número de diferentes propriedades de um objeto, posicione as instruções de atribuição de propriedades dentro da estrutura de controle With, referindo-se ao objeto uma vez em vez de fazê-lo em todas as atribuições de propriedade. O exemplo a seguir ilustra o uso da instrução With para atribuir valores a diversas propriedades do mesmo objeto.

With MyLabel

.Height = 2000

.Width = 2000

.Caption = "Este é MyLabel"

End With

Observação   Uma vez inserido um bloco With, object não pode ser alterado. Como resultado, você não pode usar uma única instrução With para afetar um número de diferentes objetos.

Você pode aninhar instruções With posicionando um bloco With dentro do outro. Entretanto, em razão de os membros de blocos With externos ficarem mascarados dentro dos blocos With internos, você deve fornecer uma referência de objeto totalmente qualificada em um bloco With interno para qualquer membro de um objeto existente em um bloco With externo.

Observação   Em geral, recomenda-se que você não salte para dentro ou para fora de blocos With. Se as instruções em um bloco With forem executadas, mas a instrução With ou End With não for, uma variável temporária contendo uma referência ao objeto permanecerá na memória até que você saia do procedimento.


Exemplo da função Asc

Este exemplo usa a função Asc para retornar um código de caractere que corresponde à primeira letra da seqüência.

Dim MyNumber

MyNumber = Asc("A")	' Retorna 65.

MyNumber = Asc("a")	' Retorna 97.

MyNumber = Asc("Amora")	' Retorna 65.


Exemplo da função CBool

Este exemplo usa a função CBool para converter uma expressão em um Boolean. Se a expressão avaliar como um valor diferente de zero, CBool retornará True; caso contrário, retornará False.

Dim A, B, Check

A = 5: B = 5	' Inicialize variáveis.

Check = CBool(A = B)	' Check contém True.

A = 0	' Defina a variável.

Check = CBool(A)	' Check contém False.


Exemplo da função CByte

Este exemplo usa a função CByte para converter uma expressão em um Byte.

Dim MyDouble, MyByte

MyDouble = 125.5678	' MyDouble é um Double.

MyByte = CByte(MyDouble)	' MyByte contém 126.


Exemplo da função CDate

Este exemplo usa a função CDate para converter uma seqüência em um Date. Em geral, codificar datas e horas como seqüências (conforme exibido neste exemplo) não são recomendadas. Em vez disso, use literais de data e literais de hora, como #2/12/1969# e #4:45:23 PM#.

Dim MyDate, MyShortDate, MyTime, MyShortTime

MyDate = "12 de fevereiro de 1969"	' Defina a data.

MyShortDate = CDate(MyDate)	' Converta para tipo de dados Date.

MyTime = "4:35:47 PM"	' Defina a hora.

MyShortTime = CDate(MyTime)	' Converta para tipo de dados Date.


Exemplo da função CCur

Este exemplo usa a função CCur para converter uma expressão em um Currency.

Dim MyDouble, MyCurr

MyDouble = 543,214588	' MyDouble é um Double.

MyCurr = CCur(MyDouble * 2)	' Converta o resultado de MyDouble * 2

' (1086.429176) em um

' Currency (1086.4292).


Exemplo da função CDbl

Este exemplo usa a função CDbl para converter uma expressão em um Double.

Dim MyCurr, MyDouble

MyCurr = CCur(234.456784)	' MyCurr é um Currency.

MyDouble = CDbl(MyCurr * 8.2 * 0.01)	' Converta o resultado em um Double.


Exemplo da função CInt

Este exemplo usa a função CInt para converter um valor em um Integer.

Dim MyDouble, MyInt

MyDouble = 2345,5678	' MyDouble é um Double.

MyInt = CInt(MyDouble)	' MyInt contém 2346.


Exemplo da função CLng

Este exemplo usa a função CLng para converter um valor em um Long.

Dim MyVal1, MyVal2, MyLong1, MyLong2

MyVal1 = 25427.45: MyVal2 = 25427.55	' MyVal1 e MyVal2 são Doubles.

MyLong1 = CLng(MyVal1)	' MyLong1 contém 25427.

MyLong2 = CLng(MyVal2)	' MyLong2 contém 25428.


Exemplo da função CSng

Este exemplo usa a função CSng para converter um valor em um Single.

Dim MyDouble1, MyDouble2, MySingle1, MySingle2

' MyDouble1, MyDouble2 são Doubles.

MyDouble1 = 75.3421115: MyDouble2 = 75.3421555

MySingle1 = CSng(MyDouble1)	' MySingle1 contém 75.34211.

MySingle2 = CSng(MyDouble2)	' MySingle2 contém 75.34216.


Exemplo da função CStr

Este exemplo usa a função CStr para converter um valor numérico em um String.

Dim MyDouble, MyString

MyDouble = 437,324	' MyDouble é um Double.

MyString = CStr(MyDouble)	' MyString contém "437.324".


Exemplo da função CVar

Este exemplo usa a função CVar para converter uma expressão em uma Variant.

Dim MyInt, MyVar

MyInt = 4534	' MyInt é um Integer.

MyVar = CVar(MyInt & "000")	' MyVar contém a seqüência

' 4534000.


Exemplo da função CVErr

Este exemplo usa a função CVErr para retornar uma Variant cujo VarType é vbError (10). A função definida pelo usuário CalculateDouble retorna um erro se o argumento passado a ela não for um número. Você pode usar CVErr para retornar erros definidos pelo usuário de procedimentos definidos pelo usuário ou para adiar o tratamento de um erro em tempo de execução. Use a função IsError para testar se o valor representa um erro.

' Chama CalculateDouble com um argumento de produção de erro.

Sub Test()

Debug.Print CalculateDouble("345.45robert")

End Sub

' Defina o procedimento da função CalculateDouble.

Function CalculateDouble(Number)

If IsNumeric(Number) Then

CalculateDouble = Number * 2	' Retorna resultado.

Else

CalculateDouble = CVErr(2001)	' Retorna um número de erro definido pelo

End If	' usuário.

End Function


Exemplo da função Val

Este exemplo usa a função Val para retornar os números contidos em uma seqüência.

Dim MyValue

MyValue = Val("2457")	' Retorna 2457.

MyValue = Val(" 2 45 7")	' Retorna 2457.

MyValue = Val("24 e 57")	' Retorna 24.


Exemplo da função CDec

Este exemplo usa a função CDec para converter um valor numérico em um Decimal.

Dim MyDecimal, MyCurr

MyCurr = 10000000.0587	' MyCurr é um Currency.

MyDecimal = CDec(MyCurr) 	' MyDecimal é um Decimal.


Funções de conversão

Função Asc

Função CBool

Função CByte

Função CCur

Função CDate

Função CDec

Função CDbl

Função Chr

Função CInt

Função CLng

Função CSng

Função CStr

Função CVar

Função CVErr

Função Format

Função Hex

Função Oct

Função Str

Função Val


Função Asc

Retorna um Número inteiro que representa o código de caractere correspondente à primeira letra de uma seqüência.

Sintaxe

Asc(string)

O argumento string obrigatório é qualquer expressão de seqüência válida. Se string não contiver caracteres, ocorrerá um erro em tempo de execução.

Comentários

O intervalo de retornos é de 0 a 255 em sistemas não-DBCS, mas de –32768 a 32767 em sistemas DBCS.

Observação   A função AscB é usada com os dados de byte contidos em uma seqüência. Em vez de retornar o código do primeiro caractere, AscB retorna o primeiro byte. A função AscW retorna o código de caractere Unicode exceto em plataformas que não suportem Unicode, caso em que o comportamento dessa função é idêntico ao da função Asc.

Observação   O Visual Basic para o Macintosh não dá suporte às seqüências Unicode. Portanto, AscW(n) não pode retornar todos os caracteres Unicode para valores n no intervalo de 128 a 65.535, como ocorre no ambiente Windows. Em vez disso, AscW(n) tenta uma "estimativa melhor" para valores n Unicode maiores que 127. Portanto, você não deve usar AscW no ambiente Macintosh.


Função CVErr

Retorna uma Variant de subtipo Error que contém um número de erro especificado pelo usuário.

Sintaxe

CVErr(errornumber)

O argumento errornumber obrigatório pode ser qualquer número de erro válido.

Comentários

Use a função CVErr para criar erros definidos pelo usuário em procedimentos criados pelo usuário. Por exemplo, se você criar uma função que aceite vários argumentos e normalmente retorna uma seqüência, você poderá fazer com que sua função avalie os argumentos de entrada para certificar-se de que eles estejam dentro do intervalo aceitável. Caso não estejam, é provável que sua função não retorne o esperado. Nesse caso, CVErr permite retornar um número do erro que informe a ação a ser tomada.

Observe que a conversão implícita de um Error não é permitida. Por exemplo, você não pode atribuir diretamente o valor retornado de CVErr a uma variável que não seja uma Variant. No entanto, você pode executar uma conversão explícita (usando CInt, CDbl, etc.) do valor retornado por CVErr e atribuí-la a uma variável do tipo de dados apropriado.


Função Val

Retorna os números contidos em uma seqüência como um valor numérico do tipo apropriado.

Sintaxe

Val(string)

O argumento string obrigatório é qualquer expressão de seqüência válida.

Comentários

A função Val pára a leitura da seqüência no primeiro caractere que não reconhecer como parte de um número. Os símbolos e caracteres que normalmente são considerados partes de valores numéricos, como o símbolo de dólar e vírgulas, não são reconhecidos. No entanto, a função reconhece os prefixos de radicais &O (para octal) e &H (para hexadecimal). Os espaços em branco, tabulações e caracteres de alimentação de linha são retirados do argumento.

O exemplo a seguir retorna o valor 1615198:

Val("    1615 198th Street N.E.")

No código abaixo, Val retorna o valor decimal -1 para o valor hexadecimal exibido:

Val("&HFFFF")

Observação   A função Val reconhece somente o ponto (.) como um separador decimal válido. Quando separadores decimais diferentes forem usados, como em aplicativos internacionais, use CDbl para converter uma seqüência em um número.


Funções de conversão de tipos

Cada função converte uma expressão em um tipo de dados específico.

Sintaxe

CBool(expression)

CByte(expression)

CCur(expression)

CDate(expression)

CDbl(expression)

CDec(expression)

CInt(expression)

CLng(expression)

CSng(expression)

CStr(expression)

CVar(expression)

O argumento expression obrigatório é qualquer expressão de seqüência ou expressão numérica.

Tipos retornados

O nome da função determina o tipo retornado, como exibido a seguir:

Função	Tipo retornado	Intervalo do argumento expression
Cbool	Boolean	Qualquer seqüência ou expressão numérica válida.
Cbyte	Byte	de 0 a 255.
Ccur	Currency	de -922.337.203.685.477,5808 922.337.203.685.477,5807.
Cdate	Date	Qualquer expressão de data válida.
CDbl	Double	de -1,79769313486231E308 a  -4,94065645841247E-324 para valores negativos; de 4.94065645841247E-324 a 1,79769313486232E308 para valores positivos.
Cdec	Decimal	+/-79.228.162.514.264.337.593.543.950.335, para números inteiros, isto é, números sem casas decimais. Para números com 28 casas decimais, o intervalo é  +/-7,9228162514264337593543950335. O menor número possível diferente de zero é 0,0000000000000000000000000001.
Cint	Integer	de -32.768 a 32.767; as frações são arredondadas.
CLng	Long	de -2.147.483.648 2.147.483.647; as frações são arredondadas.
CSng	Single	de -3,402823E38 a -1,401298E-45, para valores negativos; de 1,401298E-45 a 3,402823E38, para valores positivos.
CStr	String	Retornos para CStr dependem do argumento expression.
Cvar	Variant	Mesmo intervalo de Double para valores numéricos. Mesmo intervalo de String para valores não-numéricos.
Comentários

Se a expression passada para a função estiver fora do intervalo do tipo de dados para o qual se está convertendo, ocorrerá um erro.

Em geral, você pode documentar seu código usando as funções de conversão de tipo de dados para mostrar que o resultado de alguma operação deve ser expresso como um tipo de dados específico em vez do tipo de dados padrão. Por exemplo, use CCur para forçar o cálculo monetário nos casos onde normalmente ocorreriam cálculos de precisão simples, dupla precisão ou de número inteiro.

Você deve usar as funções de conversão de tipo de dados em vez de Val para fornecer conversões de dados internacionais de um tipo de dados para outro. Por exemplo, quando você usa CCur, separadores decimais diferentes, separadores de milhar diferentes e várias opções de moeda são reconhecidos de forma apropriada, dependendo da configuração da localidade em seu computador.

Quando a parte fracionária equivaler exatamente a 0,5, CInt e CLng sempre a arredondarão para o número par mais próximo. Por exemplo, 0,5 é arredondado para 0 e 1,5 para 2. CInt e CLng diferem das funções Fix e Int, que truncam, em vez de arredondar, a parte fracionária de um número. Além disso, Fix e Int sempre retornam um valor do mesmo tipo do valor passado para elas.

Use a função IsDate para determinar se o date pode ser convertido em uma data ou hora. CDate reconhece os literais de data e literais de hora, assim como alguns números contidos no intervalo de datas aceitáveis. Durante a conversão de um número para uma data, a parte relativa ao número inteiro é convertida em uma data. Qualquer parte fracionária do número é convertida em uma hora do dia, a partir de meia-noite.

CDate reconhece os formatos de data de acordo com a configuração de localidade de seu sistema. A ordem correta de dia, mês e ano poderá não ser determinada se for fornecida em um formato diferente das configurações de data reconhecidas. Além disso, o formato de data longo não será reconhecido se também contiver a seqüência de dias da semana.

Uma função CVDate também é fornecida para manter a compatibilidade com as versões anteriores do Visual Basic. A sintaxe da função CVDate é idêntica à da função CDate. Entretanto, CVDate retorna uma Variant cujo subtipo é Date em vez de um tipo Date real. Como agora já existe um tipo Date intrínseco, não há mais necessidade de CVDate. O mesmo efeito pode ser obtido através da conversão de uma expressão em Date e da atribuição da mesma a uma Variant. Essa técnica é consistente com a conversão de todos os outros tipos intrínsecos em seus subtipos Variant equivalentes.

Observação   A função CDec não retorna um tipo de dados discreto; em vez disso, ela sempre retorna uma Variant cujo valor tenha sido convertido em um subtipo Decimal.


Retornos de CStr

Se expression for	CStr retornará
Boolean	Uma seqüência que contém True ou False
Date	Uma seqüência que contém uma data no formato abreviado do seu sistema
Nulo	Um erro em tempo de execução
Vazio	Uma seqüência de comprimento zero ("")
Error	Uma seqüência que contém a palavra Error seguida pelo número do erro
Outros valores numéricos	Uma seqüência que contém o número


Tipo de dados Boolean

As variáveis Boolean são armazenadas como números de 16 bits (2 bytes), mas só podem ser True ou False. As variáveis Boolean são exibidas como True ou False (quando é usado Print) ou #TRUE# ou #FALSE# (quando é usado Write #). Use as palavras-chave True e False para atribuir um dos dois estados a variáveis Boolean.

Quando outros tipos numéricos são convertidos em valores Boolean, 0 torna-se False e todos os outros valores tornam-se True. Quando os valores Boolean são convertidos em outros tipos de dados False torna-se 0 e True torna-se -1.


Tipo de dados Byte

As variáveis Byte são armazenadas como números de 8 bits (1 byte), sem sinal, únicos, que variam em valor de 0 a 255.

O tipo de dados Byte é útil para conter dados binários.


Tipo de dados Currency

As variáveis Currency são armazenadas como números de 64 bits (8 bytes) em um formato de número inteiro, em escala de 10.000 para fornecer um número de ponto fixo com 15 dígitos à esquerda da vírgula decimal e 4 dígitos à direita. Essa representação fornece um intervalo de -922.337.203.685.477,5808 até 922.337.203.685.477,5807. O caractere de declaração de tipo para Currency é o sinal de arroba (@).

O tipo de dados Currency é útil para cálculos que envolvem dinheiro e cálculos de ponto fixo, nos quais a precisão é especialmente importante.


Resumo de tipo de dados

A tabela a seguir mostra os tipos de dados com suporte, incluindo tamanhos de armazenamento e intervalos.

Tipo de dados	Tamanho de armazenamento	Intervalo
Byte	1 byte	de 0 a 255
Boolean	2 bytes	True ou False
Integer	2 bytes	de -32.768 a 32.767
Long (número inteiro longo)	4 bytes	de -2.147.483.648 a 2.147.483.647
Single (vírgula flutuante de precisão simples)	4 bytes	de –3,402823E38 a -1,401298E-45 para valores negativos; de 1,401298E-45 a 3,402823E38 para valores positivos
Double (vírgula flutuante de dupla precisão)	8 bytes	de –1,79769313486231E308 a  -4,94065645841247E-324 para valores negativos; de 4,94065645841247E-324 a 1,79769313486232E308 para valores positivos.
Currency (número inteiro em escala)	8 bytes	de -922.337.203.685.477,5808 a 922.337.203.685.477,5807
Decimal	14 bytes	+/-79.228.162.514.264.337.593.543.950.335 sem vírgula decimal;  +/-7,9228162514264337593543950335 com 28 casas decimais à direita; o menor número diferente de zero é  +/-0,0000000000000000000000000001.
Date	8 bytes	De 1 de janeiro de 100 a 31 de dezembro de 9999
Objeto	4 bytes	Qualquer referência Object
String  (comprimento variável)	10 bytes + comprimento da seqüência	De 0 a aproximadamente 2 bilhões
String (comprimento fixo)	Comprimento da seqüência	De 1 a aproximadamente 65.400
Variant (com números)	16 bytes	Qualquer valor numérico até o intervalo de um Double
Variant (com caracteres)	22 bytes + comprimento da seqüência	O mesmo intervalo de String de comprimento variável
Definido pelo usuário  (usando Type)	Número requerido por elementos	O intervalo de cada elemento é igual ao intervalo do seu tipo de dados.
Observação   Matrizes de qualquer tipo de dados requerem 20 bytes de memória, mais 4 bytes para cada dimensão da matriz, mais o número de bytes ocupados pelos próprios dados. A memória ocupada pelos dados pode ser calculada multiplicando-se o número de elementos de dados pelo tamanho de cada elemento. Por exemplo, os dados em uma matriz de dimensão única, que consiste em quatro elementos de dados Integer de 2 bytes cada, ocupam 8 bytes. Os 8 bytes exigidos para os dados, mais os 24 bytes fixos, fazem com que o requisito de memória total para a matriz seja de 32 bytes.

Uma Variant que contém uma matriz requer 12 bytes a mais do que uma matriz sozinha.

Observação   Use a função StrConv para converter um tipo de dados de seqüência para outro.


Tipo de dados Date

As variáveis Date são armazenadas como números IEEE de ponto flutuante de 64 bits (8 bytes) que representam as datas que variam de 1 de janeiro de 100 a 31 de dezembro de 9999 e as horas de 0:00:00 a 23:59:59. Qualquer valor literal de data reconhecível pode ser atribuído a variáveis Date. Os literais date devem estar entre sinais (#), por exemplo, #1 de janeiro de 1993# ou #1 jan 93#.

As variáveis Date exibem as datas de acordo com o formato abreviado de data reconhecido por seu computador. As horas são exibidas de acordo com o formato de hora (12 ou 24 horas) reconhecido por seu computador.

Quando outros tipos numéricos são convertidos em Date, os valores à esquerda do decimal representam informações de data, enquanto os valores à direita do decimal representam horas.  Meia-noite é 0 e meio-dia é 0,5. Números inteiros negativos representam datas anteriores a 30 de dezembro de 1899.


Tipo de dados Decimal

As variáveis Decimal são armazenadas como números inteiros, sinalizados, de 96 bits (12 bytes), em escala por uma potência de 10 variável. O fator de escala potência de 10 especifica o número de dígitos à direita da vírgula decimal e varia de 0 a 28. Com uma escala de 0 (sem casas decimais), o maior valor possível é +/-79.228.162.514.264.337.593.543.950.335. Com 28 casas decimais, o maior valor é +/-7,9228162514264337593543950335 e o menor valor, diferente de zero, é +/-0,0000000000000000000000000001.

Observação   Atualmente, o tipo de dados Decimal pode ser usado somente dentro de uma Variant, ou seja, você não pode declarar uma variável como sendo do tipo Decimal. No entanto, você pode criar uma Variant com o subtipo Decimal usando a função CDec.


Tipo de dados Double

As variáveis Double (vírgula flutuante de dupla precisão) são armazenadas como números IEEE de vírgula flutuante de 64 bits (8 bytes), com valor no intervalo de -1,79769313486232E308 a -4,94065645841247E-324 para valores negativos e de 4,94065645841247E-324 a 1,79769313486232E308 para valores positivos. O caractere de declaração de tipo para Double é o sinal #.


Tipo de dados Integer

As variáveis Integer são armazenadas como números de 16 bits (2 bytes) com valor no intervalo de -32.768 a 32.767. O caractere de declaração de tipo para Integer é o sinal de porcentagem (%).

As variáveis Integer também podem ser usadas para representar valores enumerados. Um valor enumerado pode conter um conjunto finito de números inteiros exclusivos, cada um com um significado especial no contexto em que é usado. Os valores enumerados oferecem uma forma conveniente de selecionar dentre um número conhecido de opções, por exemplo, preto = 0, branco = 1 e assim por diante. É boa prática de programação definir constantes usando a instrução Const para cada valor enumerado.


Tipo de dados Long

As variáveis Long (inteiro longo) são armazenadas como números de 32 bits (4 bytes), sinalizados, no intervalo de -2.147.483.648 a 2.147.483.647. O caractere de declaração de tipo para Long é o ‘E’ comercial (&).


Tipo de dados Object

As variáveis Object são armazenadas como endereços de 32 bits (4 bytes) que se referem a objetos. Usando a instrução Set, uma variável declarada como um Object pode ter qualquer referência a objeto atribuída a ela.

Observação   Embora uma variável declarada com tipo Object seja flexível o suficiente para conter uma referência a qualquer objeto, a ligação ao objeto ao qual essa variável faz referência é sempre posterior (ligação em tempo de execução). Para forçar a ligação anterior (ligação em tempo de compilação), atribua a referência de objeto a uma variável declarada com um nome de classe específico.


Tipo de dados Single

As variáveis Single (vírgula flutuante de precisão simples) são armazenadas como números IEEE de vírgula flutuante de 32 bits (4 bytes), com valor no intervalo de -3,402823E38 a -1,401298E-45 para valores negativos e de 1,401298E-45 a 3,402823E38 para valores positivos. O caractere de declaração de tipo para Single é o ponto de exclamação (!).


Tipo de dados String

Existem dois tipos de seqüência: seqüências de comprimento variável e de comprimento fixo.

•	Uma seqüência de comprimento variável pode conter até aproximadamente 2 bilhões (2^31) de caracteres.

•	Uma seqüência de comprimento fixo pode conter de 1 até aproximadamente 64K (2^16) de caracteres.

Observação   Uma seqüência de comprimento fixo Public não pode ser usada em um módulo de classe.

Os códigos para caracteres String variam de 0 a 255. Os primeiros 128 caracteres (de 0 a 127) do conjunto de caracteres correspondem às letras e aos símbolos de um teclado padrão norte-americano e são iguais àqueles definidos pelo conjunto de caracteres ASCII. Os 128 caracteres (de 128 a 255) seguintes representam caracteres especiais, como letras de alfabetos internacionais, acentos, símbolos de moeda e frações. O caractere de declaração de tipo para String é o cifrão ($).


Tipo de dados definido pelo usuário

Qualquer tipo de dados que você define usando a instrução Type. Os tipos de dados definidos pelo usuário podem conter um ou mais elementos de um tipo de dados, uma matriz ou um tipo definido pelo usuário anteriormente definido. Por exemplo:

Type MyType

MyName As String	' A variável String armazena um nome.

MyBirthDate As Date	' A variável Date armazena uma data de nascimento.

MySex As Integer	' A variável Integer armazena o sexo (0 para

End Type	' feminino, 1 para masculino).


Tipo de dados Variant

O tipo de dados Variant é o tipo de dados para todas as variáveis que não estejam explicitamente declaradas como algum outro tipo (usando instruções como Dim, Private, Public ou Static). O tipo de dados Variant não possui caractere de declaração de tipo.

Uma Variant é um tipo especial de dados que pode conter qualquer tipo de dados, exceto dados String de comprimento fixo. (Os tipos Variant agora dá suporte a tipos definidos pelo usuário.) Uma Variant também pode conter os valores especiais Empty, Error, Nothing e Null. Você pode determinar como os dados em uma Variant são tratados usando a função VarType ou TypeName.

Os dados numéricos podem ser qualquer valor de número inteiro ou real no intervalo de -1,797693134862315E308 a -4,94066E-324 para valores negativos e de 4,94066E-324 a 1,797693134862315E308 para valores positivos. Geralmente os dados numéricos Variant são mantidos em seu tipo de dados original dentro de Variant. Por exemplo, se você atribuir um Integer a uma Variant, as operações subseqüentes tratarão Variant como um Integer. Entretanto, se uma operação aritmética for realizada em uma Variant que contém um Byte, um Integer, um Long ou um Single e o resultado exceder o intervalo normal para o tipo de dados original, o resultado será promovido dentro da Variant para o próximo maior tipo de dados. Um Byte é promovido para um Integer, um Integer é promovido para um Long e um Long e um Single são promovidos para um Double. Ocorre um erro quando variáveis Variant contendo valores Currency, Decimal e Double excedem seus respectivos intervalos.

Você pode usar o tipo de dados Variant em vez de qualquer tipo de dados para trabalhar com dados de uma forma mais flexível. Se o conteúdo de uma variável Variant for dígitos, eles poderão ser a representação dos dígitos na seqüência ou seu valor real, dependendo do contexto. Por exemplo:

Dim MyVar As Variant

MyVar = 98052

No exemplo anterior, MyVar contém uma representação numérica—o valor real 98052. Os operadores aritméticos funcionam como esperado em variáveis Variant que contêm valores numéricos ou dados de seqüência que podem ser interpretados como números. Se você usar o operador + para adicionar MyVar a outra Variant que contém um número ou a uma variável de um tipo numérico, o resultado será uma soma aritmética.

O valor Empty denota uma variável Variant que não foi inicializada (atribuída um valor inicial). Uma Variant que contém Empty será 0, se for usada em um contexto numérico, e uma seqüência de comprimento zero (""), se for usada em um contexto de seqüência.

Não confunda Empty com Null. Null indica que a variável Variant, intencionalmente, não contém dados válidos.

Em uma Variant, Error é um valor especial usado para indicar que ocorreu uma condição de erro em um procedimento. No entanto, diferente de outros tipos de erros, não ocorre o tratamento de erros de nível de aplicação. Isso permite que você ou o próprio aplicativo realize alguma ação alternativa com base no valor do erro. Os valores de erro são criados pela conversão de números reais em valores de erro utilizando a função CVErr.


Exemplo da função Date

Este exemplo usa a função Date para retornar a data atual do sistema.

Dim MyDate

MyDate = Date	' MyDate contém a data atual do sistema.


Exemplo da instrução Date

Este exemplo usa a instrução Date para definir a data do sistema do computador. No ambiente de desenvolvimento, o literal de data é exibido em formato abreviado de data usando as definições de localidade do seu código.

Dim MyDate

MyDate = #12 de fevereiro de 1985#	' Atribua uma data.

Date = MyDate	' Altere a data do sistema.


Exemplo da função DateAdd

Este exemplo considera uma data e, usando a função DateAdd, exibe uma data correspondente em um número especificado de meses no futuro.

Dim FirstDate As Date	' Declara as variáveis.

Dim IntervalType As String

Dim Number As Integer

Dim Msg

IntervalType = "m"	' "m" especifica meses como intervalo.

FirstDate = InputBox("Insira uma data")

Number = InputBox("Insira o número de meses a adicionar")

Msg = "Nova data: " & DateAdd(IntervalType, Number, FirstDate)

MsgBox Msg


Exemplo da função DateDiff

Este exemplo usa a função DateDiff para exibir o número de dias entre uma determinada data e hoje.

Dim TheDate As Date	' Declara as variáveis.

Dim Msg

TheDate = InputBox("Insira uma data")

Msg = "Dias a partir de hoje: " & DateDiff("d", Now, TheDate)

MsgBox Msg


Exemplo da função DatePart

Este exemplo considera uma data e, usando a função DatePart, exibe o trimestre do ano em que ocorre.

Dim TheDate As Date	' Declara as variáveis.

Dim Msg

TheDate = InputBox("Insira uma data:")

Msg = "Trimestre: " & DatePart("q", TheDate)

MsgBox Msg


Exemplo da função DateSerial

Este exemplo usa a função DateSerial para retornar a data ao ano, mês e dia especificados.

Dim MyDate

' MyDate contém a data de 12 de fevereiro de 1985.

MyDate = DateSerial(1985, 2, 12)	' Retorne uma data.


Exemplo da função DateValue

Este exemplo usa a função DateValue para converter uma seqüência em uma data. Você pode também usar literais de data para atribuir diretamente uma data a uma variável Variant ou Date, por exemplo, MyDate = #2/12/69#.

Dim MyDate

MyDate = DateValue("12 de fevereiro de 1985")	' Retorne uma data.


Exemplo da função Day

Este exemplo usa a função Day para obter o dia do mês de uma data especificada. No ambiente de desenvolvimento, o literal de data é exibido em formato abreviado usando as definições de localidade do seu código.

Dim MyDate, MyDay

MyDate = #12 de fevereiro de 1985	' Atribua uma data.

MyDay = Day(MyDate)	' MyDay contém 12.


Exemplo da função Hour

Este exemplo usa a função Hour para obter a hora de um horário especificado. No ambiente de desenvolvimento, o literal de hora é exibido em formato abreviado de hora usando as definições de localidade do seu código.

Dim MyTime, MyHour

MyTime = #4:35:17 PM#	' Atribua um horário.

MyHour = Hour(MyTime)	' MyHour contém 16.


Exemplo da função Minute

Este exemplo usa a função Minute para obter o minuto da hora de um horário especificado. No ambiente de desenvolvimento, o literal de hora é exibido em formato abreviado de hora usando as definições de localidade do seu código.

Dim MyTime, MyMinute

MyTime = #4:35:17 PM#	' Atribua um horário.

MyMinute = Minute(MyTime)	' MyMinute contém 35.


Exemplo da função Month

Este exemplo usa a função Month para obter o mês de uma data especificada. No ambiente de desenvolvimento, o literal de data é exibido em formato abreviado de data usando as definições de localidade do seu código.

Dim MyDate, MyMonth

MyDate = #12 de fevereiro de 1985	' Atribua uma data.

MyMonth = Month(MyDate)	' MyMonth contém 2.


Exemplo da função Now

Este exemplo usa a função Now para retornar a data e a hora do sistema atual.

Dim Today

Today = Now	' Atribua data e hora atuais do sistema.


Exemplo da função Second

Este exemplo usa a função Second para obter o segundo do minuto de um horário especificado. No ambiente de desenvolvimento, o literal de hora é exibido em formato abreviado de hora usando as definições de localidade do seu código.

Dim MyTime, MySecond

MyTime = #4:35:17 PM#	' Atribua um horário.

MySecond = Second(MyTime)	' MySecond contém 17.


Exemplo da função Time

Este exemplo usa a função Time para retornar o horário atual do sistema.

Dim MyTime

MyTime = Time	' Retorne o horário atual do sistema.


Exemplo da instrução Time

Este exemplo usa a instrução Time para definir o horário do sistema do computador como um horário definido pelo usuário.

Dim MyTime

MyTime = #4:35:17 PM#	' Atribua um horário.

Time = MyTime	' Defina o horário do sistema como MyTime.


Exemplo da função Timer

Este exemplo usa a função Timer para pausar o aplicativo. O exemplo também usa DoEvents para submeter-se a outros processos durante a pausa.

Dim PauseTime, Start, Finish, TotalTime

If (MsgBox("Pressione Sim para pausar por 5 segundos", 4)) = vbYes Then

PauseTime = 5	' Defina a duração.

Start = Timer	' Defina a hora inicial.

Do While Timer < Start + PauseTime

DoEvents	' Submeta a outros processos.

Loop

Finish = Timer	' Defina a hora final.

TotalTime = Finish - Start	' Calcule o tempo total.

MsgBox "Fez pausa por " & TotalTime & " segundos"

Else

End

End If


Exemplo da função TimeSerial

Este exemplo usa a função TimeSerial para retornar um horário para a hora, minuto e segundo especificados.

Dim MyTime

MyTime = TimeSerial(16, 35, 17)	' MyTime contém a representação

' serial de 4:35:17 PM.


Exemplo da função TimeValue

Este exemplo usa a função TimeValue para converter uma seqüência em um horário. Você também pode usar literais de data para atribuir diretamente um horário a uma variável Variant ou Date, por exemplo, MyTime = #4:35:17 PM#.

Dim MyTime

MyTime = TimeValue("4:35:17 PM")	' Retorne um horário.


Exemplo da função Weekday

Este exemplo usa a função Weekday para obter o dia da semana a partir de uma data especificada.

Dim MyDate, MyWeekDay

MyDate = #12 de fevereiro de 1985	' Atribua uma data.

MyWeekDay = Weekday(MyDate)	' MyWeekDay contém 4 porque

' MyDate representa uma quarta-feira.


Exemplo da função Year

Este exemplo usa a função Year para obter o ano de uma data especificada. No ambiente de desenvolvimento, o literal de data é exibido em formato abreviado de data usando as definições de localidade do seu código.

Dim MyDate, MyYear

MyDate = #12 de fevereiro de 1985	' Atribua uma data.

MyYear = Year(MyDate)	' MyYear contém 1969.


Função Date

Retorna uma Variant (Date) que contém a data atual do sistema.

Sintaxe

Date

Comentários

Para definir a data do sistema, use a instrução Date.

O comportamento de Date, e o de Date$ se o calendário for Gregoriano, o comportamento não é alterado pela definição de propriedade Calendar. Se o calendário for Hijri, Date$ retorna uma seqüência de 10 caracteres no formato mm-dd-aaaa, onde mm (de 01 a 12), dd (de 01 a 30) e aaaa (de 1400 a 1523) são o mês, dia e ano de Hijri. O intervalo Gregoriano equivalente é 1º de janeiro de 1980 a 31 de dezembro de 2099.


Instrução Date

Define a data atual do sistema.

Sintaxe

Date = date

Para sistemas que executam o Microsoft Windows 95, a especificação date requerida deve ser uma data de 1º de janeiro de 1980 a 31 de dezembro de 2099. Para sistemas que executam o Microsoft Windows NT, date deve ser uma data de 1º de janeiro de 1980 a 31 de dezembro de 2079. Para Macintosh, date deve ser uma data de 1º de janeiro de 1904 a 5 de fevereiro de 2040.


Função DateAdd

Retorna uma Variant (Date) que contém uma data à qual foi adicionado um intervalo de tempo especificado.

Sintaxe

DateAdd(interval, number, date)

A sintaxe da função DateAdd tem os seguintes argumentos nomeados:

Parte	Descrição
interval	Obrigatório. Expressão de seqüência que é o intervalo de tempo que você deseja adicionar.
number	Obrigatório. Expressão numérica que é o número de intervalos que você deseja adicionar. Pode ser positivo (para obter datas no futuro) ou negativo (para obter datas no passado).
date	Obrigatório. Variant (Date) ou literal que representa a data à qual o intervalo é adicionado.
Definições

O argumento interval tem as seguintes configurações:

Definição	Descrição
yyyy	Ano
q	Trimestre
m	Mês
y	Dia do ano
d	Dia
w	Dia da semana
ww	Semana
h	Hora
n	Minuto
s	Segundo
Comentários

Você pode usar a função DateAdd para adicionar ou subtrair um intervalo de tempo especificado de uma data. Por exemplo, você pode usar DateAdd para calcular uma data de hoje a 30 dias ou uma hora a 45 minutos deste momento.

Para adicionar dias a date, você pode usar Dia do ano ("y"), Dia ("d") ou Dia da semana ("w").

A função DateAdd não retorna uma data inválida. O exemplo a seguir adiciona um mês a 31 de janeiro:

DateAdd("m", 1, "31-Jan-95")

Neste caso, DateAdd retorna 28-Fev-95 e não 31-Fev-95. Se date for 31-Jan-96, retornará 29-Fev-96, pois 1996 é um ano bissexto.

Se a data calculada for anterior ao ano 100 (isto é, você subtrair mais anos do que existem em date), ocorrerá um erro.

Se number não for um valor Long, ele será arredondado para o número inteiro mais próximo antes de ser avaliado.

Observação   O formato do valor retornado para DateAdd é determinado pelas configurações do Painel de controle e não pelo formato passado no argumento date.

Observação   Para date, se a definição de propriedade Calendar for Gregoriana, a data fornecida deverá ser Gregoriana. Se o calendário for Hijri, a data fornecida deverá ser Hijri. Se os valores de mês forem nomes, o nome deverá ser consistente com a definição de propriedade Calendar. Para minimizar a possibilidade de conflitos de nomes de meses com a definição de propriedade Calendar atual, insira valores de meses numéricos (formato de data abreviado).


Função DateDiff

Retorna uma Variant (Long) que especifica o número de intervalos de tempo entre duas datas especificadas.

Sintaxe

DateDiff(interval, date1, date2[, firstdayofweek[, firstweekofyear]])

A sintaxe da função DateDiff tem os seguintes argumentos nomeados:

Parte	Descrição
interval	Obrigatório. Expressão de seqüência que é o intervalo de tempo usado para calcular a diferença entre date1 e date2.
date1, date2	Obrigatório; Variant (Date). Duas datas que você deseja usar no cálculo.
firstdayofweek	Opcional. Uma constante que especifica o primeiro dia da semana. Se não for especificada, será considerado o domingo.
firstweekofyear	Opcional. Uma constante que especifica a primeira semana do ano. Se não for especificada, será considerada aquela em que ocorre o dia 1º de janeiro.
Definições

O argumento interval tem as seguintes configurações:

Definição	Descrição
yyyy	Ano
q	Trimestre
m	Mês
y	Dia do ano
d	Dia
w	Dia da semana
ww	Semana
h	Hora
n	Minuto
s	Segundo
O argumento firstdayofweek tem as seguintes configurações:

Constante	Valor	Descrição
vbUseSystem	0	Use a definição NLS API.
vbSunday	1	Domingo (padrão)
vbMonday	2	Segunda-feira
vbTuesday	3	Terça-feira
vbWednesday	4	Quarta-feira
vbThursday	5	Quinta-feira
vbFriday	6	Sexta-feira
vbSaturday	7	Sábado
Constante	Valor	Descrição
VbUseSystem	0	Use a definição NLS API.
VbFirstJan1	1	Inicie com a semana na qual ocorre o dia 1  de janeiro (padrão).
VbFirstFourDays	2	Inicie com a primeira semana que tem pelo menos quatro dias no ano novo.
VbFirstFullWeek	3	Inicie com a primeira semana completa do ano.
Comentários

Você pode usar a função DateDiff para determinar quantos intervalos de tempo especificados existem entre duas datas. Por exemplo, você pode usar DateDiff para calcular o número de dias entre duas datas ou o número de semanas entre hoje e o final do ano.

Para calcular o número de dias entre date1 e date2, você pode usar Dia do ano ("y") ou Dia ("d"). Quando interval for um Dia da semana ("w"), DateDiff retornará o número de semanas entre as duas datas. Se date1 cair em uma segunda-feira, DateDiff contará o número de segundas-feiras até date2. Ela contará date2, mas não contará date1. Entretanto, se interval for Semana ("ww"), a função DateDiff retornará o número de semanas de calendário entre as duas datas. Ela contará o número de domingos entre date1 e date2. DateDiff contará date2 se cair em um domingo, mas não contará date1, mesmo que caia em um domingo.

Caso date1 se refira a um ponto mais recente no tempo a date2, a função DateDiff retornará um número negativo.

O argumento firstdayofweek afeta cálculos que usam os símbolos de intervalo "w" e "ww".

Se date1 ou date2 for um literal de data, o ano especificado se torna uma parte permanente dessa data. Entretanto, se date1 ou date2 for colocada entre aspas duplas (" ") e você omitir o ano, o ano atual será inserido no seu código sempre que a expressão date1 ou date2 for avaliada. Isso torna possível criar código que pode ser usado em anos diferentes.

Ao comparar 31 de dezembro com 1º de janeiro do ano imediatamente seguinte, DateDiff para Ano ("yyyy") retornará 1, mesmo que tenha se passado apenas um dia.

Observação   Para date1 e date2, se a definição de propriedade Calendar for Gregoriana, a data fornecida deverá ser Gregoriana.  Se o calendário for Hijri, a data fornecida deverá ser Hijri.


Função DatePart

Retorna uma Variant (Integer) que contém a parte especificada de uma determinada data.

Sintaxe

DatePart(interval, date[,firstdayofweek[, firstweekofyear]])

A sintaxe da função DatePart tem os seguintes argumentos nomeados:

Parte	Descrição
interval	Obrigatório. Expressão de seqüência que é o intervalo de tempo que você deseja retornar.
date	Obrigatório. O valor Variant (Date) que você deseja avaliar.
firstdayofweek	Opcional. Uma constante que especifica o primeiro dia da semana. Se não for especificada, será considerado o domingo.
firstweekofyear	Opcional. Uma constante que especifica a primeira semana do ano. Se não for especificada, será considerada aquela em que ocorre o dia 1º de janeiro.
Definições

O argumento interval tem as seguintes configurações:

Definição	Descrição
yyyy	Ano
q	Trimestre
m	Mês
y	Dia do ano
d	Dia
w	Dia da semana
ww	Semana
h	Hora
n	Minuto
s	Segundo
O argumento firstdayofweek tem as seguintes configurações:

Constante	Valor	Descrição
vbUseSystem	0	Use a definição NLS API.
vbSunday	1	Domingo (padrão)
vbMonday	2	Segunda-feira
vbTuesday	3	Terça-feira
vbWednesday	4	Quarta-feira
vbThursday	5	Quinta-feira
vbFriday	6	Sexta-feira
vbSaturday	7	Sábado
O argumento firstweekofyear tem as seguintes configurações:

Constante	Valor	Descrição
vbUseSystem	0	Use a definição NLS API.
vbFirstJan1	1	Inicie com a semana na qual ocorre o dia 1  de janeiro (padrão).
vbFirstFourDays	2	Inicie com a primeira semana que tem pelo menos quatro dias no ano novo.
vbFirstFullWeek	3	Inicie com a primeira semana completa do ano.
Comentários

Você pode usar a função DatePart para avaliar uma data e retornar um intervalo de tempo específico. Por exemplo, você pode usar DatePart para calcular o dia da semana ou a hora atual.

O argumento firstdayofweek afeta cálculos que usam os símbolos de intervalo "w" e "ww".

Se date for um literal de data, o ano especificado se torna uma parte permanente dessa data. Entretanto, se date estiver entre aspas duplas (" ") e você omitir o ano, o ano atual será inserido no seu código sempre que a expressão date for avaliada. Isso torna possível criar código que pode ser usado em anos diferentes.

Observação   Para date, se a definição de propriedade Calendar for Gregoriana, a data fornecida deverá ser Gregoriana. Se o calendário for Hijri, a data fornecida deverá ser Hijri.

A parte da data retornada está nas unidades de período de tempo do calendário Árabe.  Por exemplo, se o calendário atual for Hijri e a parte da data a ser retornada for o ano, o valor do ano será um ano Hijri.


Função DateSerial

Retorna uma Variant (Date) para um ano, mês e dia especificados.

Sintaxe

DateSerial(year, month, day)

A sintaxe da função DateSerial tem os seguintes argumentos nomeados:

Parte	Descrição
year	Obrigatório; Integer. Número entre 100 e 9999, inclusive, ou uma expressão numérica.
month	Obrigatório; Integer. Qualquer expressão numérica.
day	Obrigatório; Integer. Qualquer expressão numérica.
Comentários

Para especificar uma data, como 31 de dezembro de 1991, o intervalo de números para cada argumento DateSerial deve estar no intervalo aceito para a unidade, isto é, de 1 a 31 para dias e de 1 a 12 para meses. Entretanto, você também pode especificar datas relativas para cada argumento usando qualquer expressão numérica que represente algum número de dias, meses ou anos, antes ou depois de uma determinada data.

O exemplo a seguir usa expressões numéricas em vez de números absolutos de data. Aqui a função DateSerial retorna uma data que é o dia anterior ao primeiro dia (1 - 1), dois meses antes de agosto (8 - 2), 10 anos antes de 1990 (1990 - 10); em outras palavras, 31 de maio de 1980.

DateSerial(1990 - 10, 8 - 2, 1 - 1)

No Windows 98 ou Windows 2000, anos de dois dígitos para o argumento year são interpretados com base nas configurações da máquina definidas pelo usuário. As configurações padrão são os valores entre 0 e 29, inclusive, interpretados como os anos de 2000 a 2029. Os valores padrão entre 30 e 99 são interpretados como os anos de 1930 a 1999. Para todos os demais argumentos year, use um ano de quatro dígitos (por exemplo, 1800).

Versões anteriores do Windows interpretam anos de dois dígitos com base nos padrões descritos acima. Para certificar-se de que a função retorne o valor apropriado, use um ano de quatro dígitos.

Quando qualquer argumento exceder o intervalo aceito para esse argumento, ele será incrementado até a próxima unidade maior, de modo adequado. Por exemplo, se você especificar 35 dias, ele será avaliado como um mês e alguns dias, dependendo em que época do ano seja aplicado. Se qualquer argumento único estiver fora do intervalo -32.768 a 32.767, ocorrerá um erro. Se a data especificada pelos três argumentos ficar fora do intervalo de datas aceitável, ocorrerá um erro.

Observação   Para year, month e day, se a definição de propriedade Calendar for Gregoriana, o valor fornecido será considerado Gregoriano.  Se a definição de propriedade Calendar for Hijri, o valor fornecido será considerado Hijri.

A parte da data retornada está nas unidades de período de tempo do calendário do Visual Basic atual.  Por exemplo, se o calendário atual for Hijri e a parte da data a ser retornada for o ano, o valor do ano será um ano Hijri. Para o argumento year, os valores entre 0 e 99, inclusive, são interpretados como os anos de 1400 a 1499. Para todos os outros valores year, use o ano de quatro dígitos completo (por exemplo, 1520).


Função DateValue

Retorna uma Variant (Date).

Sintaxe

DateValue(date)

O argumento date requerido é normalmente uma expressão de seqüência que representa uma data de 1º de janeiro de 100 a 31 de dezembro de 9999. Entretanto, date também pode ser qualquer expressão que possa representar uma data, uma hora ou ambas, nesse intervalo.

Comentários

Se date for uma seqüência que inclua somente números separados por separadores de data válidos, DateValue reconhecerá a ordem de mês, dia e ano de acordo com o formato de data abreviado que você especificou para o seu sistema. DateValue também reconhece datas não ambíguas que contémm nomes de meses, no formato longo ou abreviado. Por exemplo, além de reconhecer 30/12/1991 e 30/12/91, DateValue reconhece também 30 de dezembro de 1991 e 30-dez-1991.

Se a parte do ano de date for omitida, DateValue usará o ano atual da data do seu sistema de computador.

Se o argumento date incluir informações de hora, DateValue não irá retorná-las. Entretanto, se date incluir informações de hora inválidas (como "89:98"), ocorrerá um erro.

Observação   Para date, se a definição de propriedade Calendar for Gregoriana, a data fornecida deverá ser Gregoriana. Se o calendário for Hijri, a data fornecida deverá ser Hijri. Se a data fornecida for Hijri, o argumento date será uma String que representa uma data de 1/1/100 (Gregoriano 2-ago-718) a 4/3/9666 (Gregoriano 31-dez-9999).


Função Day

Retorna uma Variant (Integer) que especifica um número inteiro entre 1 e 31, inclusive, que representa o dia do mês.

Sintaxe

Day(date)

O argumento date requerido é uma Variant, expressão numérica, expressão de seqüência ou qualquer combinação que possa representar uma data. Se date contiver Null, Null será retornado.

Observação   Se a definição de propriedade Calendar for Gregoriana, o número inteiro retornado representa o dia do mês Gregoriano para o argumento de data. Se o calendário for Hijri, o número inteiro retornado representa o dia do mês Hijri para o argumento de data.


Função Hour

Retorna uma Variant (Integer) que especifica um número inteiro entre 0 e 23, inclusive, que representa a hora do dia.

Sintaxe

Hour(time)

O argumento time requerido é uma Variant, expressão numérica, expressão de seqüência ou qualquer combinação que possa representar uma hora. Se time contiver Null, Null será retornado.


Função Minute

Retorna uma Variant (Integer) que especifica um número inteiro entre 0 e 59, inclusive, que representa os minutos da hora.

Sintaxe

Minute(time)

O argumento time requerido é uma Variant, expressão numérica, expressão de seqüência ou qualquer combinação que possa representar uma hora. Se time contiver Null, Null será retornado.


Função Month

Retorna uma Variant (Integer) que especifica um número inteiro entre 1 e 12, inclusive, que representa o mês do ano.

Sintaxe

Month(date)

O argumento date requerido é uma Variant, expressão numérica, expressão de seqüência ou qualquer combinação que possa representar uma data. Se date contiver Null, Null será retornado.

Observação   Se a definição de propriedade Calendar for Gregoriana, o número inteiro retornado representa o dia da semana Gregoriano para o argumento de data. Se o calendário for Hijri, o número inteiro retornado representa o dia da semana Hijri para o argumento de data. Para datas Hijri, o número do argumento é qualquer expressão numérica que possa representar uma data e/ou hora de 1/1/100 (Gregoriano 2-ago-718) a 4/3/9666 (Gregoriano 31-dez-9999).


Função Now

Retorna uma Variant (Date) que especifica a data e hora atuais de acordo com a data e hora do sistema do seu computador.

Sintaxe

Now


Função Second

Retorna uma Variant (Integer) que especifica um número inteiro entre 0 e 59, inclusive, que representa os segundos do minuto.

Sintaxe

Second(time)

O argumento time requerido é uma Variant, expressão numérica, expressão de seqüência ou qualquer combinação que possa representar uma hora. Se time contiver Null, Null será retornado.


Função Time

Retorna uma Variant (Date) que indica a hora atual do sistema.

Sintaxe

Time

Comentários

Para definir a hora do sistema, use a instrução Time.


Instrução Time

Define a hora do sistema.

Sintaxe

Time = time

O argumento time requerido é uma expressão numérica, expressão de seqüência ou qualquer combinação que possa representar uma hora.

Comentários

Se time for uma seqüência, Time tentará convertê-la em uma hora usando os separadores de hora que você especificou para o seu sistema. Se não for possível convertê-la em uma hora válida, ocorrerá um erro.


Função Timer

Retorna um Single que representa o número de segundos decorridos desde meia-noite.

Sintaxe

Timer

Comentários

No Microsoft Windows, a função Timer retorna partes fracionárias de um segundo. No Macintosh, a resolução do timer é um segundo.


Função TimeSerial

Retorna uma Variant (Date) que contém o horário para uma hora, minuto e segundo específicos.

Sintaxe

TimeSerial(hour, minute, second)

A sintaxe da função TimeSerial tem os seguintes argumentos nomeados:

Parte	Descrição
hour	Obrigatório; Variant (Integer). Número entre 0 (12:00) e 23 (23:00), inclusive, ou uma expressão numérica.
minute	Obrigatório; Variant (Integer). Qualquer expressão numérica.
second	Obrigatório; Variant (Integer). Qualquer expressão numérica.
Comentários

Para especificar uma hora, como 11:59:59, o intervalo de números para cada argumento TimeSerial deve estar no intervalo normal da unidade, isto é, de 0 a 23 para horas e de 0 a 59 para minutos e segundos. Entretanto, você também pode especificar horas relativas para cada argumento usando qualquer expressão numérica que represente alguma quantidade de horas, minutos ou segundos antes e depois de uma determinada hora. O exemplo a seguir usa expressões em vez de números absolutos de horas. A função TimeSerial retorna uma hora para 15 minutos antes (-15) das seis horas antes do meio-dia (12 - 6) ou 5:45:00.

TimeSerial(12 - 6, -15, 0)

Quando qualquer argumento exceder o intervalo normal, ele será incrementado até a próxima unidade maior, de modo adequado. Por exemplo, se você especificar 75 minutos, ele será avaliado como uma hora e 15 minutos. Se qualquer argumento único estiver fora do intervalo -32.768 a 32.767, ocorrerá um erro. Se a hora especificada pelos três argumentos fizer com que a data fique fora do intervalo de datas aceito, ocorrerá um erro.


Função TimeValue

Retorna uma Variant (Date) que contém a hora.

Sintaxe

TimeValue(time)

O argumento time requerido normalmente é uma expressão de seqüência que representa uma hora entre 0:00:00 e 23:59:59, inclusive. Entretanto, time também pode ser qualquer expressão que represente uma hora nesse intervalo. Se time contiver Null, Null será retornado.

Comentários

Você pode inserir horas válidas usando um relógio de 12 ou 24 horas. Por exemplo, "2:24PM" e "14:24" são argumentos time válidos.

Se o argumento time contiver informações de data, TimeValue não irá retorná-las. Entretanto, se time incluir informações de data inválidas, ocorrerá um erro.


Função Weekday

Retorna uma Variant (Integer) que contém um número inteiro que represente o dia da semana.

Sintaxe

Weekday(date, [firstdayofweek])

A sintaxe da função Weekday tem os seguintes argumentos nomeados:

Parte	Descrição
date	Obrigatório. Variant, expressão numérica, expressão de seqüência ou qualquer combinação que possa representar uma data. Se date contiver Null, Null será retornado.
firstdayofweek	Opcional. Uma constante que especifica o primeiro dia da semana. Se não for especificada, será considerada vbSunday.
Definições

O argumento firstdayofweek tem as seguintes configurações:

Constante	Valor	Descrição
vbUseSystem	0	Use a definição NLS API.
vbSunday	1	Domingo (padrão)
vbMonday	2	Segunda-feira
vbTuesday	3	Terça-feira
vbWednesday	4	Quarta-feira
vbThursday	5	Quinta-feira
vbFriday	6	Sexta-feira
vbSaturday	7	Sábado
Valores retornados

A função Weekday pode retornar qualquer um destes valores:

Constante	Valor	Descrição
vbSunday	1	Domingo
vbMonday	2	Segunda-feira
vbTuesday	3	Terça-feira
vbWednesday	4	Quarta-feira
vbThursday	5	Quinta-feira
vbFriday	6	Sexta-feira
vbSaturday	7	Sábado
Comentários

Se a definição de propriedade Calendar for Gregoriana, o número inteiro retornado representa o dia da semana Gregoriano para o argumento de data. Se o calendário for Hijri, o número inteiro retornado representa o dia da semana Hijri para o argumento de data. Para datas Hijri, o número do argumento é qualquer expressão numérica que possa representar uma data e/ou hora de 1/1/100 (Gregoriano 2-ago-718) a 4/3/9666 (Gregoriano 31-dez-9999).


Função Year

Retorna uma Variant (Integer) que contém um número inteiro que represente o ano.

Sintaxe

Year(date)

O argumento date requerido é uma Variant, expressão numérica, expressão de seqüência ou qualquer combinação que possa representar uma data. Se date contiver Null, Null será retornado.

Observação   Se a definição de propriedade Calendar for Gregoriana, o número inteiro retornado representa o ano Gregoriano para o argumento de data. Se o calendário for Hijri, o número inteiro retornado representa o ano Hijri para o argumento de data. Para datas Hijri, o número do argumento é qualquer expressão numérica que possa representar uma data e/ou hora de 1/1/100 (Gregoriano 2-ago-718) a 4/3/9666 (Gregoriano 31-dez-9999).


Função Array

Retorna um Variant contendo uma matriz.

Sintaxe

Array(arglist)

O argumento obrigatório arglist é uma lista de valores delimitados por vírgulas que são atribuídos aos elementos da matriz contidos dentro de Variant. Se nenhum argumento for especificado, uma matriz de tamanho zero será criada.

Comentários

A notação usada para referir-se a um elemento de uma matriz consiste no nome de uma variável seguido por um número de índice entre parênteses indicando o elemento desejado. No exemplo a seguir, a primeira instrução cria uma variável denominada A como um Variant. A segunda instrução atribui uma matriz à variável A. A última instrução atribui o valor contido no segundo elemento de matriz a outra variável.

Dim A As Variant

A = Array(10,20,30)

B = A(2)

O limite inferior de uma matriz criada usando a função Array é determinado pelo limite inferior especificado com a instrução Option Base, a menos que Array seja qualificada com o nome da biblioteca de tipos (por exemplo VBA.Array). Se for qualificada com o nome da biblioteca de tipos, Array não é afetada por Option Base.

Observação   Um Variant que não é declarado como matriz pode, ainda assim, conter uma matriz. Uma variável Variant pode conter uma matriz de qualquer tipo, com exceção de seqüências de comprimento fixo e tipos definidos pelo usuário. Embora um Variant que contém uma matriz seja conceitualmente diferente de uma matriz cujos elementos sejam de tipo Variant, os elementos da matriz são acessados da mesma forma.


Função CallByName

Executa um método de um objeto, ou define ou retorna uma propriedade de um objeto.

Sintaxe

CallByName(object, procname, calltype,[args()])

A sintaxe da função CallByName tem os argumentos nomeados a seguir:

Parte	Descrição
object	Obrigatório; Variant (Object). O nome do objeto no qual a função será executada.
procname	Obrigatória; Variant (String). Uma expressão de seqüência contendo o nome de uma propriedade ou método do objeto.
calltype	Obrigatório; Constant. Uma constante de tipo vbCallType representando o tipo de procedimento sendo chamado.
args()	Opcional: Variant (Array).
Comentários

A função CallByName é usada para obter ou definir uma propriedade ou chamar um método em tempo de execução através do nome de uma seqüência.

No exemplo a seguir, a primeira linha usa CallByName para definir a propriedade MousePointer de uma caixa de texto, a segunda linha obtém o valor da propriedade MousePointer e a terceira linha chama o método Move para mover a caixa de texto:

CallByName Text1, "MousePointer", vbLet, vbCrosshair

Result = CallByName (Text1, "MousePointer", vbGet)

CallByName Text1, "Move", vbMethod, 100, 100


Instrução Const

Declara as constantes a serem usadas no lugar de valores literais.

Sintaxe

[Public | Private] Const constname [As type] = expression

A sintaxe da instrução Const possui as partes a seguir:

Parte	Descrição
Public	Opcional. Palavra-chave usada no nível de módulo para declarar constantes que estejam disponíveis para todos os procedimentos em todos os módulos. Não é permitida em procedimentos.
Private	Opcional. Palavra-chave usada no nível de módulo para declarar constantes disponíveis apenas dentro do módulo no qual a declaração é feita. Não é permitida em procedimentos.
constname	Obrigatória. Nome da constante; segue as convenções padrões de nomenclatura de variáveis.
type	Opcional. Tipo de dados da constante; pode ser Byte, Boolean, Integer, Long, Currency, Single, Double, Decimal (atualmente sem suporte), Date, String ou Variant. Use uma cláusula As type separada para cada constante que for declarada.
expression	Obrigatória. Um literal, outra constante ou qualquer combinação que inclua todos os operadores aritméticos ou lógicos com exceção de Is.
Comentários

As constantes são particulares por padrão. Dentro de procedimentos, as constantes sempre serão particulares; sua visibilidade não pode ser alterada. Em módulos padrão, a visibilidade padrão de constantes no nível de módulo pode ser alterada com a palavra-chave Public. Nos módulos de classe, contudo, as constantes só podem ser particulares e sua visibilidade não pode ser alterada com a palavra-chave Public.

Para combinar diversas declarações de constantes na mesma linha, separe cada atribuição de constante com uma vírgula. Quando as declarações de constante são combinadas dessa forma, a palavra-chave Public ou Private, se usada, aplica-se a todas elas.

Você não pode usar variáveis, funções definidas pelo usuário ou funções intrínsecas ao Visual Basic (como Chr) em expressões atribuídas a constantes.

Observação   As constantes podem tornar seus programas automaticamente documentáveis e fáceis de serem modificados. Ao contrário das variáveis, as constantes não podem ser alteradas inadvertidamente enquanto seu programa está sendo executado.

Se você não declarar explicitamente o tipo de constante usando As type, a constante receberá o tipo de dados mais apropriado à expression.

As constantes declaradas em um procedimento Sub, Function ou Property são locais a esse procedimento. Uma constante declarada fora de um procedimento é definida em todo o módulo no qual é declarada. Você pode usar constantes em qualquer lugar em que for possível usar uma expressão.


Função CreateObject

Cria e retorna uma referência a um objeto ActiveX.

Sintaxe

CreateObject(class,[servername])

A sintaxe da função CreateObject tem as seguintes partes:

Parte	Descrição
class	Obrigatória; Variant (String). O nome do aplicativo e classe do objeto a ser criado.
servername	Opcional; Variant (String). O nome do servidor da rede em que o objeto será criado. Se servername for uma seqüência vazia (""), usa-se a máquina local.
O argumento class usa a sintaxe appname.objecttype e possui as partes a seguir:

Parte	Descrição
appname	Obrigatória; Variant (String). O nome do aplicativo que fornece o objeto.
Objectype	Obrigatória; Variant (String). O tipo ou classe do objeto a ser criado.
Comentários

Qualquer aplicativo para o qual haja suporte à automação fornece pelo menos um tipo de objeto. Por exemplo, um aplicativo de processamento de texto pode fornecer um objeto Application, um objeto Document e um objeto Toolbar.

Para criar um objeto ActiveX, atribua o objeto retornado por CreateObject a uma variável de objeto:

' Declara uma variável de objeto para conter a referência

' do objeto. Dim as Object acarreta vinculação tardia.

Dim ExcelSheet As Object

Set ExcelSheet = CreateObject("Excel.Sheet")

Esse código inicia o aplicativo que cria o objeto, nesse caso, uma planilha do Microsoft Excel. Após um objeto ter sido criado, ele pode ser referido no código através da variável de objeto que você definiu. No exemplo a seguir, você acessa propriedades e métodos do novo objeto usando a variável de objeto, ExcelSheet e outros objetos do Microsoft Excel, incluindo o objeto Application e a coleção Cells.

' Torna o Excel visível através do objeto Application.

ExcelSheet.Application.Visible = True

' Coloca um texto na primeira célula da planilha.

ExcelSheet.Application.Cells(1, 1).Value = "Esta é a coluna A, linha 1"

' Salva a planilha no diretório C:\test.xls.

ExcelSheet.SaveAs "C:\TEST.XLS"

' Fecha o Excel com o método Quit no objeto Application

ExcelSheet.Application.Quit

' Libera a variável de objeto

Set ExcelSheet = Nothing

Declarar uma variável de objeto com a cláusula As Object cria uma variável que pode conter uma referência a qualquer tipo de objeto. No entanto, o acesso ao objeto através dessa variável dá-se com uma vinculação tardia, ou seja, esta ocorre quando seu programa já está sendo executado. Para criar uma variável de objeto que resulte em vinculação inicial, ou seja, vinculação quando o programa é compilado, declare a variável de objeto com uma identificação de classe específica. Por exemplo, você pode declarar e criar as referências do Microsoft Excel a seguir:

Dim xlApp As Excel.Application

Dim xlBook As Excel.Workbook

Dim xlSheet As Excel.WorkSheet

Set xlApp = CreateObject("Excel.Application")

Set xlBook = xlApp.Workbooks.Add

Set xlSheet = xlBook.Worksheets(1)

A referência através de uma variável de vinculação inicial pode proporcionar melhor desempenho, mas só pode conter uma referência à classe especificada na declaração.

Você pode passar um objeto retornado pela função CreateObject para uma função que espera um objeto como argumento. Por exemplo, o código a seguir cria e passa uma referência a um objeto Excel.Application:

Call MinhaSub (CreateObject("Excel.Application"))

Você pode criar um objeto em um computador remoto em rede ao passar o nome do computador ao argumento servername de CreateObject. Esse nome é o mesmo da parte do nome da máquina de um nome compartilhado: para um nome "\\MyServer\Public" compartilhado e nomeado, o servername é "MyServer".

Observação   Consulte a documentação COM (Component Object Model, modelo de objeto componente) (consulte Microsoft Developer Network) para obter informações adicionais sobre como tornar um aplicativo visível em um computador remoto em rede. Talvez você tenha de adicionar uma chave de registro ao aplicativo.

O código a seguir retorna o número da versão de uma ocorrência do Excel sendo executado em um computador remoto chamado MyServer:

Dim xlApp As Object

Set xlApp = CreateObject("Excel.Application", "MyServer")

Debug.Print xlApp.Version

Se o servidor remoto não existir ou não estiver disponível, ocorrerá um erro durante a execução.

Observação   Use CreateObject quando não houver nenhuma ocorrência atual do objeto. Se uma ocorrência do objeto já estiver sendo executada, uma nova ocorrência é iniciada e um objeto do tipo especificado é criado. Para usar a ocorrência atual ou iniciar o aplicativo e fazê-lo carregar um arquivo, use a função GetObject.

Se um objeto tiver registrado a si próprio como um objeto de ocorrência única, apenas uma ocorrência do objeto será criada, independentemente de quantas vezes CreateObject for executado.


Instrução Declare

Usada no nível de módulo para declarar referências a procedimentos externos em uma biblioteca de vínculo dinâmico (DLL, Dynamic Link Library).

Sintaxe 1

[Public | Private] Declare Sub name Lib "nomedabiblioteca" [Alias "nomedoalias"] [([arglist])]

Sintaxe 2

[Public | Private] Declare Function name Lib "libname" [Alias "aliasname"] [([arglist])] [As type]

A sintaxe da instrução Declare possui as partes a seguir:

Parte	Descrição
Public	Opcional. Usada para declarar procedimentos que estejam disponíveis a todos os outros procedimentos em todos os módulos.
Private	Opcional. Usada para declarar procedimentos que estejam disponíveis apenas dentro do módulo no qual a declaração é feita.
Sub	Opcional (tanto Sub como Function podem aparecer). Indica que o procedimento não retorna um valor.
Function	Opcional (tanto Sub como Function podem aparecer). Indica que o procedimento retorna um valor que pode ser usado em uma expressão.
name	Obrigatória. Qualquer nome de procedimento válido. Observe que os pontos de entrada da DLL coincidem maiúsculas e minúsculas.
Lib	Obrigatória. Indica que uma DLL ou recurso de código contém o procedimento que está sendo declarado. A cláusula Lib é exigida para todas as declarações.
libname	Obrigatória. Nome da DLL ou recurso de código que contém o procedimento declarado.
Alias	Opcional. Indica que o procedimento que está sendo chamado possui outro nome na DLL. Isso é útil quando o nome do procedimento externo é o mesmo de uma palavra-chave. Você também pode usar Alias quando um procedimento de DLL tem o mesmo nome de uma variável pública, constante ou qualquer outro procedimento no mesmo escopo. Alias também é útil se qualquer caractere do nome do procedimento DLL não for permitido pela convenção de nomenclatura DLL.
aliasname	Opcional. Nome do procedimento da DLL ou recurso de código. Se o primeiro caractere não for o sinal numérico (#), nomedoalias será o nome do ponto de entrada do procedimento na DLL. Se (#) for o primeiro caractere, todos os caracteres seguintes deverão indicar o número ordinal do ponto de entrada do procedimento.
arglist	Opcional. Lista de variáveis que representam argumentos que são passados ao procedimento quando ele é chamado.
type	Opcional. Data type do valor retornado por um procedimento Function; pode ser Byte, Boolean, Integer, Long, Currency, Single, Double, Decimal (atualmente sem suporte), Date, String (somente de comprimento variável) ou Variant, um tipo definido pelo usuário ou um tipo de objeto
O argumento arglist apresenta a sintaxe e as partes a seguir:

[Optional] [ByVal | ByRef] [ParamArray] varname [( )] [As type]

Parte	Descrição
Optional	Opcional. Indica que um argumento não é obrigatório. Se usado, todos os argumentos subseqüentes em arglist deverão ser opcionais e declarados através da palavra-chave Optional. Optional não pode ser usado para qualquer argumento se ParamArray for usado.
ByVal	Opcional. Indica que o argumento é passado por valor.
ByRef	Indica que o argumento é passado por referência. ByRef é o padrão no Visual Basic.
ParamArray	Opcional. Usado apenas como o último argumento em arglist para indicar que o argumento final é uma matriz Optional de elementos Variant. A palavra-chave ParamArray permite que você forneça um número arbitrário de argumentos. A palavra-chave ParamArray não pode ser usada com ByVal, ByRef ou Optional.
varname	Obrigatória. Nome da variável que representa o argumento passado ao procedimento; segue as convenções de nomenclatura padrão de variáveis.
( )	Obrigatória para variáveis de matriz. Indica que varname é uma matriz.
type	Opcional. Tipo de dados do argumento passado ao procedimento; pode ser Byte, Boolean, Integer, Long, Currency, Single, Double, Decimal (atualmente sem suporte), Date, String (apenas de tamanho variável), Object, Variant, um tipo definido pelo usuário ou um tipo de objeto.
Comentários

Para procedimentos Function, o tipo de dados do procedimento determina o tipo de dados retornado. Você pode usar uma cláusula As seguindo arglist para especificar o tipo retornado da função. Dentro de arglist, você pode usar uma cláusula As para especificar o tipo de dados de qualquer um dos argumentos passados ao procedimento. Além de especificar qualquer tipo de dados padrão, você pode especificar As Any em arglist para inibir a verificação de tipo e permitir que qualquer tipo de dados seja passado ao procedimento.

Parênteses vazios indicam que o procedimento Sub ou Function não possui argumentos e que o Visual Basic deve garantir que nenhum argumento será passado. No exemplo a seguir, First não possui argumentos. Se você usar argumentos em uma chamada para First, um erro será gerado:

Declare Sub First Lib "MyLib" ()

Se você incluir uma lista de argumentos, o número e tipo de argumentos são verificados a cada vez que o procedimento for chamado. No exemplo a seguir, First aceita um argumento Long:

Declare Sub First Lib "MyLib" (X As Long)

Observação   A presença de seqüências de comprimento fixo na lista de argumentos de uma instrução Declare não é permitida; apenas seqüências de comprimento variável podem ser passadas a procedimentos. Seqüências de comprimento fixo podem aparecer como argumentos de procedimentos, mas são convertidas em seqüências de comprimento variável antes de serem passadas.

Observação   A constante vbNullString é usada ao chamar procedimentos externos, quando os procedimentos externos exigem uma seqüência de caracteres cujo valor seja zero. Isso é diferente de uma seqüência de comprimento zero ("").


Instruções Deftype

Usadas no nível de módulo para definir o tipo de dados padrão para variáveis, argumentos passados a procedimentos e o tipo retornado para os procedimentos Function e Property Get cujos nomes se iniciem pelos caracteres especificados.

Sintaxe

DefBool letterrange[, letterrange] . . .

DefByte letterrange[, letterrange] . . .

DefInt letterrange[, letterrange] . . .

DefLng letterrange[, letterrange] . . .

DefCur letterrange[, letterrange] . . .

DefSng letterrange[, letterrange] . . .

DefDbl letterrange[, letterrange] . . .

DefDec letterrange[, letterrange] . . .

DefDate letterrange[, letterrange] . . .

DefStr letterrange[, letterrange] . . .

DefObj letterrange[, letterrange] . . .

DefVar letterrange[, letterrange] . . .

O argumento obrigatório letterrange apresenta a sintaxe a seguir:

letter1[-letter2]

Os argumentos letter1 e letter2 especificam o intervalo de nomes para o qual você pode definir um tipo de dados padrão. Cada argumento representa a primeira letra da variável, argumento, procedimento Function ou nome de procedimento Property Get e pode ser qualquer letra do alfabeto. A caixa das letras em letterrange não é relevante.

Comentários

O nome da instrução determina o tipo de dados:

Instrução	Tipo de dados
DefBool	Boolean
DefByte	Byte
DefInt	Integer
DefLng	Long
DefCur	Currency
DefSng	Single
DefDbl	Double
DefDec	Decimal (atualmente sem suporte)
DefDate	Date
DefStr	String
DefObj	Object
DefVar	Variant
Por exemplo, no fragmento de programa a seguir, Message é uma variável de seqüência de caracteres:

DefStr A-Q

. . .

Message = "Sem espaço em pilha."

Uma instrução Deftipo afeta somente o módulo em que ela é usada. Por exemplo, uma instrução DefInt em um módulo afeta somente o tipo de dados padrão de variáveis, argumentos passados a procedimentos e o tipo retornado para procedimentos Function e Property Get declarados nesse módulo; o tipo de dados padrão de variáveis, argumentos e os tipos retornados em outros módulos não são afetados. Caso não seja explicitamente declarado através de uma instrução Deftipo, o tipo de dados padrão para todas as variáveis, todos os argumentos, todos os procedimentos Function e todos os procedimentos Property Get será Variant.

Quando você especifica um intervalo de letras, ele geralmente define o tipo de dados para variáveis iniciadas com letras entre os primeiros 128 caracteres do conjunto de caracteres. No entanto, quando você especifica o intervalo de letras A a Z, você define o padrão para o tipo de dados especificado para todas as variáveis, incluindo as iniciadas por caracteres internacionais da parte estendida do conjunto de caracteres (128 até 255).

Uma vez especificada a faixa de A até Z, você não pode mais redefinir qualquer subfaixa de variáveis usando instruções Deftipo. Uma vez especificado um intervalo, se você incluir uma letra predefinida em uma outra instrução Deftipo, ocorrerá um erro. No entanto, você pode especificar explicitamente o tipo de dados de qualquer variável, definida ou não, usando uma instrução Dim com uma cláusula As type. Por exemplo, você pode usar o código a seguir no nível de módulo para definir uma variável como Double, embora o tipo de dados padrão seja Integer:

DefInt A-Z

Dim PercTaxa As Double

As instruções Deftipo não afetam os elementos de tipos definidos pelo usuário porque eles devem ser explicitamente declarados.


Instrução Dim

Declara variáveis e aloca espaço de armazenamento.

Sintaxe

Dim [WithEvents] varname[([subscripts])] [As [New] type] [, [WithEvents] varname[([subscripts])] [As [New] type]] . . .

A sintaxe da instrução Dim possui as partes a seguir:

Parte	Descrição
WithEvents	Opcional. Palavra-chave que especifica que varname é uma variável de objeto usada para responder a eventos acionados por um objeto ActiveX. WithEvents só é válido em módulos classe. Você pode declarar quantas variáveis individuais desejar usando WithEvents, mas não pode criar matrizes com WithEvents. Você não pode usar New com WithEvents.
varname	Obrigatória. Nome da variável; segue as convenções de nomenclatura padrão de variáveis.
subscripts	Opcional. Dimensões de uma variável de matriz; até 60 dimensões múltiplas podem ser declaradas. O argumento subscripts usa a sintaxe a seguir: [lower To] upper [, [lower To] upper] . . . Quando não enunciado explicitamente em lower, o limite inferior de uma matriz é controlado pela instrução Option Base. O limite inferior é zero se nenhuma instrução Option Base estiver presente.
New	Opcional. Palavra-chave que permite a criação implícita de um objeto. Se você usar New ao declarar a variável de objeto, uma nova ocorrência do objeto será criada na primeira referência a ele. Dessa forma, você não precisa usar a instrução Set para atribuir a referência do objeto. A palavra-chave New não pode ser usada para declarar variáveis de qualquer tipo de dados intrínseco, não pode ser usada para declarar ocorrências de objetos dependentes nem ser usada com WithEvents.
type	Opcional. Tipo de dados da variável; pode ser Byte, Boolean, Integer, Long, Currency, Single, Double, Decimal (atualmente sem suporte), Date, String (para seqüências de comprimento variável), String * length (para seqüências de comprimento fixo), Object, Variant, um tipo definido pelo usuário ou um tipo de objeto. Use uma cláusula As type separada para cada variável que você declarar.
Comentários

As variáveis declaradas com Dim no nível de módulo estão disponíveis para todos os procedimentos dentro do módulo. No nível de procedimento, as variáveis estão disponíveis somente dentro do procedimento.

Use a instrução Dim no nível de módulo ou procedimento para declarar o tipo de dados de uma variável. Por exemplo, a instrução a seguir declara uma variável como Integer.

Dim NúmeroDeEmpregados As Integer

Também é possível usar uma instrução Dim para declarar o tipo de objeto de uma variável. O exemplo a seguir declara uma variável para uma nova ocorrência de uma planilha.

Dim X As New Worksheet

Se a palavra-chave New não for usada para declarar uma variável de objeto, um objeto já existente deverá ser atribuído a uma variável referente ao objeto através da instrução Set antes que ele possa ser usado. Até ter um objeto atribuído a ela, a variável de objeto declarada apresentará o valor especial Nothing, que indica que ela não se refere a nenhuma ocorrência específica de um objeto.

Você também pode usar a instrução Dim com parênteses vazios para declarar uma matriz dinâmica. Após declará-la, use a instrução ReDim dentro de um procedimento para definir o número de dimensões e elementos na matriz. Se você tentar declarar novamente uma dimensão para uma variável de matriz cujo tamanho tenha sido especificado explicitamente em uma instrução Private, Public ou Dim, ocorrerá um erro.

Se você não especificar um tipo de dados ou de objeto e se não houver nenhuma instrução Deftipo no módulo, a variável será Variant por padrão.

Quando as variáveis são inicializadas, uma variável numérica é inicializada como 0, uma seqüência de comprimento variável é inicializada como uma seqüência de comprimento zero ("") e uma seqüência de comprimento fixo é preenchida com zeros. As variáveis Variant são inicializadas como Empty. Cada elemento de uma variável de tipo definido pelo usuário é inicializado como se fosse uma variável independente.

Observação   Quando você usa a instrução Dim em um procedimento, ela geralmente é colocada no início do procedimento.


Instrução Enum

Declara um tipo para uma enumeração.

Sintaxe

[Public | Private] Enum name

membername [= constantexpression]

membername [= constantexpression]

. . .

End Enum

A instrução Enum tem as partes a seguir:

Parte	Descrição
Public	Opcional. Especifica que o tipo Enum é visível através do projeto. Tipos Enum são Public por padrão.
Private	Opcional. Especifica que o tipo Enum é visível somente dentro do módulo em que aparece.
name	Obrigatória. O nome do tipo Enum. O name deve ser um identificador válido do Visual Basic e é especificado como o tipo quando declara variáveis ou parâmetros do tipo Enum.
membername	Obrigatória. Um identificador válido do Visual Basic que especifica o nome pelo qual um elemento integrante do tipo Enum será conhecido.
constantexpression	Opcional. Valor do elemento (avalia Long). Se nenhuma constantexpression for especificada, o valor atribuído é zero (se for o primeiro membername) ou 1 maior que o valor do membername imediatamente anterior.
Comentários

As variáveis de enumeração são variáveis declaradas com um tipo Enum. As variáveis e parâmetros podem ser declarados com um tipo Enum. Os elementos do tipo Enum são inicializados com valores constantes dentro da instrução Enum. Os valores atribuídos não podem ser modificados em tempo de execução e podem incluir números positivos e negativos. Por exemplo:

Enum SecurityLevel

IllegalEntry = -1

SecurityLevel1 = 0

SecurityLevel2 = 1

End Enum

Uma instrução Enum só pode aparecer no nível de módulo. Uma vez definido o tipo Enum, ele pode ser usado para declarar variáveis, parâmetros ou procedimentos que retornam o seu tipo. Você não pode qualificar o nome de um tipo Enum com um nome de módulo. Tipos Public Enum em um módulo de classe não são membros da classe; no entanto, eles são gravados na biblioteca de tipos. Tipos Enum definidos em módulos padrão não são gravados em bibliotecas de tipos. Tipos Public Enum com o mesmo nome não podem ser definidos em módulos padrão nem em módulos classe, porque eles compartilham o mesmo espaço do nome. Quando dois tipos Enum, em diferentes bibliotecas de tipos, têm o mesmo nome, porém elementos diferentes, uma referência a uma variável do tipo depende de qual biblioteca de tipos tem maior prioridade em References.

Você não pode usar um tipo Enum como o destino de um bloco With.


Instrução Erase

Reinicializa os elementos de matrizes de tamanho fixo e libera espaço de armazenamento de matrizes dinâmicas.

Sintaxe

Erase arraylist

O argumento obrigatório arraylist é uma ou mais variáveis de matrizes delimitadas por vírgulas a serem apagadas.

Comentários

Erase comporta-se de formas diferentes dependendo da matriz ser de tamanho fixo (normal) ou dinâmica. Erase não recupera memória para matrizes de tamanho fixo. Erase define os elementos de uma matriz fixa da seguinte forma:

Tipo de matriz	Efeito de Erase em elementos de matriz fixa
Matriz numérica fixa	Define cada elemento como zero.
Matriz de seqüência fixa (tamanho variável)	Define cada elemento como uma seqüência de comprimento zero ("").
Matriz de seqüência fixa (comprimento fixo)	Define cada elemento como zero.
Matriz Variant fixa	Define cada elemento como Empty.
Matriz de tipos definidos pelo usuário	Define cada elemento como se fosse uma variável independente.
Matriz de objetos	Define cada elemento com o valor especial Nothing.
Erase libera a memória usada por matrizes dinâmicas. Antes que seu programa possa se referir novamente à matriz dinâmica, ele deverá declarar as dimensões da variável de matriz novamente, através da instrução ReDim.


Instrução Event

Declara um evento definido pelo usuário.

Sintaxe

[Public] Event procedurename [(arglist)]

A instrução Event tem as partes a seguir:

Parte	Descrição
Public	Opcional. Especifica que Event é visível através do projeto. Tipos Event são Public por padrão. Observe que os eventos só podem ser provocados no módulo em que são declarados.
procedurename	Obrigatória. Nome do evento; segue as convenções de nomenclatura padrão de variáveis.
O argumento arglist apresenta a sintaxe e as partes a seguir:

[ByVal | ByRef] varname [( )] [As type]

Parte	Descrição
ByVal	Opcional. Indica que o é passado por valor.
ByRef	Opcional. Indica que o argumento é passado por referência. ByRef é o padrão no Visual Basic.
varname	Obrigatória. Nome da variável que representa o argumento sendo passado ao procedimento; segue as convenções de nomenclatura padrão de variáveis.
type	Opcional. Tipo de dados do argumento passado ao procedimento; pode ser Byte, Boolean, Integer, Long, Currency, Single, Double, Decimal (atualmente sem suporte), Date, String (somente de comprimento variável), Object, Variant, umtipo definido pelo usuário ou um tipo de objeto.
Comentários

Uma vez declarado o evento, use a instrução RaiseEvent para acionar o evento. Ocorrerá um erro de sintaxe se uma declaração Event aparecer em um módulo padrão. Um evento não pode ser declarado para retornar um valor. Um evento típico pode ser declarado e aumentado como mostrado nos fragmentos a seguir:

' Declarar um evento no nível de módulo, de um módulo de classe

Event LogonCompleted (UserName as String)

Sub

RaiseEvent LogonCompleted("AntoineJan")

End Sub

Observação   Você pode declarar os argumentos do evento como argumentos de procedimentos, com as exceções a seguir: o. Os eventos não têm valores retornados.


Instrução Function

Declara o nome, os argumentos e o código que formam o corpo de um procedimento Function.

Sintaxe

[Public | Private ] [Static] Function name [(arglist)] [As type]
[statemants]
[name = expression]
[Exit Function]
[statemants]
[name = expression]

End Function

A sintaxe da instrução Function possui as partes a seguir:

Parte	Descrição
Public	Opcional. Indica que o procedimento Function está acessível a todos os outros procedimentos em todos os módulos. Se usado em um módulo que contém Option Private, o procedimento não estará disponível fora do projeto.
Private	Opcional. Indica que o procedimento Function está acessível apenas a outros procedimentos no módulo em que ele é declarado.
Friend	Opcional. Usado somente em um módulo de classe. Indica que o procedimento Function está visível através do projeto, porém não visível a um controlador de uma ocorrência de um objeto.
Static	Opcional. Indica que as variáveis locais do procedimento Function estão preservadas entre as chamadas. O atributo Static não afeta as variáveis que são declaradas fora de Function, mesmo que elas sejam usadas no procedimento.
name	Obrigatória. Nome de Function; segue as convenções de nomenclatura padrão de variáveis.
arglist	Opcional. Lista de variáveis que representam argumentos passados ao procedimento Function quando ele é chamado. Variáveis múltiplas são separadas por vírgulas.
type	Opcional. O tipo de dados do valor retornado pelo procedimento Function; pode ser Byte, Boolean, Integer, Long, Currency, Single, Double, Decimal (atualmente sem suporte), Date, String ou (com exceção de seqüências de comprimento fixo), Object, Variant ou qualquer tipo definido pelo usuário.
statemants	Opcional. Qualquer grupo de instruções a serem executadas dentro do procedimento Function.
expression	Opcional. Valor retornado de Function.
O argumento arglist apresenta a sintaxe e as partes a seguir:

[Optional] [ByVal | ByRef] [ParamArray] varname[( )] [As type] [= defaultvalue]

Parte	Descrição
Optional	Opcional. Indica que um argumento não é obrigatório. Se usado, todos os argumentos subseqüentes em arglist deverão ser opcionais e declarados através da palavra-chave Optional. Optional não pode ser usado para qualquer argumento se ParamArray for usado.
ByVal	Opcional. Indica que o argumento é passado por valor.
ByRef	Opcional. Indica que o argumento é passado por referência. ByRef é o padrão no Visual Basic.
ParamArray	Opcional. Usada apenas como o último argumento em arglist para indicar que o argumento final é uma matriz Optional de elementos Variant. A palavra-chave ParamArray permite que você forneça um número arbitrário de argumentos. Ela não pode ser usada com ByVal, ByRef ou Optional.
varname	Obrigatória. Nome da variável que representa o argumento; segue as convenções de nomenclatura padrão de variáveis.
type	Opcional. Tipo de dados do argumento passado ao procedimento; pode ser Byte, Boolean, Integer, Long, Currency, Single, Double, Decimal (atualmente sem suporte), Date, String (somente de comprimento variável), Object, Variant ou um tipo de objeto específico. Se o parâmetro não for Optional, um tipo definido pelo usuário também pode ser especificado.
defaultvalue	Opcional. Qualquer constant ou expressão de constante. Válido somente para parâmetros Optional. Se o tipo for um Object, um valor padrão explícito só poderá ser Nothing.
Comentários

Se não forem especificados explicitamente através de Public, Private ou Friend, os procedimentos Function serão públicos por padrão. Se Static não for usado, o valor de variáveis locais não será preservado entre as chamadas. A palavra-chave Friend só pode ser usada em módulos classe. No entanto, os procedimentos Friend podem ser acessados por procedimentos em qualquer módulo de um projeto. Um procedimento Friend não aparece na biblioteca de tipos de sua classe pai, nem um procedimento Friend pode ser posteriormente vinculado.

Cuidado   Os procedimentos Function podem ser recursivos; ou seja, eles podem chamar a si próprios para executar uma determinada tarefa. No entanto, a recursão pode levar ao estouro de pilha. Geralmente, palavra-chave Static não é usada com procedimentos recursivos Function.

Todo o código executável deve estar em procedimentos. Você não pode definir um procedimento Function dentro de outro procedimento Function, Sub ou Property.

A instrução Exit Function causa a saída imediata de um procedimento Function. A execução do programa continua com a instrução seguinte àquela que chamou o procedimento Function. Qualquer número de instruções Exit Function pode aparecer em qualquer lugar de um procedimento Function.

Assim como um procedimento Sub, um procedimento Function é um procedimento separado que pode aceitar argumentos, executar uma série de instruções e alterar os valores de seus argumentos. No entanto, ao contrário de um procedimento Sub, você pode usar um procedimento Function à direita de uma expressão da mesma forma que você usa qualquer função intrínseca, como Sqr, Cos ou Chr, quando você deseja usar o valor retornado pela função.

Você chama um procedimento Function usando o nome da função, seguido pela lista de argumentos entre parênteses, em uma expressão. Consulte a instrução Call para obter informações específicas sobre como chamar procedimentos Function.

Para retornar um valor de uma função, atribua o valor ao nome da função. Qualquer quantidade dessas atribuições pode aparecer em qualquer lugar do procedimento. Se nenhum valor for atribuído a name, o procedimento retornará um valor padrão: uma função numérica retornará 0, uma função de seqüência retornará uma seqüência de comprimento zero ("") e uma função Variant retornará Empty. Uma função que retorna uma referência de objeto retornará Nothing se nenhuma referência de objeto for atribuída a name (usando Set) dentro de Function.

O exemplo a seguir mostra como atribuir um valor retornado a uma função denominada BinarySearch. Neste caso, False é atribuído ao nome para indicar que um certo valor não foi localizado.

Function BinarySearch(. . .) As Boolean

. . .

' Valor não localizado. Retorna um valor False.

If lower > upper Then

BinarySearch = False

Exit Function

End If

. . .

End Function

As variáveis usadas em procedimentos Function dividem-se em duas categorias: aquelas explicitamente declaradas dentro do procedimento e aquelas que não são declaradas dessa forma. As variáveis que são explicitamente declaradas dentro de um procedimento (usando Dim ou equivalente) são sempre locais em relação ao procedimento. As variáveis usadas, mas não explicitamente declaradas em um procedimento, também são locais, a menos que explicitamente declaradas em algum nível superior fora do procedimento.

Cuidado   Um procedimento pode usar uma variável que não seja explicitamente declarada no procedimento, mas pode ocorrer um conflito de nomenclatura se algo definido no nível de módulo apresentar o mesmo nome. Se o seu procedimento referir-se a uma variável não declarada que tenha o mesmo nome de outro procedimento, constante ou variável, pressupõe-se que seu procedimento refere-se àquele nome no nível de módulo. Para evitar esse tipo de conflito, convém declarar variáveis de forma explícita. Você pode usar uma instrução Option Explicit para forçar a declaração explícita de variáveis.

Cuidado   O Visual Basic pode reorganizar expressões aritméticas para aumentar a eficiência interna. Evite usar um procedimento Function em uma expressão aritmética quando a função alterar o valor das variáveis na mesma expressão.


Função GetObject

Retorna uma referência a um objeto fornecido por um componente ActiveX.

Sintaxe

GetObject([pathname] [, class])

A sintaxe da função GetObject tem os seguintes argumentos nomeados:

Parte	Descrição
pathname	Opcional; Variant (String). Indica o caminho completo e nome do arquivo que contém o objeto a ser recuperado. Se pathname for omitido, class passará a ser obrigatório.
class	Opcional; Variant (String). Uma seqüência que representa a classe do objeto.
O argumento classe usa a sintaxe appname.objecttype e possui as partes a seguir:

Parte	Descrição
appname	Obrigatória; Variant (String). O nome do aplicativo que fornece o objeto.
objecttype	Obrigatória; Variant (String). Tipo ou classe do objeto a ser criado.
Comentários

Use a função GetObject para acessar um objeto ActiveX de um arquivo e atribuir o objeto a uma variável de objeto. Use a instrução Set para atribuir o objeto retornado por GetObject à variável de objeto. Por exemplo:

Dim ObjetoCAD As Object

Set ObjetoCAD = GetObject("C:\CAD\SCHEMA.CAD")

Quando esse código for executado, o aplicativo associado ao pathname especificado será iniciado e o objeto no arquivo especificado será ativado.

Se pathname for uma seqüência de comprimento zero (""), GetObject retornará uma nova ocorrência de objeto do tipo especificado. Se o argumento de pathname for omitido, GetObject retornará um objeto atualmente ativo do tipo especificado. Se não houver nenhum objeto do tipo especificado, ocorrerá um erro.

Alguns aplicativos permitem que você ative parte de um arquivo. Adicione um ponto de exclamação (!) ao final do nome do arquivo e acrescente uma seqüência que identifique a parte do arquivo que você deseja ativar. Para obter informações sobre como criar essa seqüência, consulte a documentação referente ao aplicativo que criou o objeto.

Por exemplo, em um aplicativo de desenho, você pode ter diversas camadas de um desenho armazenado em um arquivo. Você poderia usar o código a seguir para ativar uma camada em um desenho denominado SCHEMA.CAD:

Set LayerObject = GetObject("C:\CAD\SCHEMA.CAD!Layer3")

Se você não especificar a class do objeto, a automação determinará o aplicativo a ser iniciado e o objeto a ser ativado, de acordo com o nome de arquivo fornecido. Alguns arquivos, contudo, podem suportar mais do que uma classe de objeto. Por exemplo, um desenho poderia suportar três diferentes tipos de objetos: um objeto Application, um objeto Drawing e um objeto Toolbar, os quais fazem parte do mesmo arquivo. Para especificar o objeto de um arquivo que você deseja ativar, use o argumento classe opcional. Por exemplo:

Dim MyObject As Object

Set MyObject = GetObject("C:\DRAWINGS\SAMPLE.DRW", "FIGMENT.DRAWING")

No exemplo acima, FIGMENT é o nome de um aplicativo de desenho e DRAWING é um dos tipos de objeto ao qual dá suporte.

Depois que o objeto tiver sido ativado, é possível referenciá-lo em código usando a variável de objeto que você definiu. No exemplo anterior, você acessa as propriedades e os métodos do novo objeto usando a variável de objeto MyObject. Por exemplo:

MyObject.Line 9, 90

MyObject.InsertText 9, 100, "Olá, mundo."

MyObject.SaveAs "C:\DRAWINGS\SAMPLE.DRW"

Observação   Use a função GetObject quando houver uma ocorrência atual do objeto ou quando você desejar criar o objeto com um arquivo já carregado. Se não houver uma ocorrência atual e se você não quiser iniciar o objeto com um arquivo carregado, use a função CreateObject.

Se um objeto tiver registrado a si próprio como um objeto de ocorrência única, apenas uma ocorrência do objeto será criada, independentemente de quantas vezes CreateObject for executado. Com um objeto de ocorrência única, GetObject sempre retornará a mesma ocorrência quando chamado com a sintaxe da seqüência de comprimento zero (""), e se o argumento pathname for omitido, ocorrerá um erro. Você não pode usar GetObject para obter uma referência a uma classe criada com o Visual Basic.


Instrução Implements

Especifica uma interface ou classe que será implementada no módulo de classe em que aparece.

Sintaxe

Implements [InterfaceName | Class]

O InterfaceName ou Class obrigatório é o nome de uma interface ou classe em uma biblioteca de tipos cujos métodos serão implementados pelos métodos correspondentes na classe do Visual Basic.

Comentários

Uma interface é uma coleção de protótipos que representam os membros (métodos e propriedades) que a interface encapsula; ou seja, ela contém apenas as declarações para os procedimentos do membro. Uma classe fornece uma implementação de todos os métodos e propriedades de uma ou mais interfaces. As classes fornecem o código usado quando cada função é chamada por um controlador da classe. Todas as classes implementam pelo menos uma interface, considerada a interface padrão da classe. No Visual Basic, qualquer membro que não seja explicitamente um membro de uma interface implementada é implicitamente um membro da interface padrão.

Quando uma classe do Visual Basic implementa uma interface, a classe do Visual Basic fornece suas próprias versões de todos os procedimentos Public especificados no biblioteca de tipos da interface. Além de fornecer um mapeamento entre os protótipos da interface e seus procedimentos, a instrução Implements faz com que a classe aceite chamadas COM QueryInterface para a identificação da interface especificada.

Observação   O Visual Basic não implementa classes ou interfaces derivadas.

Ao implementar uma interface ou classe, você deve incluir todos os procedimentos Public envolvidos. Um membro não encontrado em uma implementação de uma interface ou classe causa um erro. Se você não posicionar o código em um dos procedimentos em uma classe sendo implementada, você poderá provocar o erro apropriado (Const E_NOTIMPL = &H80004001) para que um usuário da implementação entenda que o membro não está implementado.

A instrução Implements não pode aparecer em um módulo padrão.


Função LBound

Retorna um Long que contém o menor subscrito disponível para a dimensão indicada de uma matriz.

Sintaxe

LBound(arrayname[, dimension])

A sintaxe da função LBound apresenta as partes a seguir:

Parte	Descrição
arrayname	Obrigatória. Nome da variável de matriz, de acordo com as convenções de nomenclatura padrão de variáveis.
dimension	Opcional; Variant (Long). Número inteiro que indica a dimensão cujo limite inferior é retornado. Use 1 para a primeira dimensão, 2 para a segunda e assim por diante. Se dimensão for omitida, será usado 1.
Comentários

A função LBound é usada com a função UBound para determinar o tamanho de uma matriz. Use a função UBound para calcular o limite superior de uma dimensão de matriz.

LBound retorna os valores apresentados na tabela a seguir para uma matriz com as dimensões a seguir:

Dim A(1 To 100, 0 To 3, -3 To 4)

Instrução	Valor retornado
LBound(A, 1)	1
LBound(A, 2)	0
LBound(A, 3)	-3
O limite inferior padrão para qualquer dimensão é 0 ou 1, de acordo com a definição da instrução Option Base. A base de uma matriz criada com a função Array é zero; ela não é afetada por Option Base.

As matrizes para as quais são definidas dimensões usando-se a cláusula To em uma instrução Dim, Private, Public, ReDim ou Static podem apresentar qualquer valor inteiro como um limite inferior.


Instrução Let

Atribui o valor de uma expressão a uma variável ou propriedade.

Sintaxe

[Let] varname = expression

A sintaxe da instrução Let possui as partes a seguir:

Parte	Descrição
Let	Opcional. O uso explícito da palavra-chave Let é uma questão de estilo, mas ela geralmente é omitida.
varname	Obrigatória. Nome da variável ou propriedade; segue as convenções de nomenclatura padrão de variáveis.
expression	Obrigatória. Valor atribuído à variável ou propriedade.
Comentários

Uma expressão de valor pode ser atribuída a uma variável ou propriedade somente se for de um tipo de dados compatível com a variável. Você não pode atribuir expressões de seqüência a variáveis numéricas e não pode atribuir expressões numéricas a variáveis de seqüências. Se o fizer, ocorrerá um erro em tempo de compilação.

As variáveis Variant podem ser atribuídas a expressões de seqüência e expressões numéricas. No entanto, o contrário nem sempre é verdadeiro. Qualquer Variant exceto Null pode ser atribuído a uma variável de seqüência, mas apenas um Variant cujo valor possa ser interpretado como um número pode ser atribuído a uma variável numérica. Use a função IsNumeric para determinar se Variant pode ser convertido em um número.

Cuidado   Atribuir uma expressão de um tipo numérico a uma variável de um tipo numérico diferente converterá o valor da expressão no tipo numérico da variável resultante.

As instruções Let podem ser usadas para atribuir uma variável de registro a outra apenas quando ambas as variáveis são do mesmo tipo definido pelo usuário. Use a instrução LSet para atribuir variáveis de registro de diferentes tipos definidos pelo usuário. Use a instrução Set para atribuir referências de objetos às variáveis.


Instrução Option Base

Usada no nível de módulo para declarar o limite inferior padrão para os subscritos de matriz.

Sintaxe

Option Base {0 | 1}

Comentários

Uma vez que a base padrão é 0, a instrução Option Base nunca é exigida. Se for usada, a instrução deve aparecer em um módulo antes de qualquer procedimento. Option Base só pode aparecer uma vez em um módulo e deve anteceder as declarações de matrizes que incluam dimensões.

Observação   A cláusula To nas instruções Dim, Private, Public, ReDim e Static fornecem uma maneira mais flexível de controlar o intervalo de subscritos de uma matriz. No entanto, se você não definir explicitamente o limite mínimo com uma cláusula To, poderá usar Option Base para alterar o limite inferior padrão para 1. A base de uma matriz criada com a palavra-chave ParamArray é zero; Option Base não afeta ParamArray ou a função Array, quando qualificada com o nome de sua biblioteca de tipos, por exemplo VBA.Array).

A instrução Option Base afeta somente o limite inferior das matrizes no módulo no qual se localiza a instrução.


Instrução Option Compare

Usada no nível de módulo para declarar o método de comparação padrão a ser usado quando dados de seqüência forem comparados.

Sintaxe

Option Compare {Binary | Text | Database}

Comentários

Se usada, a instrução Option Compare deve aparecer em um módulo antes de qualquer procedimento.

A instrução Option Compare especifica o método de comparação de seqüências (Binary, Text ou Database) de um módulo. Se um módulo não incluir uma instrução Option Compare, o método de comparação de texto padrão será Binary.

Option Compare Binary resulta em comparações de seqüências de caracteres baseadas em uma ordem de classificação derivada das representações binárias internas dos caracteres. No Microsoft Windows, a ordem de classificação é determinada pela página de código. Uma ordem de classificação binária típica é mostrada no exemplo a seguir:

A < B < E < Z < a < b < e < z < À < Ê < Ø < à < ê < ø

Option Compare Text resulta em comparações de seqüências baseadas em uma ordem de classificação de texto que não coincide maiúsculas e minúsculas determinada pela localidade do seu sistema. Quando os mesmos caracteres são classificados através de Option Compare Text, a ordem de classificação de texto a seguir é produzida:

(A=a) < (À=à) < (B=b) < (E=e) < (Ê=ê) < (Z=z) < (Ø=ø)

Option Compare Database somente pode ser usado dentro do Microsoft Access. Isso resulta em comparações de seqüências baseadas na ordem de classificação determinada pelo código de localidade do banco de dados em que ocorrem as comparações de seqüências.


Instrução Option Explicit

Usada no nível de módulo para forçar a declaração explícita de todas as variáveis desse módulo.

Sintaxe

Option Explicit

Comentários

Se usada, a instrução Option Explicit deve aparecer em um módulo antes de qualquer procedimento.

Quando Option Explicit aparece em um módulo, você deve declarar explicitamente todas as variáveis usando as instruções Dim, Private, Public, ReDim ou Static. Se você tentar usar o nome não declarado de uma variável, ocorrerá um erro em tempo de compilação.

Se você não usar a instrução Option Explicit, todas as variáveis não declaradas serão do tipo Variant, a menos que o tipo padrão seja especificado com uma instrução Deftipo.

Observação   Use Option Explicit para evitar a digitação incorreta do nome de uma variável existente ou para evitar confusão no código em que o escopo da variável não esteja claro.


Instrução Option Private

Quando usada em aplicativos do host que permitem referências em múltiplos projetos, Option Private Module impede que o conteúdo de um módulo seja referenciado fora do seu projeto. Em aplicativos do host que não permitem essas referências, por exemplo, em versões independentes do Visual Basic, Option Private não terá efeito.

Sintaxe

Option Private Module

Comentários

Se usada, a instrução Option Private deve aparecer no nível de módulo antes de qualquer procedimento.

Quando um módulo contém Option Private Module, as partes públicas, por exemplo, variáveis, objetos e tipos definidos pelo usuário declarados no nível de módulo, continuam disponíveis dentro do projeto que contém o módulo, mas não ficam disponíveis para outros aplicativos ou projetos.

Observação   Option Private é útil somente para aplicativos do host que dão suporte ao carregamento simultâneo de vários projetos e permitem referências entre os projetos carregados. Por exemplo, o Microsoft Excel permite carregamento de vários projetos e Option Private Module pode ser usado para restringir a visibilidade entre projetos. Ainda que o Visual Basic permita o carregamento de vários projetos, referências entre projetos nunca são permitidas no Visual Basic.


Instrução Private

Usada no nível de módulo para declarar variáveis particulares e alocar espaço de armazenamento.

Sintaxe

Sintaxe Private [WithEvents] varname[([subscripts])] [As [New] type] [,[WithEvents] varname[([subscripts])] [As [New] type]] . . .

A sintaxe da instrução Private possui as partes a seguir:

Parte	Descrição
WithEvents	Opcional. Palavra-chave que especifica que varname é uma variável de objeto usada para responder a eventos acionados por um objeto ActiveX. WithEvents só é válido em módulos de classe. Você pode declarar quantas variáveis individuais desejar usando WithEvents, mas não pode criar matrizes com WithEvents. Você não pode usar New com WithEvents.
varname	Obrigatória. Nome da variável; segue as convenções de nomenclatura padrão de variáveis.
subscripts	Opcional. Dimensões de uma variável de matriz; até 60 dimensões múltiplas podem ser declaradas. O argumento subscritos usa a sintaxe a seguir:
	[lower To] upper [,[lower To] upper] . . .
	Quando não enunciado explicitamente em lower, o limite inferior de uma matriz é controlado pela instrução Option Base. O limite inferior é zero se nenhuma instrução Option Base estiver presente.
Nova	Opcional. Palavra-chave que permite a criação implícita de um objeto. Se você usar New ao declarar a variável de objeto, uma nova ocorrência do objeto será criada na primeira referência a ele. Dessa forma, você não precisa usar a instrução Set para atribuir a referência do objeto. A palavra-chave New não pode ser usada para declarar variáveis de qualquer tipo de dados intrínseco, não pode ser usada para declarar ocorrências de objetos dependentes nem ser usada com WithEvents.
type	Opcional. Tipo de dados da variável; pode ser Byte, Boolean, Integer, Long, Currency, Single, Double, Decimal (atualmente sem suporte), Date, String (para seqüências de comprimento variável), String * comprimento (para seqüências de comprimento fixo), Object, Variant, um tipo definido pelo usuário ou um tipo de objeto. Use uma cláusula As tipo para cada variável que estiver sendo definida.
Comentários

As variáveis Private encontram-se disponíveis somente para o módulo em que são declaradas.

Use a instrução Private para declarar o tipo de dados de uma variável. Por exemplo, a instrução a seguir declara uma variável como Integer:

Private NumberOfEmployees As Integer

Você também pode usar uma instrução Private para declarar o tipo de objeto de uma variável. A instrução a seguir declara uma variável para uma nova ocorrência de uma planilha.

Private X As New Worksheet

Se a palavra-chave New não for usada para declarar uma variável de objeto, um objeto já existente deverá ser atribuído a uma variável referente ao objeto através da instrução Set antes que ele possa ser usado. Até ter um objeto atribuído a ela, a variável de objeto declarada apresentará o valor especial Nothing, que indica que ela não se refere a nenhuma ocorrência específica de um objeto.

Se você não especificar um tipo de dados ou de objeto e se não houver nenhuma instrução Deftipo no módulo, a variável será Variant por padrão.

Você também pode usar a instrução Private com parênteses vazios para declarar uma matriz dinâmica. Após declará-la, use a instrução ReDim dentro de um procedimento para definir o número de dimensões e elementos na matriz. Se você tentar declarar novamente uma dimensão para uma variável de matriz cujo tamanho tenha sido especificado explicitamente em uma instrução Private, Public ou Dim, ocorrerá um erro.

Quando as variáveis são inicializadas, uma variável numérica é inicializada como 0, uma seqüência de comprimento variável é inicializada como uma seqüência de comprimento zero ("") e uma seqüência de comprimento fixo é preenchida com zeros. As variáveis Variant são inicializadas como Empty. Cada elemento de uma variável de tipo definido pelo usuário é inicializado como se fosse uma variável independente.

Observação   Quando você usar a instrução Private em um procedimento, geralmente coloca a instrução Private no início dele.


Instrução Property Get

Declara o nome, os argumentos e o código que formam o corpo de um procedimento Property, que obtém o valor de uma propriedade.

Sintaxe

[Public | Private | Friend] [Static] Property Get name [(arglist)] [As type]
[statements]
[name = expression]
[Exit Property]
[statements]
[name = expression]

End Property

A sintaxe da instrução Property Get possui as partes a seguir:

Parte	Descrição
Public	Opcional. Indica que o procedimento Property Get é acessível a todos os outros procedimentos de todos os módulos. Se usada em um módulo que contém uma instrução Option Private, o procedimento não se encontrará disponível fora do projeto.
Private	Opcional. Indica que o procedimento Property Get é acessível somente a outros procedimentos do módulo em que é declarado.
Friend	Opcional. Usado somente em um módulo de classe. Indica que o procedimento Property Get está visível através do projeto, mas não visível a outro controlador de uma ocorrência de um objeto.
Static	Opcional. Indica que as variáveis locais do procedimento Property Get são preservadas entre chamadas. O atributo Static não afeta variáveis que sejam declaradas fora do procedimento Property Get, mesmo se usadas no procedimento.
name	Obrigatória. Nome do procedimento Property Get; segue as convenções de nomenclatura padrão de variáveis, com exceção de que o nome pode ser o mesmo de um procedimento Property Let ou Property Set do mesmo módulo.
arglist	Opcional. Lista de variáveis que representam argumentos que são passados ao procedimento Property Get quando ele é chamado. Múltiplos argumentos são separados por vírgulas. O nome e o tipo de dados de cada argumento de um procedimento Property Get devem ser iguais ao argumento correspondente de um procedimento Property Let (se houver um).
type	Opcional. Tipo de dados do valor retornado pelo procedimento Property Get; pode ser Byte, Boolean, Integer, Long, Currency, Single, Double, Decimal (atualmente sem suporte), Date, String (exceto seqüências de comprimento fixo), Object, Variant ou tipo definido pelo usuário e Matrizes. O tipo retornado de um procedimento Property Get deve ser do mesmo tipo de dados do último (ou algumas vezes do único) argumento de um procedimento Property Let correspondente (se houver um) que define o valor atribuído à propriedade à direita de uma expressão.
statements	Opcional. Qualquer grupo de instruções a serem executadas dentro do corpo do procedimento Property Get.
expression	Opcional. Valor da propriedade retornado pelo procedimento definido pela instrução Property Get.
O argumento arglist apresenta a sintaxe e as partes a seguir:

[Optional] [ByVal | ByRef] [ParamArray] varname[( )] [As type] [= defaultvalue]

Parte	Descrição
Optional	Opcional. Indica que um argumento não é obrigatório. Se usado, todos os argumentos subseqüentes em arglist deverão ser opcionais e declarados através da palavra-chave Optional.
ByVal	Opcional. Indica que o argumento é passado por valor.
ByRef	Opcional. Indica que o argumento é passado por referência. ByRef é o padrão no Visual Basic.
ParamArray	Opcional. Usada apenas como o último argumento em arglist para indicar que o argumento final é uma matriz Optional de elementos Variant. A palavra-chave ParamArray permite que você forneça um número arbitrário de argumentos. Ela não pode ser usada com ByVal, ByRef ou Optional.
varname	Obrigatória. Nome da variável que representa o argumento; segue as convenções de nomenclatura padrão de variáveis.
type	Opcional. Tipo de dados do argumento passado ao procedimento; pode ser Byte, Boolean, Integer, Long, Currency, Single, Double, Decimal (atualmente não suportado), Date, String (apenas comprimento de variável), Object, Variant, ou um tipo de objeto específico. Se o parâmetro não for Optional, um tipo definido pelo usuário também pode ser especificado.
defaultvalue	Opcional. Qualquer constant ou expressão de constante. Válido somente para parâmetros Optional. Se o tipo for um Object, um valor padrão explícito só poderá ser Nothing.
Comentários

Se não forem especificados explicitamente através de Public ou Private, os procedimentos Property serão públicos por padrão. Se Static não for usado, o valor de variáveis locais não será preservado entre as chamadas. A palavra-chave Friend só pode ser usada em módulos classe. No entanto, os procedimentos Friend podem ser acessados por procedimentos em qualquer módulo de um projeto. Um procedimento Friend não aparece na biblioteca de tipos de sua classe pai nem pode ser vinculado posteriormente.

Todo o código executável deve estar em procedimentos. Você não pode definir um procedimento Property Get dentro de outro procedimento Property, Sub ou Function.

A instrução Exit Property causa uma saída imediata de um procedimento Property Get. A execução do programa continua com a instrução que segue a instrução que chamou o procedimento Property Get. Pode aparecer qualquer número de instruções Exit Property em qualquer lugar de um procedimento Property Get.

Como um procedimento Sub e Property Let, um procedimento Property Get é um procedimento separado que pode tomar argumentos, efetuar uma série de instruções e alterar os valores de seus argumentos. Entretanto, ao contrário de um procedimento Sub ou Property Let, você pode usar um procedimento Property Get à direita de uma expressão da mesma forma que usa um Function ou um nome de propriedade quando deseja retornar o valor de uma propriedade.


Instrução Property Let

Declara o nome, os argumentos e o código que formam o corpo de um procedimento Property Let, que atribui um valor a uma propriedade.

Sintaxe

[Public | Private | Friend] [Static] Property Let name ([arglist,] value)
[statements]
[Exit Property]
[statements]

End Property

A sintaxe da instrução Property Let possui as partes a seguir:

Parte	Descrição
Public	Opcional. Indica que o procedimento Property Let é acessível a todos os outros procedimentos de todos os módulos. Se usada em um módulo que contém uma instrução Option Private, o procedimento não se encontrará disponível fora do projeto.
Private	Opcional. Indica que o procedimento Property Let é acessível somente para outros procedimentos do módulo em que é declarado.
Friend	Opcional. Usado somente em um módulo de classe. Indica que o procedimento Property Let é visível através do projeto, mas não é visível a outro controlador de uma ocorrência de um objeto.
Static	Opcional. Indica que as variáveis locais do procedimento Property Let são preservadas entre chamadas. O atributo Static não afeta variáveis que sejam declaradas fora do procedimento Property Let, mesmo que elas sejam usadas no procedimento.
name	Obrigatória. Nome do procedimento Property Let; segue as convenções de nomenclatura padrão de variáveis, com exceção de que o nome pode ser o mesmo de um procedimento Property Get ou Property Set do mesmo módulo.
arglist	Obrigatória. Lista de variáveis que representam argumentos que são passados ao procedimento Property Let quando ele é chamado. Múltiplos argumentos são separados por vírgulas. O nome e o tipo de dados de cada argumento de um procedimento Property Let devem ser iguais ao argumento correspondente de um procedimento Property Get.
value	Obrigatória. Variável que contém o valor a ser atribuído à propriedade. Quando o procedimento é chamado, este argumento aparece à direita da expressão de chamada. O tipo de dados de value deve ser o mesmo que o tipo retornado do procedimento Property Get correspondente.
statements	Opcional. Qualquer grupo de instruções a ser executado dentro do procedimento Property Let.
O argumento arglist apresenta a sintaxe e as partes a seguir:

[Optional] [ByVal | ByRef] [ParamArray] varname[( )] [As type] [= defaultvalue]

Parte	Descrição
Optional	Opcional. Indica que um argumento não é obrigatório. Se usado, todos os argumentos subseqüentes em arglist deverão ser opcionais e declarados através da palavra-chave Optional. Observe que à direita de uma expressão Property Let não pode ser Optional.
ByVal	Opcional. Indica que o argumento é passado por valor.
ByRef	Opcional. Indica que o argumento é passado por referência. ByRef é o padrão no Visual Basic.
ParamArray	Opcional. Usada apenas como o último argumento em arglist para indicar que o argumento final é uma matriz Optional de elementos Variant. A palavra-chave ParamArray permite que você forneça um número arbitrário de argumentos. Ela não pode ser usada com ByVal, ByRef ou Optional.
varname	Obrigatória. Nome da variável que representa o argumento; segue as convenções de nomenclatura padrão de variáveis.
type	Opcional. Tipo de dados do argumento passado ao procedimento; pode ser Byte, Boolean, Integer, Long, Currency, Single, Double, Decimal (atualmente sem suporte), Date, String (somente de comprimento variável), Object, Variant. ou um tipo de objeto específico. Se o parâmetro não for Optional, um tipo definido pelo usuário também pode ser especificado.
defaultvalue	Opcional. Qualquer constant ou expressão de constante. Válido somente para parâmetros Optional. Se o tipo for um Object, um valor padrão explícito só poderá ser Nothing.
Observação   Toda instrução Property Let deve definir pelo menos um argumento para o procedimento que ela define. Esse argumento (ou o último argumento se houver mais de um) contém o valor real a ser atribuído à propriedade quando o procedimento definido pela instrução Property Let for chamado. Tal argumento é referido como value na sintaxe anterior.

Comentários

Se não forem especificados explicitamente através de Public ou Private, os procedimentos Property serão públicos por padrão. Se Static não for usado, o valor de variáveis locais não será preservado entre as chamadas. A palavra-chave Friend só pode ser usada em módulos classe. No entanto, os procedimentos Friend podem ser acessados por procedimentos em qualquer módulo de um projeto. Um procedimento Friend não aparece na biblioteca de tipos de sua classe pai nem pode ser vinculado posteriormente.

Todo o código executável deve estar em procedimentos. Você não pode definir um procedimento Property Let dentro de outro procedimento Property, Sub ou Function.

A instrução Exit Property causa uma saída imediata de um procedimento Property Let. A execução do programa continua com a instrução que segue a instrução que chamou o procedimento Property Let. Pode aparecer qualquer número de instruções Exit Property em qualquer lugar de um procedimento Property Let.

Da mesma forma que um procedimento Function e Property Get, um procedimento Property Let é um procedimento separado que pode tomar argumentos, efetuar uma série de instruções e alterar o valor de seus argumentos. Entretanto, ao contrário de um procedimento Function e Property Get, os quais retornam um valor, você somente pode usar um procedimento Property Let à esquerda de uma expressão de atribuição de propriedade ou instrução Let.


Instrução Property Set

Declara o nome, os argumentos e o código que formam o corpo de um procedimento Property, o qual define uma referência a um objeto.

Sintaxe

[Public | Private | Friend] [Static] Property Set name ([arglist,] reference)
[statements]
[Exit Property]
[statements]

End Property

A sintaxe da instrução Property Set possui as partes a seguir:

Parte	Descrição
Optional	Opcional. Indica que o argumento pode ou não ser fornecido pelo chamador.
Public	Opcional. Indica que o procedimento Property Set é acessível a todos os outros procedimentos em todos os módulos. Se usada em um módulo que contém uma instrução Option Private, o procedimento não se encontrará disponível fora do projeto.
Private	Opcional. Indica que o procedimento Property Set é acessível somente a outros procedimentos do módulo em que é declarado.
Friend	Opcional. Usado somente em um módulo de classe. Indica que o procedimento Property Set é visível através do projeto, mas não é visível a um controlador de uma ocorrência de um objeto.
Static	Opcional. Indica que as variáveis locais do procedimento Property Set são preservadas entre chamadas. O atributo Static não afeta variáveis que sejam declaradas fora do procedimento Property Set, mesmo se forem usadas no procedimento.
name	Obrigatória. Nome do procedimento Property Set; segue as convenções de nomenclatura padrão de variáveis, com exceção de que o nome pode ser o mesmo de um procedimento Property Get ou Property Let do mesmo módulo.
arglist	Obrigatória. Lista de variáveis que representam argumentos que são passados ao procedimento Property Set quando ele é chamado. Múltiplos argumentos são separados por vírgulas.
reference	Obrigatória. Variável que contém a referência ao objeto usada à direita da atribuição de referência ao objeto.
statements	Opcional. Qualquer grupo de instruções a ser executado dentro do corpo do procedimento Property.
O argumento arglist apresenta a sintaxe e as partes a seguir:

[Optional] [ByVal | ByRef] [ParamArray] varname[( )] [As type] [= defaultvalue]

Parte	Descrição
Optional	Opcional. Indica que um argumento não é obrigatório. Se usado, todos os argumentos subseqüentes em arglist deverão ser opcionais e declarados através da palavra-chave Optional. Observe que à direita de uma expressão Property Set não pode ser Optional.
ByVal	Opcional. Indica que o argumento é passado por valor.
ByRef	Opcional. Indica que o argumento é passado por referência. ByRef é o padrão no Visual Basic.
ParamArray	Opcional. Usada apenas como o último argumento em arglist para indicar que o argumento final é uma matriz Optional de elementos Variant. A palavra-chave ParamArray permite que você forneça um número arbitrário de argumentos. Ela não pode ser usada com ByVal, ByRef ou Optional.
varname	Obrigatória. Nome da variável que representa o argumento; segue as convenções de nomenclatura padrão de variáveis.
type	Opcional. Tipo de dados do argumento passado ao procedimento; pode ser Byte, Boolean, Integer, Long, Currency, Single, Double, Decimal (atualmente sem suporte), Date, String (somente de comprimento variável), Object, Variant, ou um tipo de objeto específico. Se o parâmetro não for Optional, um tipo definido pelo usuário também pode ser especificado.
defaultvalue	Opcional. Qualquer constant ou expressão de constante. Válido somente para parâmetros Optional. Se o tipo for um Object, um valor padrão explícito só poderá ser Nothing.
Observação   Toda instrução Property Set deve definir pelo menos um argumento do procedimento que ela define. Esse argumento (ou o último argumento se houver mais de um) contém a referência real ao objeto da propriedade quando o procedimento definido pela instrução Property Set é chamado. Ele é referido como reference na sintaxe anterior. Não pode ser Optional.

Comentários

Se não forem especificados explicitamente através de Public ou Private, os procedimentos Property serão públicos por padrão. Se Static não for usado, o valor de variáveis locais não será preservado entre as chamadas. A palavra-chave Friend só pode ser usada em módulos classe. No entanto, os procedimentos Friend podem ser acessados por procedimentos em qualquer módulo de um projeto. Um procedimento Friend não aparece na biblioteca de tipos de sua classe pai nem pode ser vinculado posteriormente.

Todo o código executável deve estar em procedimentos. Você não pode definir um procedimento Property Set dentro de outro procedimento Property, Sub ou Function.

A instrução Exit Property causa uma saída imediata de um procedimento Property Set. A execução do programa continua com a instrução que segue a instrução que chamou o procedimento Property Set. Pode aparecer qualquer número de instruções Exit Property em qualquer lugar de um procedimento Property Set.

Da mesma forma que um procedimento Function e Property Get, um procedimento Property Set é um procedimento separado que pode tomar argumentos, efetuar uma série de instruções e alterar o valor de seus argumentos. Entretanto, ao contrário de um procedimento Function e Property Get, os quais retornam um valor, você pode usar somente um procedimento Property Set à esquerda de uma atribuição de referência de objeto (instrução Set).


Instrução Public

Usada no nível de módulo para declarar variáveis públicas e alocar espaço de armazenamento.

Sintaxe

Public [WithEvents] varname[([subscripts])] [As [New] type] [,[WithEvents] varname[([subscripts])] [As [New] type]] . . .

A sintaxe da instrução Public possui as partes a seguir:

Parte	Descrição
WithEvents	Opcional. Palavra-chave que especifica que varname é uma variável de objeto usada para responder a eventos acionados por um objeto ActiveX. WithEvents só é válido em módulos classe. Você pode declarar quantas variáveis individuais desejar usando WithEvents, mas não pode criar matrizes com WithEvents. Você não pode usar New com WithEvents.
varname	Obrigatória. Nome da variável; segue as convenções de nomenclatura padrão de variáveis.
subscripts	Opcional. Dimensões de uma variável de matriz; até 60 dimensões múltiplas podem ser declaradas. O argumento subscritos usa a sintaxe a seguir: [lower To] upper [,[lower To] upper] . . . Quando não enunciado explicitamente em lower, o limite inferior de uma matriz é controlado pela instrução Option Base. O limite inferior é zero se nenhuma instrução Option Base estiver presente.
New	Opcional. Palavra-chave que permite a criação implícita de um objeto. Se você usar New ao declarar a variável de objeto, uma nova ocorrência do objeto será criada na primeira referência a ele. Dessa forma, você não precisa usar a instrução Set para atribuir a referência do objeto. A palavra-chave New não pode ser usada para declarar variáveis de qualquer tipo de dados intrínseco, não pode ser usada para declarar ocorrências de objetos dependentes nem ser usada com WithEvents.
type	Opcional. Tipo de dados da variável; pode ser Byte, Boolean, Integer, Long, Currency, Single, Double, Decimal (atualmente sem suporte), Date, String, (para seqüências de comprimento variável), String * length (para seqüências de comprimento fixo), Objeto, Variant, um tipo definido pelo usuário ou um tipo de objeto. Use uma cláusula As type para cada variável que estiver sendo definida.
Comentários

Variáveis declaradas usando-se a instrução Public estão disponíveis para todos os procedimentos em todos os módulos de todos os aplicativos, a menos que Option Private Module esteja em vigor, caso em que as variáveis serão públicas somente dentro do projeto no qual residem.

Cuidado   A instrução Public não pode ser usada em um módulo de classe para declarar uma variável de seqüência de comprimento fixo.

Use a instrução Public para declarar o tipo de dados de uma variável. Por exemplo, a instrução a seguir declara uma variável como Integer:

Public NumberOfEmployees As Integer

Use também uma instrução Public para declarar o tipo de objeto de uma variável. A instrução a seguir declara uma variável para uma nova ocorrência de uma planilha.

Public X As New Worksheet

Se a palavra-chave New não for usada para declarar uma variável de objeto, um objeto já existente deverá ser atribuído a uma variável referente ao objeto através da instrução Set antes que ele possa ser usado. Até ter um objeto atribuído a ela, a variável de objeto declarada apresentará o valor especial Nothing, que indica que ela não se refere a nenhuma ocorrência específica de um objeto.

Você também pode usar a instrução Public com parênteses vazios para declarar uma matriz dinâmica. Após declará-la, use a instrução ReDim dentro de um procedimento para definir o número de dimensões e elementos na matriz. Se você tentar declarar novamente uma dimensão para uma variável de matriz cujo tamanho tenha sido especificado explicitamente em uma instrução Private, Public ou Dim, ocorrerá um erro.

Se você não especificar um tipo de dados ou um tipo de objeto e não houver uma instrução Deftipo no módulo, a variável será Variant por padrão.

Quando as variáveis são inicializadas, uma variável numérica é inicializada como 0, uma seqüência de comprimento variável é inicializada como uma seqüência de comprimento zero ("") e uma seqüência de comprimento fixo é preenchida com zeros. As variáveis Variant são inicializadas como Empty. Cada elemento de uma variável de tipo definido pelo usuário é inicializado como se fosse uma variável independente.


Instrução ReDim

Usada no nível de procedimento para realocar o espaço de armazenamento para as variáveis de matriz dinâmica.

Sintaxe

ReDim [Preserve] varname(subscripts) [As type] [, varname(subscripts) [As type]] . . .

A sintaxe da instrução ReDim possui as partes a seguir:

Parte	Descrição
Preserve	Opcional. Palavra-chave usada para preservar os dados em uma matriz existente quando você altera o tamanho da última dimensão.
varname	Obrigatória. Nome da variável; segue as convenções de nomenclatura padrão de variáveis.
subscripts	Obrigatória. Dimensões de uma variável de matriz; até 60 dimensões múltiplas podem ser declaradas. O argumento subscritos usa a sintaxe a seguir: [lower To] upper [,[lower To] upper] . . . Quando não enunciado explicitamente em lower, o limite inferior de uma matriz é controlado pela instrução Option Base. O limite inferior é zero se nenhuma instrução Option Base estiver presente.
type	Opcional. Tipo de dados da variável; pode ser Byte, Boolean, Integer, Long, Currency, Single, Double, Decimal (atualmente sem suporte), Date, String (para seqüências de comprimento variável), String * length (para seqüências de comprimento fixo), Object, Variant, um tipo definido pelo usuário ou um tipo de objeto. Use uma cláusula As tipo para cada variável que estiver sendo definida. Para um Variant contendo uma matriz, tipo descreve o tipo de cada elemento da matriz, mas não altera o Variant para algum outro tipo.
Comentários

A instrução ReDim é usada para dimensionar ou redimensionar uma matriz dinâmica que já tenha sido declarada formalmente usando-se uma instrução Private, Public ou Dim com os parênteses vazios (sem subscritos de dimensão).

Você pode usar a instrução ReDim repetidamente para alterar o número de elementos e dimensões em uma matriz. Entretanto, você não pode declarar uma matriz de um tipo de dados e usar posteriormente ReDim para alterar a matriz para um outro tipo de dados, a menos que a matriz esteja contida em um Variant. Se a matriz estiver contida em um Variant, o tipo dos elementos podem ser alterados usando-se uma cláusula As type, a menos que você esteja usando a palavra-chave Preserve, que no caso, não permite alterações no tipo de dados.

Se você usar a palavra-chave Preserve, poderá redimensionar somente a última dimensão da matriz e não poderá alterar o número de dimensões. Por exemplo, se sua matriz possuir somente uma dimensão, você poderá redimensionar essa dimensão porque ela é a última e a única dimensão. Entretanto, se sua matriz possuir duas ou mais dimensões, você poderá alterar somente o tamanho da última dimensão e ainda preservar o conteúdo da matriz. O exemplo a seguir mostra como você pode aumentar o tamanho da última dimensão de uma matriz dinâmica sem apagar os dados nela contidos.

ReDim X(10, 10, 10)

. . .

ReDim Preserve X(10, 10, 15)

De forma semelhante, quando você usa Preserve, pode alterar o tamanho da matriz somente alterando o limite superior; alterar o limite inferior gera um erro.

Se você tornar uma matriz menor do que seu tamanho original, os dados contidos nos elementos eliminados serão perdidos. Se você passar uma matriz para um procedimento por referência, não poderá redimensionar a matriz dentro do procedimento.

Quando as variáveis são inicializadas, uma variável numérica é inicializada como 0, uma seqüência de comprimento variável é inicializada como uma seqüência de comprimento zero ("") e uma seqüência de comprimento fixo é preenchida com zeros. As variáveis Variant são inicializadas como Empty. Cada elemento de uma variável de tipo definido pelo usuário é inicializado como se fosse uma variável independente. Uma variável que faz referência a um objeto deve ser atribuída a um objeto existente usando-se a instrução Set antes que possa ser usada. Até que um objeto seja atribuído a ela, a variável de objeto declarada terá o valor especial Nothing, o que indica que ela não faz referência a uma ocorrência específica de um objeto.

Cuidado    A instrução ReDim age como uma instrução declarativa se a variável que ela declara não existir no nível de módulo ou no nível de procedimento. Se outra variável com o mesmo nome for criada posteriormente, mesmo em um escopo mais amplo, ReDim fará referência à variável posterior e não causará necessariamente um erro de compilação, mesmo que Option Explicit esteja em vigor. Para evitar esses conflitos, ReDim não deve ser usada como uma instrução declarativa, mas simplesmente para o redimensionamento de matrizes.

Observação    Para redimensionar uma matriz contida em um Variant, você deve declarar a variável Variant explicitamente antes de tentar redimensionar sua matriz.


Instrução Rem

Usada para incluir comentários explicativos em um programa.

Sintaxe

Rem comment

Você também pode usar a sintaxe a seguir:

' comment

O argumento opcional comment é o texto de qualquer comentário que você desejar incluir. É necessário um espaço entre a palavra-chave Rem e o comentário.

Comentários

Se você usar números de linha ou rótulos de linha, poderá desviar de uma instrução GoTo ou GoSub para uma linha contendo uma instrução Rem. A execução continua com a primeira instrução executável que se segue à instrução Rem. Se a palavra-chave Rem seguir outras instruções em uma linha, ela deve ser separada das instruções por dois-pontos (:).

Você pode usar um apóstrofo (') em vez da palavra-chave Rem. Quando você usar um apóstrofo, os dois-pontos não serão obrigatórios após outras instruções.


Instrução Set

Atribui uma referência de objeto a uma variável ou propriedade.

Sintaxe

Set objectvar = {[New] objectexpression | Nothing}

A sintaxe da instrução Set possui as partes a seguir:

Parte	Descrição
objectvar	Obrigatória. Nome da variável ou propriedade; segue as convenções de nomenclatura padrão de variáveis.
New	Opcional. New geralmente é usado durante a declaração para possibilitar a criação implícita de objeto. Quando New for usada com Set, ela criará uma nova ocorrência da classe. Se varobjeto contiver uma referência a um objeto, essa referência será liberada quando for atribuída uma nova. A palavra-chave New não pode ser usada para criar novas ocorrências de qualquer tipo de dados intrínseco nem para criar objetos dependentes.
objectexpression	Obrigatória. Expressão que consiste no nome de um objeto, uma outra variável declarada do mesmo tipo de objeto ou uma função ou método que retorna um objeto do mesmo tipo.
Nothing	Opcional. Suspende a associação de varobjeto com qualquer objeto específico. Atribuir Nothing a varobjeto libera todos os recursos de sistema e memória associados com o objeto referenciado anteriormente quando nenhuma outra variável fizer referência a ele.
Comentários

Para ser válido, objectvar deve ser um tipo de objeto consistente com o objeto sendo atribuído ao mesmo.

As instruções Dim, Private, Public, ReDim e Static declaram somente uma variável que faz referência a um objeto. Não é feita nenhuma referência a um objeto real até que você use a instrução Set para atribuir um objeto específico.

O exemplo a seguir ilustra como Dim é usado para declarar uma matriz com o tipo Form1. Nenhuma ocorrência de Form1 existe realmente. Set então atribui referências às novas ocorrências de Form1 à variável myChildForms. Esse código pode ser usado para criar formulários filho em um aplicativo MDI (Multiple Document Interface, interface de documentos múltiplos).

Dim myChildForms(1 to 4) As Form1

Set myChildForms(1) = New Form1

Set myChildForms(2) = New Form1

Set myChildForms(3) = New Form1

Set myChildForms(4) = New Form1

Geralmente, quando você usa Set para atribuir uma referência de objeto a uma variável, nenhuma cópia do objeto é criada para essa variável. Em vez disso, uma referência ao objeto é criada. É possível fazer com que mais de que uma variável de objeto faça referência ao mesmo objeto. Como essas variáveis são referências ao objeto em vez de cópias do objeto, qualquer alteração no objeto é refletida em todas as variáveis que fazem referência a ele. Entretanto, quando você usar a palavra-chave New na instrução Set, estará realmente criando uma ocorrência do objeto.


Instrução Static

Usada no nível de procedimento para declarar variáveis e alocar espaço de armazenamento. As variáveis declaradas com a instrução Static retêm seus valores desde que o código esteja sendo executado.

Sintaxe

Static varname[([subscripts])] [As [New] type] [, varname[([subscripts])] [As [New] type]] . . .

A sintaxe da instrução Static possui as partes a seguir:

Parte	Descrição
varname	Obrigatória. Nome da variável; segue as convenções de nomenclatura padrão de variáveis.
subscripts	Opcional. Dimensões de uma variável de matriz; podem ser declaradas até 60 dimensões variadas. O argumento subscritos usa a sintaxe a seguir: [lower To] upperr [,[lower To] upper] . . . Quando não enunciado explicitamente em lower, o limite inferior de uma matriz é controlado pela instrução Option Base. O limite inferior é zero se nenhuma instrução Option Base estiver presente.
New	Opcional. Palavra-chave que possibilita a criação implícita de um objeto. Se você usar New ao declarar a variável de objeto, uma nova ocorrência do objeto será criada na primeira referência a ele, assim não será necessário usar a instrução Set para atribuir a referência ao objeto. A palavra-chave New não pode ser usada para declarar variáveis de qualquer tipo de dados intrínseco nem para declarar ocorrências de objetos dependentes.
type	Opcional. Tipo de dados da variável; pode ser Byte, Boolean, Integer, Long, Currency, Single, Double, Decimal (atualmente sem suporte), Date, String, (para seqüências de comprimento variável), String * length (para seqüências de comprimento fixo), Objeto, Variant, um tipo definido pelo usuário ou um tipo de objeto. Use uma cláusula As type para cada variável que estiver sendo definida.
Comentários

Assim que o código do módulo estiver sendo executado, as variáveis declaradas com a instrução Static reterão seus valores até que o módulo seja redefinido ou reinicializado. Em módulos classe, as variáveis declaradas com a instrução Static retêm seus valores na ocorrência de cada classe até que essa ocorrência seja destruída. Em módulos formulário, os valores estáticos mantêm seus valores até que o formulário seja fechado. Use a instrução Static em um procedimento não-estático para declarar as variáveis explicitamente, as quais são visíveis somente dentro do procedimento, mas cujo tempo de vida seja o mesmo que o módulo no qual o procedimento é definido.

Use uma instrução Static dentro de um procedimento para declarar o tipo de dados de uma variável que retenha seu valor entre as chamadas de procedimento. Por exemplo, a instrução a seguir declara uma matriz de tamanho fixo de números inteiros:

Static EmployeeNumber(200) As Integer

A instrução a seguir declara uma variável para uma nova ocorrência de uma planilha:

Static X As New Worksheet

Se a palavra-chave New não for usada para declarar uma variável de objeto, um objeto já existente deverá ser atribuído a uma variável referente ao objeto através da instrução Set antes que ele possa ser usado. Até ter um objeto atribuído a ela, a variável de objeto declarada apresentará o valor especial Nothing, que indica que ela não se refere a nenhuma ocorrência específica de um objeto. Quando você usar a palavra-chave New na declaração, uma ocorrência do objeto será criada na primeira referência a ele.

Se você não especificar um tipo de dados ou de objeto e se não houver nenhuma instrução Deftipo no módulo, a variável será Variant por padrão.

Observação   A instrução Static e a palavra-chave Static são semelhantes, mas são usadas para efeitos diferentes. Se você declarar um procedimento usando a palavra-chave Static (como em Static Sub ContabVendas ()), o espaço de armazenamento para todas as variáveis locais dentro de um procedimento será alocado uma vez e os valores das variáveis serão preservados durante todo o tempo em que o programa encontrar-se em execução. Para procedimentos não-estáticos, o espaço de armazenamento referente às variáveis é alocado cada vez que o procedimento é chamado e liberado quando o procedimento é finalizado. A instrução Static é usada para declarar variáveis específicas dentro de procedimentos não-estáticos para preservar seus valores durante o tempo em que o programa estiver sendo executado.

Quando as variáveis são inicializadas, uma variável numérica é inicializada como 0, uma seqüência de comprimento variável é inicializada como uma seqüência de comprimento zero ("") e uma seqüência de comprimento fixo é preenchida com zeros. As variáveis Variant são inicializadas como Empty. Cada elemento de uma variável de tipo definido pelo usuário é inicializado como se fosse uma variável independente.

Observação   Quando você usar as instruções Static dentro de um procedimento, coloque-as no início do procedimento com outras instruções declarativas como Dim.


Instrução Sub

Declara o nome, os argumentos e o código que formam o corpo de um procedimento Sub.

Sintaxe

[Private | Public | Friend] [Static] Sub name [(arglist)]
[statements]
[Exit Sub]
[statements]

End Sub

A sintaxe da instrução Sub possui as partes a seguir:

Parte	Descrição
Public	Opcional. Indica que o procedimento Sub é acessível a todos os outros procedimentos em todos os módulos. Se usada em um módulo que contém uma instrução Option Private, o procedimento não se encontrará disponível fora do projeto.
Private	Opcional. Indica que o procedimento Sub é acessível somente a outros procedimentos no módulo em que é declarado.
Friend	Opcional. Usado somente em um módulo de classe. Indica que o procedimento Sub é visível através do projeto, mas não é visível a um controlador de uma ocorrência de um objeto.
Static	Opcional. Indica que as variáveis locais do procedimento Sub são preservadas entre as chamadas. O atributo Static não afeta as variáveis que são declaradas fora de Sub, mesmo que elas sejam usadas no procedimento.
Name	Obrigatória. Nome de Sub; segue as convenções de nomenclatura da variável padrão.
Arlist	Opcional. Lista de variáveis representando os argumentos que são passados para o procedimento Sub quando ele é chamado. Variáveis múltiplas são separadas por vírgulas.
Statements	Opcional. Qualquer grupo de instruções a serem executadas dentro do procedimento Sub.
O argumento arglist apresenta a sintaxe e as partes a seguir:

[Optional] [ByVal | ByRef] [ParamArray] varname[( )] [As type] [= defaultvalue]

Parte	Descrição
Optional	Opcional. Palavra-chave indicando que um argumento não é obrigatório. Se usado, todos os argumentos subseqüentes em arglist deverão ser opcionais e declarados através da palavra-chave Optional. Optional não pode ser usado para qualquer argumento se ParamArray for usado.
ByVal	Opcional. Indica que o argumento é passado por valor.
ByRef	Opcional. Indica que o argumento é passado por referência. ByRef é o padrão no Visual Basic.
ParamArray	Opcional. Usado apenas como o último argumento em arglist para indicar que o argumento final é uma matriz Optional de elementos Variant. A palavra-chave ParamArray permite que você forneça um número arbitrário de argumentos. ParamArray não pode ser usado com ByVal, ByRef ou Optional.
Varname	Obrigatória. Nome da variável que representa o argumento; segue as convenções de nomenclatura padrão de variáveis.
Type	Opcional. Tipo de dados do argumento passado ao procedimento; pode ser Byte, Boolean, Integer, Long, Currency, Single, Double, Decimal (atualmente sem suporte), Date, String (somente de comprimento variável), Object, Variant, ou um tipo de objeto específico. Se o parâmetro não for Optional, um tipo definido pelo usuário também pode ser especificado.
Defaultvalue	Opcional. Qualquer constante ou expressão de constante. Válido somente para parâmetros Optional. Se o tipo for um Object, um valor padrão explícito só poderá ser Nothing.
Comentários

Se não forem especificados de forma explícita usando Public, Private ou Friend, os procedimentos Sub serão públicos por padrão. Se Static não for usado, o valor de variáveis locais não será preservado entre as chamadas. A palavra-chave Friend só pode ser usada em módulos classe. No entanto, os procedimentos Friend podem ser acessados por procedimentos em qualquer módulo de um projeto. Um procedimento Friend não aparece na biblioteca de tipos de sua classe pai nem pode ser vinculado posteriormente.

Cuidado   Os procedimentos Sub podem ser recursivos; ou seja, eles podem chamar a si mesmos para efetuar uma determinada tarefa. No entanto, a recursão pode levar ao estouro de pilha. A palavra-chave Static geralmente não é usada com os procedimentos recursivos Sub.

Todo o código executável deve estar em procedimentos. Você não pode definir um procedimento Sub dentro de outro procedimento Sub, Function ou Property.

As palavras-chave Exit Sub causam uma saída imediata de um procedimento Sub. A execução do programa continua com a instrução que segue a instrução que chamou o procedimento Sub. É possível aparecer um número variado de instruções Exit Sub em qualquer lugar de um procedimento Sub.

Como um procedimento Function, um procedimento Sub é um procedimento separado que pode tomar os argumentos, efetuar uma série de instruções e alterar o valor de seus argumentos. Contudo, ao contrário do procedimento Function, que retorna um valor, um procedimento Sub não pode ser usado em uma expressão.

Você chama um procedimento Sub usando o nome do procedimento seguido pela lista de argumentos. Consulte a instrução Call para obter informações específicas sobre como chamar os procedimentos Sub.

As variáveis usadas nos procedimentos Sub incorrem em duas categorias: aquelas explicitamente declaradas dentro do procedimento e aquelas que não são declaradas dessa forma. As variáveis que são explicitamente declaradas dentro de um procedimento (usando Dim ou equivalente) são sempre locais em relação ao procedimento. As variáveis usadas, mas não explicitamente declaradas em um procedimento, também são locais, a menos que explicitamente declaradas em algum nível superior fora do procedimento.

Cuidado   Um procedimento pode usar uma variável que não seja explicitamente declarada no procedimento, mas pode ocorrer um conflito de nomenclatura se algo definido no nível de módulo apresentar o mesmo nome. Se seu procedimento fizer referência a uma variável não declarada que possui o mesmo nome que um outro procedimento, constante ou variável, será assumido que seu procedimento está se referindo àquele nome no nível de módulo. Para evitar esse tipo de conflito, declare as variáveis de forma explícita. Você pode usar uma instrução Option Explicit para forçar a declaração explícita de variáveis.

Observação   Você não pode usar GoSub, GoTo ou Return para inserir ou sair de um procedimento Sub.


Instrução Type

Usada no nível de módulo para definir um tipo de dados definido pelo usuário contendo um ou mais elementos.

Sintaxe

[Private | Public] Type varname
 elementname [([subscripts])] As type
[elementname [([subscripts])] As type]
. . .

End Type

A sintaxe da instrução Type possui as partes a seguir:

Parte	Descrição
Public	Opcional. Usada para declarar tipos definidos pelo usuário que estão disponíveis para todos os procedimentos em todos os módulos e em todos os projetos.
Private	Opcional. Usada para declarar tipos definidos pelo usuário que estão disponíveis somente dentro do módulo onde ocorre a declaração.
varname	Obrigatória. Nome do tipo definido pelo usuário; segue as convenções de nomenclatura padrão de variáveis.
elementname	Obrigatória. Nome de um elemento de tipo definido pelo usuário. Os nomes de elemento também seguem as convenções de nomenclatura padrão de variável, exceto que palavras-chave podem ser usadas.
subscripts	Quando não enunciado explicitamente em lower, o limite inferior de uma matriz é controlado pela instrução Option Base. O limite inferior é zero se nenhuma instrução Option Base estiver presente.
type	Obrigatória. Tipo de dados do elemento; pode ser Byte, Boolean, Integer, Long, Currency, Single, Double, Decimal (atualmente sem suporte), Date, String(para seqüências de comprimento variável), String * length (para seqüências de comprimento fixo), Object, Variant, um outro tipo definido pelo usuário ou um tipo de objeto.
Comentários

A instrução Type pode ser usada somente no nível de módulo. Assim que você tiver declarado um tipo definido pelo usuário usando a instrução Type, será possível declarar uma variável daquele tipo em qualquer lugar dentro do escopo da declaração. Use Dim, Private, Public, ReDim ou Static para declarar uma variável do tipo definido pelo usuário.

Em módulos padrão e módulos classe os tipos definidos pelo usuário são públicos por padrão. Essa visibilidade pode ser alterada usando-se a palavra-chave Private.

Não são permitidos números de linha e rótulos de linha nos blocos Type...End Type.

Os tipos definidos pelo usuário geralmente são usados com registros de dados, que freqüentemente consistem em um número de elementos relacionados de diferentes tipos de dados.

O exemplo a seguir mostra o uso de matrizes de tamanho fixo em um tipo definido pelo usuário:

Type StateData

CityCode (1 To 100) As Integer	' Declara uma matriz estática.

County As String * 30

End Type

Dim Washington(1 To 100) As StateData

No exemplo anterior, StateData inclui a matriz estática CódigoDaCidade e o registro SãoPaulo possui a mesma estrutura que StateData.

Quando você declarar uma matriz de tamanho fixo dentro de um tipo definido pelo usuário, suas dimensões devem ser declaradas com literais numéricos ou constantes em vez de variáveis.


Função UBound

Retorna um Long contendo o maior subscrito disponível para a dimensão indicada de uma matriz

Sintaxe

UBound(arrayname[, dimension])

A sintaxe da função UBound possui as partes a seguir:

Parte	Descrição
Arrayname	Obrigatória. Nome da variável de matriz, de acordo com as convenções de nomenclatura padrão de variáveis.
dimension	Opcional; Variant (Long). Número inteiro indicando a dimensão cujo limite superior é retornado. Use 1 para a primeira dimensão, 2 para a segunda e assim por diante. Se dimension for omitida, será usado 1.
Comentários

A função UBound é usada com a função LBound para determinar o tamanho de uma matriz. Use a função LBound para encontrar o limite inferior da dimensão de uma matriz.

UBound retorna os seguintes valores para uma matriz com as dimensões a seguir:

Dim A(1 To 100, 0 To 3, -3 To 4)

Instrução	Valor retornado
UBound(A, 1)	100
UBound(A, 2)	3
UBound(A, 3)	4


Exemplo da função Array

Este exemplo usa a função Array para retornar um Variant que contém uma matriz.

Dim MyWeek, MyDay

MyWeek = Array("Segunda", "Terça", "Quarta", "Quinta", "Sexta", "Sábado", "Domingo")

' Os valores retornados assumem o limite inferior definido como 1 (usando

' a instrução Option Base).

MyDay = MyWeek(2)	' MyDay contém "Terça".

MyDay = MyWeek(4)	' MyDay contém "Quinta".


Exemplo da instrução Const

Este exemplo usa a instrução Const para declarar constantes para uso em lugar de valores literais. As constantes Public ocorrem em uma seção geral de um módulo padrão, em vez de em um módulo de classe. As constantes Private podem aparecer na seção geral de qualquer tipo de módulo.

' As constantes são Private por padrão.

Const MyVar = 459

' Declara a constante Public.

Public Const MyString = "AJUDA"

' Declara a constante Integer Private.

Private Const MyInt As Integer = 5

' Declara múltiplas constantes na mesma linha.

Const MyString = "Olá", MyDouble As Double = 3.4567


Exemplo da função CreateObject

Este exemplo usa a função CreateObject para definir uma referência (xlApp) ao Microsoft Excel. Ele usa a referência para acessar a propriedade Visible do Microsoft Excel e, em seguida, usa o método Quit do Microsoft Excel para fechá-lo. Por fim, a própria referência é liberada.

Dim xlApp As Object	' Declara a variável para conter a referência.

Set xlApp = CreateObject("excel.application")

' Talvez você tenha que definir a propriedade Visible como True

' se desejar ver o aplicativo.

xlApp.Visible = True

' Use xlApp para acessar outros objetos do

' Microsoft Excel.

xlApp.Quit	' Quando terminar, use o método Quit para fechar

Set xlApp = Nothing	' o aplicativo e, em seguida, libere a referência.


Exemplo da instrução Declare

Este exemplo mostra como a instrução Declare é usada no nível de módulo de um módulo padrão para declarar uma referência a um procedimento externo em uma biblioteca de vínculo dinâmico (DLL, Dynamic Link Library). Você pode inserir as instruções Declare em módulos classe se as instruções Declare forem Private.

' No Microsoft Windows (de 16 bits):

Declare Sub MessageBeep Lib "User" (ByVal N As Integer)

' Suponha que SomeBeep é um alias para o nome do procedimento.

Declare Sub MessageBeep Lib "User" Alias "SomeBeep"(ByVal N As Integer)

' Usa um ordinal na cláusula Alias para chamar GetWinFlags.

Declare Function GetWinFlags Lib "Kernel" Alias "#132"() As Long

' Nos sistemas Microsoft Windows de 32 bits, especifique a biblioteca

' USER32.DLL em vez de USER.DLL. Você pode usar a compilação

' condicional para gravar um código que possa ser executado tanto no ' Win32 como no Win16.

#If Win32 Then

Declare Sub MessageBeep Lib "User32" (ByVal N As Long)

#Else

Declare Sub MessageBeep Lib "User" (ByVal N As Integer)

#End If


Exemplo de instruções Deftype

Este exemplo mostra vários usos das instruções Deftipo para definir os tipos de dados padrão de variáveis e procedimentos de função cujos nomes iniciam com caracteres especificados. O tipo de dados padrão pode ser sobrescrito somente por atribuição explícita usando-se a instrução Dim. As instruções Deftipo somente podem ser usadas no nível de módulo (ou seja, fora dos procedimentos).

' Os nomes de variável que começam com as letras entre A e K têm como

' padrão Integer.

DefInt A-K

' Os nomes de variável que começam com as letras entre L e Z têm como

' padrão String.

DefStr L-Z

CalcVar = 4	' Inicializa Integer.

StringVar = "Olá, pessoal"	' Inicializa String.

AnyVar = "Olá" 	' Provoca o erro "Tipos incompatíveis".

Dim Calc As Double	' Define explicitamente o tipo como Double.

Calc = 2.3455	' Atribui um Double.

' As instruções Deftipo também se aplicam a procedimentos de função.

CalcNum = ATestFunction(4)	' Chama a função definida pelo usuário.

' Definição do procedimento de função ATestFunction.

Function ATestFunction(INumber)

ATestFunction = INumber * 2	' O valor retornado é um inteiro.

End Function


Exemplo da instrução Dim

Este exemplo mostra a instrução Dim usada para declarar variáveis. Ele também mostra a instrução Dim sendo usada para declarar matrizes. O limite inferior padrão dos subscritos de matriz é 0 e pode ser sobrescrito no nível de módulo usando-se a instrução Option Base.

' AnyValue e MyValue são declarados como Variant por padrão, com os

' valores definidos em Empty.

Dim AnyValue, MyValue

' Declara explicitamente uma variável do tipo Integer.

Dim Number As Integer

' Múltiplas declarações em uma única linha. AnotherVar é do tipo Variant

' porque o seu tipo está omitido.

Dim AnotherVar, Choise As Boolean, BirthDate As Date

' DayArray é uma matriz de variantes com 51 elementos indexados, de

' 0 a 50, pressupondo-se que Option Base esteja definida como 0 (padrão)

' para o módulo atual.

Dim DayArray(50)

' Array é uma matriz bidimensional de inteiros.

Dim Array(3, 4) As Integer

' MyArray é uma matriz tridimensional de duplos com limites

' explícitos.

Dim MyArray(1 To 5,  4 To 9,  3 To 5) As Double

' BirthDate é uma matriz de datas com índices de 1 a 10.

Dim BirthDate(1 To 10) As Date

' MyArray é uma matriz dinâmica de variantes.

Dim MyArray()


Exemplo da instrução Enum

O exemplo a seguir mostra a instrução Enum usada para definir uma coleção de constantes nomeadas. Nesse caso, as constantes são cores que você pode escolher para projetar formulários de entrada de dados para um banco de dados.

Public Enum InterfaceColors

icMistyRose = &HE1E4FF&

icSlateGray = &H908070&

icDodgerBlue = &HFF901E&

icDeepSkyBlue = &HFFBF00&

icSpringGreen = &H7FFF00&

icForestGreen = &H228B22&

icGoldenrod = &H20A5DA&

icFirebrick = &H2222B2&

End Enum


Exemplo da instrução Erase

Este exemplo usa a instrução Erase para reinicializar os elementos de matrizes de tamanho fixo e desalocar espaço de armazenamento de matrizes dinâmicas.

' Declara as variáveis de matriz.

Dim NumArray(10) As Integer	' Matriz Integer.

Dim StrVarArray(10) As String	' Matriz de seqüência de caracteres

' variável.

Dim StrFixArray(10) As String * 10	' Matriz de seqüência de caracteres

' fixa.

Dim VarArray(10) As Variant	' Matriz de variante.

Dim DynamicArray() As Integer	' Matriz dinâmica.

ReDim DynamicArray(10)	' Aloca espaço de armazenamento.

Erase NumArray	' Cada elemento definido como 0.

Erase StrVarArray	' Cada elemento definido como seqüência de comprimento

' zero ("").

Erase StrFixArray	' Cada elemento definido como 0.

Erase VarArray	' Cada elemento definido como Empty.

Erase DynamicArray	' Libera a memória usada pela matriz.


Exemplo da instrução Event

O exemplo a seguir usa eventos para contar os segundos durante uma demonstração de corrida dos 100 metros mais rápidos. O código ilustra todos os métodos relacionados ao evento, propriedades e instruções, inclusive a instrução Event.

A classe que provoca um evento é a origem do evento e as classes que implementam o evento são os receptores. Uma origem de evento pode ter vários receptores para os eventos gerados. Quando a classe provoca o evento, esse evento é lançado em todas as classes eleitas para coletar eventos para essa ocorrência do objeto.

O exemplo também usa um formulário (Form1) com um botão (Command1), um rótulo (Label1) e duas caixas de texto (Text1 e Text2). Quando você clica no botão, a primeira caixa de texto exibe "De agora em diante" e a segunda inicia a contagem de segundos. Após decorrer o tempo total (9,84 segundos), a primeira caixa de texto exibe "Até agora" e a segunda exibe "9,84"

O código para Form1 especifica os estados inicial e terminal do formulário. Também contém o código executado quando os eventos são provocados.

Option Explicit

Private WithEvents mText As TimerState

Private Sub Command1_Click()

Text1.Text = "A partir de agora"

    Text1.Refresh

    Text2.Text = "0"

    Text2.Refresh

Call mText.TimerTask(9.84)

End Sub

Private Sub Form_Load()

    Command1.Caption = "Clique para iniciar o cronômetro"

    Text1.Text = ""

    Text2.Text = ""

    Label1.Caption = "A corrida de 100 metros mais rápida leva esse tempo:"

    Set mText = New TimerState

    End Sub

Private Sub mText_ChangeText()

    Text1.Text = "Até agora"

    Text2.Text = "9,84"

End Sub

Private Sub mText_UpdateTime(ByVal dblJump As Double)

    Text2.Text = Str(Format(dblJump, "0"))

    DoEvents

End Sub

O código restante está em um módulo de classe denominado TimerState. As instruções Event declaram os procedimentos inicializados quando os eventos são provocados

Option Explicit

Public Event UpdateTime(ByVal dblJump As Double)

Public Event ChangeText()

Public Sub TimerTask(ByVal Duration As Double)

    Dim dblStart As Double

    Dim dblSecond As Double

    Dim dblSoFar As Double

    dblStart = Timer

    dblSoFar = dblStart

    Do While Timer < dblStart + Duration

        If Timer - dblSoFar >= 1 Then

            dblSoFar = dblSoFar + 1

            RaiseEvent UpdateTime(Timer - dblStart)

        End If

    Loop

    RaiseEvent ChangeText

End Sub


Exemplo da instrução Function

Este exemplo usa a instrução Function para declarar o nome, argumentos e código que formam o corpo de um procedimento Function. O último exemplo usa argumentos Optional inicializados e digitados.

' A seguinte função definida pelo usuário retorna a raiz quadrada do

' argumento passado a ela.

Function CalculateSquareRoot(NumberArg As Double) As Double

If NumberArg < 0 Then	' Avalia o argumento.

Exit Function	' Sai para chamar o procedimento.

Else

CalculateSquareRoot = Sqr(NumberArg)	' Retorna a raiz quadrada.

End If

End Function

O uso da palavra-chave ParamArray possibilita que uma função aceite um número variável de argumentos. Na definição a seguir, FirstArg é passada pelo valor.

Function CalcSum(ByVal FirstArg As Integer, ParamArray OtherArgs())

Dim ReturnValue

' Se a função for chamada da seguinte maneira:

ReturnValue = CalcSum(4 , 3 , 2 , 1)

' As variáveis locais são atribuídas aos seguintes valores: FirstArg

' OtherArgs(1) = 3, OtherArgs(2) = 2, e assim por diante,

' pressupondo-se o limite inferior padrão para matrizes = 1.

Os argumentos Optional, podem ter valores e tipos padrão diferentes de Variant.

' Se os argumentos de uma função forem definidos da seguinte maneira:

Function MyFunc(MyStr As String, Optional MyArg1 As Integer = 5, Optional MyArg2 = "Dolly")

Dim RetVal

' A função pode ser chamada da seguinte maneira:

ValRet = MyFunc("Olá", 2, "mundo")	' Todos os 3 argumentos fornecidos.

ValRet = MyFunc("Teste", , 5)	' Segundo argumento omitido.

' Argumentos um e três usando argumentos nomeados.

ValRet = MyFunc(MyStr:="Olá ", MyArg1:=7)


Exemplo da função GetObject

Este exemplo usa a função GetObject para obter uma referência a uma planilha específica do Microsoft Excel (MyXL). Ele usa a propriedade Application da planilha para tornar o Microsoft Excel visível, fechá-lo, etc. Através de duas chamadas API (Aplication Programming Interface, interface de programação de aplicativo), o procedimento Sub de DetectExcel procura o Microsoft Excel e, se ele estiver sendo executado, insere-o na Tabela de objeto em execução. A primeira chamada para GetObject leva a um erro se o Microsoft Excel ainda não estiver sendo executado. No exemplo, o erro faz com que o sinalizador ExcelNãoEstavaSendoExecutado seja definido como True. A segunda chamada para GetObject especifica um arquivo a ser aberto. Se o Microsoft Excel ainda não estiver sendo executado, a segunda chamada o inicia e retorna uma referência à planilha representada pelo arquivo especificado, mytest.xls. O arquivo deve existir na localização especificada; caso contrário, gera-se o erro Erro de automação do Visual Basic. Depois, o código de exemplo torna visíveis tanto o Microsoft Excel como a janela que contém a planilha especificada. Por fim, se não havia versão anterior do Microsoft Excel sendo executado, o código usa o método Quit do objeto Application para fechar o Microsoft Excel. Se o aplicativo já estava sendo executado, não é feita nenhuma tentativa de fechá-lo. A própria referência é liberada sendo definida como Nothing.

' Declara rotinas API necessárias:

Declare Function FindWindow Lib "user32" Alias _

"FindWindowA" (ByVal lpClassName as String, _

ByVal lpWindowName As Long) As Long

Declare Function SendMessage Lib "user32" Alias _

"SendMessageA" (ByVal hWnd as Long,ByVal wMsg as Long, _

ByVal wParam as Long, _

ByVal lParam As Long) As Long

Sub GetExcel()

Dim MyXL As Object	' Variável para conter a referência

' ao Microsoft Excel.

Dim ExcelWasNotRunning As Boolean	' Sinalizador para

' liberação final.

' Testa para ver se já há uma cópia do Microsoft Excel sendo executada.

On Error Resume Next	' Adie a interceptação de erro.

' A função Getobject chamada sem o primeiro argumento returna uma

' referência para uma instânciato do aplicativo. Se o aplicativo não

' estiver executando, ocorre um erro.

Set MyXL = Getobject(, "Excel.Application")

If Err.Number <> 0 Then ExcelWasNotRunning = True

Err.Clear	' Limpe o objeto Err caso um erro ocorra.

' Se Microsoft Excel está executando,

' entre na tabela Objeto Executando.

DetectExcel

' Defina a variável de objeto para fazer referência ao arquivo que você

' deseja ver.

Set MyXL = Getobject("c:\vb4\MYTEST.XLS")

' Exiba o Microsoft Excel através de sua propriedade Application. Então

' exiba a janela atual com o arquivo que usa a coleção do Windows

' da referência do objeto MeuXL.

MyXL.Application.Visible = True

MyXL.Parent.Windows(1).Visible = True

 Manipule seus arquivos aqui.

' ...

' Se esta cópia do Microsoft Excel não estava sendo executada quando

' você iniciou, feche-a através do método Quit da propriedade

' Application.

' Observe que quando você tentar sair do Microsoft Excel,

' a barra de títulos fica intermitente e aparece uma mensagem perguntando

' se deseja salvar algum arquivo carregado.

If ExcelWasNotRunning = True Then

MyXL.Application.Quit

End IF

Set MyXL = Nothing	' Libere a referência ao

' aplicativo e planilha.

End Sub

Sub DetectExcel()

' O procedimento detecta um Excel sendo executado e o registra.

Const WM_USER = 1024

Dim hWnd As Long

' Se o Excel estiver sendo executado, esta chamada de API retorna seu

' gerenciamento.

hWnd = FindWindow("XLMAIN", 0)

If hWnd = 0 Then	' 0 significa que o Excel não está em execução.

Exit Sub

Else

' O Excel está em execução; use a função de API SendMessage

' para inseri-lo na Tabela de objeto em execução.

SendMessage hWnd, WM_USER + 18, 0, 0

End If

End Sub


Exemplo da instrução Implements

O exemplo a seguir mostra como usar a instrução Implements para disponibilizar um conjunto de declarações às mútliplas classes. Ao compartilhar as declarações através da instrução Implements, nenhuma classe deve fazer qualquer declaração.

Assuma que há dois formulários. O formulário Seletor tem dois botões, Dados do cliente e Dados do fornecedor. Para inserir informações sobre nome e endereço de um cliente ou fornecedor, o usuário clica no botão Cliente ou Fornecedor e, em seguida, insere o nome e endereço usando o formulário Entrada de dados. Este tem dois campos de texto, Nome e Endereço.

O código a seguir, para as declarações compartilhadas, está em uma classe chamada DadosPessoais:

Public Name As String

Public Address As String

O código que dá suporte aos dados do cliente está em um módulo de classe chamado Cliente:

Implements PersonalData

Private Property Get PersonalData_Address() As String

PersonalData_Address = "EndereçoDoCliente"

End Property

Private Property Let PersonalData_Address(ByVal RHS As String)

'

End Property

Private Property Let PersonalData_Name(ByVal RHS As String)

'

End Property

Private Property Get PersonalData_Name() As String

PersonalData_Name = "NomeDoCliente"

End Property

O código que dá suporte aos dados do fornecedor está em um módulo de classe chamado Fornecedor:

Implements PersonalData

Private Property Get PersonalData_Address() As String

PersonalData_Address = "EndereçoDoFornecedor"

End Property

Private Property Let PersonalData_Address(ByVal RHS As String)

'

End Property

Private Property Let PersonalData_Name(ByVal RHS As String)

'

End Property

Private Property Get PersonalData_Name() As String

PersonalData_Name = "NomeDoFornecedor"

End Property

O código a seguir dá suporte ao formulário Seletor:

Private cust As New Customer

Private sup As New Suplier

Private Sub Command1_Click()

Dim frm2 As New Form2

    Set frm2.PD = cust

    frm2.Show 1

End Sub

Private Sub Command2_Click()

Dim frm2 As New Form2

    Set frm2.PD = sup

    frm2.Show 1

End Sub

O código a seguir dá suporte ao formulário Entrada de dados:

Private m_dp As PersonalData

Private Sub Form_Load()

    With m_dp

        Text1 = .Name

        Text2 = .Address

    End With

End Sub

Public Property Set DP(Data As PersonalData)

    Set m_dp = Data

End Property


Exemplo da função LBound

Este exemplo usa a função LBound para determinar o menor subscrito disponível para a dimensão indicada de uma matriz. Use a instrução Option Base para substituir o valor 0 do subscrito da matriz base padrão.

Dim Lower

Dim MyArray(1 To 10, 5 To 15, 10 To 20) 	' Declara as variáveis de

' matriz.

Dim AnyArray(10)

Inferior = Lbound(MyArray, 1) 	' Retorna 1.

Inferior = Lbound(MyArray, 3)	' Retorna 10.

Inferior = Lbound(MyArray)	' Retorna 0 ou 1, dependendo da

' definição de Option Base.


Exemplo da instrução Let

Este exemplo atribui valores de expressões a variáveis usando a instrução explícita Let.

Dim MyStr, MyInt

' As atribuições de variáveis a seguir usam a instrução Let.

Let MyStr = "Olá, mundo"

Let MyInt = 5

As atribuições seguintes são as mesmas, mas sem a instrução.

Dim MyStr, MyInt

MyStr = "Olá, mundo"

MyInt = 5


Exemplo da instrução Option Base

Este exemplo usa a instrução Option Base para sobrescrever o valor 0 do subscrito da matriz base padrão. A função LBound retorna o menor subscrito disponível para a dimensão indicada de uma matriz. A instrução Option Base só é usada no nível de módulo.

Option base 1	' Define os subscritos da matriz padrão como 1.

Dim Lower

Dim MyArray(20), TwoDArray(3, 4)	' Declara as variáveis de matriz.

Dim ZeroArray(0 To 5)	' Sobrescreve subscrito base padrão.

' Use a função LBound para testar limites inferiores de matrizes.

Lower = Lbound(MyArray, 1)	' Retorna 1.

Lower = Lbound(TwoDArray, 3)	' Retorna 1.

Lower = Lbound(ZeroArray)	' Retorna 0.


Exemplo da instrução Option Compare

Este exemplo usa a instrução Option Compare para definir o método de comparação de seqüências de caracteres padrão. A instrução Option Compare só é usada no nível de módulo.

' Define o método de comparação de seqüências de caracteres como Binary.

Option compare Binary 	' Ou seja, "AAA" é menor que "aaa".

' Define o método de comparação de seqüências de caracteres como Text.

Option compare Text	' Ou seja, "AAA" é igual "aaa".


Exemplo da instrução Option Explicit

Este exemplo usa a instrução Option Explicit para forçar a declaração explícita de todas as variáveis. Tentar usar uma variável não declarada provoca um erro durante a compilação. A instrução Option Explicit só é usada no nível de módulo.

Option explicit	' Força a declaração explícita de variáveis.

Dim MyVar	' Declara a variável.

MyInt = 10	' Variável não declarada gera erro.

MyVar = 10	' Variável declarada não gera erro.


Exemplo da instrução Option Private

Este exemplo demonstra a instrução Option Private, que é usada no nível de módulo para indicar que o módulo inteiro é privado. Com Option Private Module, as partes no nível de módulo não declaradas Private ficam disponíveis para outros módulo do projeto, mas não para outros projetos ou aplicativos.

Option private Module	' Indica que o módulo é privado.


Exemplo da instrução Private

Este exemplo mostra a instrução Private sendo usada no nível de módulo para declarar variáveis como particulares; ou seja, elas estão disponíveis somente aos módulos em que são declaradas.

Private Number As Integer	' Variável Integer particular

Private ArrayName(1 To 5) As String	' Variável de matriz Private

' Multiple declarations, two Variants and one Integer, all Private.

Private MyVar, YourVar, ThisVar As Integer


Exemplo da instrução Property Get

Este exemplo usa a instrução Property Get para definir o procedimento de uma propriedade que obtenha o valor de uma propriedade. A propriedade identifica a cor atual de uma caneta como uma seqüência.

Dim CorAtual As Integer

Const BLACK = 0, RED = 1, GREEN = 2, BLUE = 3

' Retorna a cor atual da caneta como uma seqüência.

Property Get PenColor() As String

Select Case CorAtual

Case RED

PenColor = "Vermelho"

Case GREEN

PenColor = "Verde"

Case BLUE

PenColor = "Azul"

End Select

End Property

' O código a seguir obtém a cor da caneta chamando o procedimento

' Property Get.

ColorName = PenColor


Exemplo da instrução Property Let

Este exemplo usa a instrução Property Let para definir um procedimento que atribui um valor a uma propriedade. A propriedade identifica a cor da caneta para um pacote de desenho.

Dim CurrentColor As Integer

Const BLACK = 0, RED = 1, GREEN = 2, BLUE = 3

' Define a propriedade da cor da caneta para um pacote de desenho.

' A variável CorAtual no nível de módulo está definida para um valor

' numérico que identifica a cor usada para desenho.

Property Let PenColor(ColorName As String)

Select Case NomeDaCor	' Verifica a seqüência do nome da cor.

Case "Vermelho"

CurrentColor = RED	' Atribui valor para Vermelho.

Case "Verde"

CurrentColor = GREEN	' Atribui valor para Verde.

Case "Azul"

CurrentColor = BLUE	' Atribui valor para Azul.

Case Else

CurrentColor = BLACK	' Atribui valor padrão.

End Select

End Property

' The following code sets the PenColor property for a drawing package

' by calling the Property let procedure.

PenColor = "Vermelho"


Exemplo da instrução Property Set

Este exemplo usa a instrução Property Set para definir um procedimento de propriedade que defina uma referência a um objeto.

' A propriedade Pen pode ser definida para implementações diferentes.

Property Set Pen(P As Object)

Set CurrentPen = P	' Atribui Pen ao objeto.

End Property


Exemplo da instrução Public

Este exemplo usa a instrução Public no nível de módulo (seção geral) de um módulo padrão para declarar explicitamente variáveis como públicas; ou seja, elas estão disponíveis para todos os procedimentos para todos os módulos em todos os aplicativos, a não ser que Option Private Module esteja em vigor.

Public Number As Integer	' Variável Integer pública.

Public NameArray(1 To 5) As String	' Variável de matriz pública.

' Múltiplas declarações, dois Variants e um Integer, todas Public.

Public MyVar, YourVar, ThisVar As Integer


Exemplo da instrução ReDim

Este exemplo usa a instrução ReDim para alocar e realocar espaço de armazenamento para variáveis de matriz dinâmica. Pressupõe-se que Option Base seja 1.

Dim MyArray() As Integer	' Declare a matriz dinâmica.

Redim MyArray(5)	' Determina a alocação de cinco elementos.

For I = 1 To 5	' Fazer o loop 5 vezes.

MyArray(I) = I	' Inicialize a matriz.

Next I

A próxima instrução redimensiona a matriz e apaga os elementos.

Redim MyArray(10)	' Redimensiona para 10.

For I = 1 To 10	' Fazer o loop 10 vezes.

MyArray(I) = I	' Inicialize a matriz.

Next I

A instrução a seguir redimensiona a matriz sem apagar os elementos.

Redim Preserve MyArray(15)	' Redimensiona para 15.


Exemplo da instrução Rem

Este exemplo ilustra as várias formas da instrução Rem, usada para incluir comentários explicativos no programa.

Dim MyStr1, MyStr2

MyStr1 = "Olá": Rem Comentário após instrução, separado por dois-pontos.

MyStr2 = "Adeus" 	' Este também é um comentário; não é necessário usar

' os dois-pontos.


Exemplo da instrução Set

Este exemplo usa a instrução Set para atribuir referências de objetos a variáveis. Supõe-se que SeuObjeto seja um objeto válido com uma propriedade Text.

Dim YourObject, MyObject, MyStr

Set MyObject = YourObject	' Atribui referência de objeto.

' MyObject e YourObject referem-se ao mesmo objeto.

YourObject.Text = "Olá, mundo"	' Inicializa a propriedade.

MyStr = MyObject.Text	' Retorna "Olá Mundo".

' Interrompe associação. MyObject não fará mais referência a YourObject.

Set MyObject = Nothing	' Liberar o objeto.


Exemplo da instrução Static

Este exemplo usa a instrução Static para reter o valor de uma variável durante execução de código de módulo.

' Definição de função.

Function KeepTotal(Number)

' Somente a variável Acumular preserva seu valor entre as chamadas.

Static Acumular

Accumulate= Accumulate + Number

KeepTotal = Accumulate

End Function

' Definição da função Static.

Static Function MyFunction(Arg1, Arg2, Arg3)

' Todas as variáveis locais preservam o valor entre as chamadas de

' função.

Accumulate= Arg1 + Arg2 + Arg3

Half = Accumulate / 2

MyFunction = Half

End Function


Exemplo da instrução Sub

Este exemplo usa a instrução Sub para definir o nome, argumentos e o código que formam o corpo de um procedimento Sub.

' Definição do procedimento Sub.

' Procedimento Sub com dois argumentos.

Sub SubComputeArea(Length, TheWidth)

Dim Area As Double	' Declare a variável local.

If Length = 0 Or TheWidth = 0 Then

' Se ambos os argumentos = 0.

Exit Sub	' Exit Sub immediately.

End If

Area = Length * TheWidth 	' Calcula a área do retângulo.

Debug.Print Area	' Imprime a área para a janela de depuração.

End Sub


Exemplo da instrução Type

Este exemplo usa a instrução Type para definir um tipo de dados definido pelo usuário. A instrução Type é usada somente no nível de módulo. Se ela aparecer em um módulo de classe, uma instrução Type deve ser precedida pela palavra-chave Private.

Type EmployeeRecord	' Cria o tipo definido pelo usuário.

ID As Integer	' Define elementos de um tipo de dados.

Name As String * 20

Address As String * 30

Phone As Long

HireDate As Date

End Type

Sub CreateRecord()

Dim MyRecord As EmployeeRecord	' Declara a variável.

' A atribuição à variável RegistroDoFuncionário deve ocorrer em um

' procedimento.

MyRecord.ID = 12003	'Atribui um valor a um elemento.

End Sub


Exemplo da função UBound

Este exemplo usa a instrução UBound para declarar o maior subscrito disponível para a dimensão indicada de uma matriz.

Dim Upper

Dim MyArray(1 To 10, 5 To 15, 10 To 20)	' Declara as variáveis de

' matriz.

Dim AnyArray(10)

Upper = UBound(MyArray, 1)	' Retorna 10.

Upper = UBound(MyArray, 3)	' Retorna 20.

Upper = UBound(AnyArray)	' Retorna 10.


Exemplo da função CallByName

Exte exemplo usa a função CallByName para recorrer ao método Move de um botão de comando.

O exemplo também usa um formulário (Form1) com um botão (Command1) e um rótulo (Label1). Quando o formulário é carregado, a propriedade Caption do rótulo é definida em "Move", o nome do método a ser solicitado. Ao clicar no botão, a função CallByName chama o método para alterar a localização do botão.

Option Explicit

Private Sub Form_Load()

Label1.Caption = "Move"	' Nome do método Move.

End Sub

Private Sub Command1_Click()

If Command1.Left <> 0 Then

CallByName Command1, Label1.Caption, vbMethod, 0, 0

Else

CallByName Command1, Label1.Caption, vbMethod, 500, 500

End If


As <palavra-chave>
As

A palavra-chave As é usada nos seguintes contextos:

Instrução Const

Instrução Declare

Instrução Dim

Instrução Function

Instrução Name

Instrução Open

Instrução Private

Instrução Property Get

Instrução Property Let

Instrução Property Set

Instrução Public

Instrução ReDim

Instrução Static

Instrução Sub

Instrução Type


Binary <palavra-chave>
Binary

A palavra-chave Binary é usada nos seguintes contextos:

Instrução Open

Instrução Option Compare


ByRef <palavra-chave>
ByRef

A palavra-chave ByRef é usada nos seguintes contextos:

Instrução Call

Instrução Declare

Instrução Function

Instrução Property Get

Instrução Property Let

Instrução Property Set

Instrução Sub


ByVal <palavra-chave>
ByVal

A palavra-chave ByVal é usada nos seguintes contextos:

Instrução Call

Instrução Declare

Instrução Function

Instrução Property Get

Instrução Property Let

Instrução Property Set

Instrução Sub


Date <palavra-chave>
Date

A palavra-chave Date é usada nos seguintes contextos:

Tipo de dados Date

Função Date

Instrução Date


Else <palavra-chave>
Else

A palavra-chave Else é usada nos seguintes contextos:

Instrução If...Then...Else

Instrução Select Case


Error <palavra-chave>
Error

A palavra-chave Error é usada nos seguintes contextos:

Função Error

Instrução Error

Instrução On Error


For <palavra-chave>
For

A palavra-chave For é usada nos seguintes contextos:

Instrução For...Next

Instrução For Each...Next

Instrução Open


Get <palavra-chave>
Get

A palavra-chave Get é usada nos seguintes contextos:

Instrução Get

Instrução Property Get


Input <palavra-chave>
Input

A palavra-chave Input é usada nos seguintes contextos:

Função Input

Instrução Input #

Instrução Line Input #

Instrução Open


Is <palavra-chave>
Is

A palavra-chave Is é usada nos seguintes contextos:

Instrução If...Then...Else

Operador Is

Instrução Select Case


Len <palavra-chave>
Len

A palavra-chave Len é usada nos seguintes contextos:

Função Len

Instrução Open


Let <palavra-chave>
Let

A palavra-chave Let é usada nos seguintes contextos:

Instrução Let

Instrução Property Let


Lock <palavra-chave>
Lock

A palavra-chave Lock é usada nos seguintes contextos:

Instruções Lock, Unlock

Instrução Open


Mid <palavra-chave>
Mid

A palavra-chave Mid é usada nos seguintes contextos:

Função Mid

Instrução Mid


New <palavra-chave>
New

A palavra-chave New é usada nos seguintes contextos:

Instrução Dim

Instrução Private

Instrução Public

Instrução Set

Instrução Static


Next <palavra-chave>
Next

A palavra-chave Next é usada nos seguintes contextos:

Instrução For...Next

Instrução For Each...Next

Instrução On Error

Instrução Resume


On <palavra-chave>
On

A palavra-chave On é usada nos seguintes contextos:

Instrução On Error

Instrução On...GoSub

Instrução On...GoTo


Option <palavra-chave>
Option

A palavra-chave Option é usada nos seguintes contextos:

Instrução Option Base

Instrução Option Compare

Instrução Option Explicit

Instrução Option Private


Optional <palavra-chave>
Optional

A palavra-chave Optional é usada nos seguintes contextos:

Instrução Declare

Instrução Function

Instrução Property Get

Instrução Property Let

Instrução Property Set

Instrução Sub


ParamArray <palavra-chave>
ParamArray

A palavra-chave ParamArray é usada nos seguintes contextos:

Instrução Declare

Instrução Function

Instrução Property Get

Instrução Property Let

Instrução Property Set

Instrução Sub


Print <palavra-chave>
Print

A palavra-chave Print é usada nos seguintes contextos:

Método Print

Instrução Print #


Private <palavra-chave>
Private

A palavra-chave Private é usada nos seguintes contextos:

Instrução Const

Instrução Declare

Instrução Enum

Instrução Function

Instrução Option Private

Instrução Private

Instrução Property Get

Instrução Property Let

Instrução Property Set

Instrução Sub

Instrução Type


Property <palavra-chave>
Property

A palavra-chave Property é usada nos seguintes contextos:

Instrução Property Get

Instrução Property Let

Instrução Property Set


Public <palavra-chave>
Public

A palavra-chave Public é usada nos seguintes contextos:

Instrução Const

Instrução Declare

Instrução Enum

Instrução Event

Instrução Function

Instrução Property Get

Instrução Property Let

Instrução Property Set

Instrução Public

Instrução Sub

Instrução Type


Resume <palavra-chave>
Resume

A palavra-chave Resume é usada nos seguintes contextos:

Instrução On Error

Instrução Resume


Seek <palavra-chave>
Seek

A palavra-chave Seek é usada nos seguintes contextos:

Função Seek

Instrução Seek


Set <palavra-chave>
Set

A palavra-chave Set é usada nos seguintes contextos:

Instrução Set

Instrução Property Set


Static <palavra-chave>
Static

A palavra-chave Static é usada nos seguintes contextos:

Instrução Function

Instrução Property Get

Instrução Property Let

Instrução Property Set

Instrução Static

Instrução Sub


Step <palavra-chave>
Step

A palavra-chave Step é usada nos seguintes contextos:

Instrução For...Next

Instrução For Each...Next


String <palavra-chave>
String

A palavra-chave String é usada nos seguintes contextos:

Tipo de dados String

Função String


Then <palavra-chave>
Then

A palavra-chave Then é usada nos seguintes contextos:

Diretiva #If...Then...#Else

Instrução If...Then...Else


Time <palavra-chave>
Time

A palavra-chave Time é usada nos seguintes contextos:

Função Time

Instrução Time


To <palavra-chave>
To

A palavra-chave To é usada nos seguintes contextos:

Instrução Dim

Instrução For...Next

Instruções Lock, Unlock

Instrução Private

Instrução Public

Instrução ReDim

Instrução Select Case

Instrução Static

Instrução Type


WithEvents <palavra-chave>
WithEvents

A palavra-chave WithEvents é usada nos seguintes contextos:

Instrução Dim

Instrução Private

Instrução Public


Convenções da documentação

A documentação do Visual Basic usa as seguintes convenções tipográficas.

Convenção	Descrição
Sub, If, ChDir, Print, True, Debug	Palavras em negrito com a primeira letra maiúscula indicam palavras-chave específicas da linguagem.
Configurar	Palavras que você é instruído a digitar aparecem em negrito.
object, varname, arglist	Letras minúsculas em itálico indicam lugares reservados para informações que você fornece.
pathname, filenumber	Letras minúsculas em itálico e negrito indicam lugares reservados para argumentos onde você pode usar sintaxe posicional ou de argumento nomeado.
[expressionlist]	Na sintaxe, os itens entre colchetes são opcionais.
{While | Until}	Na sintaxe, chaves e uma barra vertical indicam uma escolha obrigatória entre dois ou mais itens.  Você deve escolher um dos itens, a não ser que todos eles também estejam entre colchetes. Por exemplo: [{This | OrThat}]
ESC, ENTER	Palavras em maiúsculas indicam nomes de teclas e seqüências de teclas.
ALT+F1, CTRL+R	Um sinal de mais (+) entre nomes de teclas indica uma combinação de teclas. Por exemplo, ALT+F1 significa que você deve manter a tecla ALT pressionada enquanto pressiona a tecla F1.
Convenções de código

São usadas as seguintes convenções de código:

Exemplo de código	Descrição
MyString = "Olá mundo!"	Esta fonte é usada para código, variáveis e texto de mensagens de erro.
' Isto é um comentário.	Um apóstrofo (') introduz comentários sobre o código.
MyVar = "Isto é um " _ & "exemplo" _ & " de como continuar o código."	Um espaço e um sublinhado (_) dão continuidade a uma linha de código.


Exemplo da função Error

Este exemplo usa a função Error para imprimir mensagens de erro que correspondam aos números de erro especificados.

Dim ErrorNumber

For ErrorNumber = 61 To 64	' Faz o loop através dos valores 61 - 64.

Debug.Print Error(ErrorNumber)	' Imprime erro na janela Immediate.

Next ErrorNumber


Exemplo da instrução Error

Este exemplo usa a instrução Error para simular o erro número 11.

On Error Resume Next	' Adia o tratamento de erro.

Error 11	' Simular o erro "Divisão por zero".


Exemplo da instrução On Error

Este exemplo primeiramente usa a instrução On Error GoTo para especificar o local de uma rotina de tratamento de erro dentro de um procedimento. No exemplo, uma tentativa de excluir um arquivo aberto gera o erro número 55. O erro é tratado na rotina de tratamento de erro e, em seguida, o controle é retornado à instrução que provocou o erro. A instrução On Error GoTo 0 desativa a interceptação de erro. Em seguida, a instrução On Error Resume Next é usada para adiar a interceptação de erro de modo que o contexto do erro gerado pela próxima instrução possa ser conhecido com certeza. Observe que Err.Clear é usada para limpar as propriedades do objeto Err depois que o erro é tratado.

Sub OnErrorStatementDemo()

On Error GoTo ErrorHandler	' Ative a rotina de tratamento de erro.

Open "ARQTESTE" For Output As #1	' Abra o arquivo para saída.

Kill "ARQTESTE"	' Tente excluir arquivo

' aberto.

On Error Goto 0	' Desative a interceptação de erro.

On Error Resume Next	' Adie a interceptação de erro.

ObjectRef = GetObject("MyWord.Basic")	' Tente iniciar um objeto

' inexistente e, em seguida, teste

'Verifique possíveis erros de automação.

If Err.Number = 440 Or Err.Number = 432 Then

' Informe ao usuário o que ocorreu. Em seguida, limpe o objeto Err.

Msg = "Houve um erro ao tentar abrir o Objeto de automação!"

MsgBox Msg, , "Teste de erro adiado"

Err.Clear	' Limpe os campos do objeto Err

End If

Exit Sub	' Saia para evitar manipulador.

ErrorHandler:	' Rotina de tratamento de erro.

Select Case Err.Number	' Avalie o número do erro.

Case 55	' Erro "O arquivo já está aberto".

Close #1	' Feche o arquivo aberto.

Case Else

' Trate outras situações aqui...

End Select

Resume	' Continue a execução na mesma linha

' que provocou o erro.

End Sub


Exemplo da instrução Resume

Este exemplo usa a instrução Resume para encerrar o tratamento de erro em um procedimento e, em seguida, continuar a execução com a instrução que provocou o erro. O erro número 55 é gerado para ilustrar o uso da instrução Resume.

Sub ResumeStatementDemo()

On Error GoTo ErrorHandler	' Ative a rotina de tratamento de erro.

Open "ARQTESTE" For Output As #1	' Abra o arquivo para saída.

Kill "ARQTESTE"	' Tente excluir o arquivo aberto.

Exit Sub	' Saia de Sub para evitar manipulador de erro.

ErrorHandler:	' Rotina de tratamento de erro.

Select Case Err.Number	' Avalie o número do erro.

Case 55	' Erro "O arquivo já está aberto".

Close #1	' Feche o arquivo aberto.

Case Else

' Trate outras situações aqui...

End Select

Resume	' Continue a execução na mesma linha

' que provocou o erro.

End Sub


Função Error

Retorna a mensagem de erro que corresponde a um determinado número de erro.

Sintaxe

Error[(errornumber)]

O argumento errornumber opcional pode ser qualquer número de erro válido. Se errornumber for um número de erro válido, mas não estiver definido, Error retornará a seqüência "Erro definido por aplicativo ou definido por objeto". Se errornumber não for válido, ocorrerá um erro. Se errornumber for omitido, será retornada uma mensagem correspondente ao erro em tempo de execução mais recente. Se não tiver ocorrido um erro em tempo de execução, ou errornumber for 0, Error retornará uma seqüência de comprimento zero ("").

Comentários

Examine as configurações de propriedade do objeto Err para identificar o erro em tempo de execução mais recente. O valor retornado da função Error corresponde à propriedade Description do objeto Err.


Instrução Error

Simula a ocorrência de um erro.

Sintaxe

Error errornumber

O errornumber obrigatório pode ser qualquer número de erro válido.

Comentários

Há suporte para a instrução Error para compatibilidade com versões anteriores. No novo código, especialmente ao criar objetos, use o método Raise do objeto Err para gerar erros em tempo de execução.

Se errornumber estiver definido, a instrução Error chamará o manipulador de erro após os seguintes valores padrão serem atribuídos às propriedades do objeto Err:

Propriedade	Valor
Number	Valor especificado como argumento para a instrução Error. Pode ser qualquer número de erro válido.
Source	Nome do projeto atual do Visual Basic.
Descrição	Expressão de seqüência que corresponde ao valor retornado da função Error para o Number especificado, se a seqüência existir. Caso contrário, Description conterá uma seqüência de comprimento zero ("").
HelpFile	A unidade, caminho e nome de arquivo totalmente qualificados para o devido arquivo de Ajuda do Visual Basic.
HelpContext	A identificação apropriada do contexto do arquivo de Ajuda do Visual Basic referente ao erro correspondente à propriedade Number.
LastDLLError	Zero.
Se não existir um manipulador de erro ou se nenhum estiver ativado, será criada e exibida uma mensagem de erro a partir das propriedades do objeto Err.

Observação   Nem todos os aplicativos host do Visual Basic podem criar objetos. Consulte a documentação de seu aplicativo host para determinar se ele pode criar classes e objetos.


Instrução On Error

Ativa uma rotina de tratamento de erro e especifica o local da rotina dentro de um procedimento; pode ser usada também para desativar uma rotina de tratamento de erro.

Sintaxe

On Error GoTo line

On Error Resume Next

On Error GoTo 0

A sintaxe da instrução On Error pode ter qualquer uma das seguintes formas:

Instrução	Descrição
On Error GoTo line	Ativa a rotina de tratamento de erro que inicia na linha especificada do argumento line obrigatório. O argumento line é qualquer rótulo de linha ou número de linha. Se ocorrer um erro em tempo de execução, o controle desvia para line, tornando o tratamento de erro ativo. A line especificada deve estar no mesmo procedimento em que se encontra a instrução On Error; caso contrário, ocorrerá um erro em tempo de compilação.
On Error Resume Next	Especifica que, quando ocorrer um erro em tempo de execução, o controle passará para a instrução imediatamente seguinte à instrução onde ocorreu o erro e a execução continua. Use este formulário em vez de On Error GoTo quando acessar objetos.
On Error GoTo 0	Desativa qualquer manipulador de erro ativo no procedimento atual.
Comentários

Se você não usar uma instrução On Error, qualquer erro em tempo de execução que ocorrer será fatal, isto é, será exibida uma mensagem de erro e a execução pára.

Um manipulador de erro "ativado" é o que foi ativado por uma instrução On Error; um manipulador de erro "ativo" é um manipulador ativado que está no processo de tratar um erro. Se ocorrer um erro enquanto o manipulador de erro estiver ativo (entre a ocorrência do erro e uma instrução Resume, Exit Sub, Exit Function ou Exit Property), o manipulador de erro do procedimento atual não poderá tratar o erro. O controle retornará para o procedimento de chamada. Se o procedimento de chamada possuir um tratamento de erro ativado, ele será ativado para tratar o erro. Se o manipulador de erro do procedimento de chamada também estiver ativo, o controle passará de volta pelos procedimentos de chamada anteriores até encontrar um manipulador de erro ativado, mas inativo. Se não for encontrado nenhum manipulador de erro ativado e inativo, o erro será fatal no ponto em que ele realmente ocorreu. Sempre que o manipulador de erro passa o controle de volta para um procedimento de chamada, esse procedimento torna-se o procedimento atual. Uma vez que o erro é tratado por um manipulador de erro em qualquer procedimento, a execução continua no procedimento atual no ponto designado pela instrução Resume.

Observação   Uma rotina de tratamento de erro não é um procedimento Sub ou Function. É uma seção do código marcada por um rótulo ou número de linha.

As rotinas de tratamento de erro dependem do valor na propriedade Number do objeto Err para determinar a causa do erro. A rotina de tratamento de erro deve testar ou salvar valores de propriedade relevantes do objeto Err antes que qualquer outro erro possa ocorrer ou antes que um procedimento que possa causar um erro seja chamado. Os valores de propriedade no objeto Err refletem somente o erro mais recente. A mensagem de erro associada a Err.Number está contida em Err.Description.

On Error Resume Next faz com que a execução continue com a instrução imediatamente após a instrução que causou o erro em tempo de execução ou continue com a instrução imediatamente após a chamada mais recente do procedimento que contém a instrução On Error Resume Next. Essa instrução permite que a execução continue apesar de um erro em tempo de execução. Você pode colocar a rotina de tratamento de erro onde é possível a ocorrência de erro, em vez de transferir o controle para outro local dentro do procedimento. Uma instrução On Error Resume Next torna-se inativa quando outro procedimento for chamado, assim você deve executar uma instrução On Error Resume Next em cada rotina chamada para tratar os erros em linha dentro dessa rotina.

Observação   A construção On Error Resume Next pode ser preferível a On Error GoTo ao tratar erros gerados durante o acesso a outros objetos. Verificar Err após cada interação com um objeto remove a ambigüidade sobre qual objeto foi acessado pelo código. Você pode ter certeza de qual objeto colocou o código de erro em Err.Number, assim como qual objeto gerou originalmente o erro (o objeto especificado em Err.Source).

On Error GoTo 0 desativa o tratamento de erro no procedimento atual. Ele não especifica a linha 0 como início do código de tratamento de erro, mesmo que esse procedimento contenha uma linha com o número 0. Sem a instrução On Error GoTo 0, um tratamento de erro é automaticamente desativado ao sair do procedimento.

Para evitar que o código de tratamento de erro seja executado quando não ocorreram erros, coloque uma instrução Exit Sub, Exit Function ou Exit Property imediatamente antes da rotina de tratamento de erro, como no exemplo a seguir:

Sub InitializeMatrix(Var1, Var2, Var3, Var4)

On Error GoTo ErrorHandler

. . .

Exit Sub

ErrorHandler:

. . .

Resume Next

End Sub

Aqui, o código de tratamento de erro segue a instrução Exit Sub e precede a instrução End Sub para separá-lo do fluxo de procedimento. O código de tratamento de erro pode ser colocado em qualquer lugar do procedimento.

Os erros não interceptados em objetos são retornados ao aplicativo de controle quando o objeto está sendo executado como um arquivo executável. Dentro do ambiente de desenvolvimento, os erros não interceptados são retornados ao aplicativo de controle somente se as opções apropriadas estiverem definidas. Consulte a documentação de seu aplicativo host para obter uma descrição das opções que devem ser definidas durante a depuração, como defini-las e se o host pode criar classes.

Se você criar um objeto que acessa outros objetos, deve tentar tratar os erros que foram retornados deles sem que tenham sido tratados. Se você não puder tratar esses erros, mapeie o código do erro em Err.Number para um de seus próprios erros e, em seguida, retorne-os para o chamador de seu objeto. Você deve especificar seu erro adicionando o código de erro à constante vbObjectError. Por exemplo, se o código de erro for 1052, atribua-o como a seguir:

Err.Number = vbObjectError + 1052

Observação   Os erros de sistema durante as chamadas às dynamic-link libraries (DLL, bibliotecas de vínculo dinâmico) ou aos recursos de código do Macintosh não levantam exceções e não podem ser interceptados com a interceptação de erro do Visual Basic. Ao chamar funções DLL, você deve verificar o êxito ou falha de cada valor retornado (de acordo com as especificações API (Application Programming Interface, interface de programação de aplicativo)) e, em caso de falha, verificar o valor da propriedade LastDLLError do objeto Err. LastDLLError sempre retorna zero no Macintosh.


Instrução Resume

Continua a execução após a conclusão de uma rotina de tratamento de erro.

Sintaxe

Resume [0]

Resume Next

Resume line

A sintaxe da instrução Resume pode ter qualquer uma das seguintes formas:

Instrução	Descrição
Resume	Se o erro ocorreu no mesmo procedimento que o manipulador de erro, a execução continuará com a instrução que causou o erro. Se o erro ocorreu em um procedimento chamado, a execução continua na instrução que chamou pela última vez o procedimento que contém a rotina de tratamento de erro.
Resume Next	Se o erro ocorreu no mesmo procedimento que o manipulador de erro, a execução continuará na instrução imediatamente após a instrução que causou o erro. Se o erro ocorreu em um procedimento chamado, a execução continuará na instrução imediatamente após a instrução que chamou pela última vez o procedimento que contém a rotina de tratamento de erro (ou a instrução On Error Resume Next).
Resume line	A execução continua na linha especificada do argumento line obrigatório. O argumento line é um rótulo de linha ou número de linha e deve estar no mesmo procedimento que o manipulador de erro.
Comentários

Se você usar uma instrução Resume em qualquer lugar exceto na rotina de tratamento de erro, ocorrerá um erro.


A cláusula #Else precisa ser precedida por um #If correspondente

#Else é uma diretiva de compilação condicional. A causa e a solução desse erro são as seguintes:

•	Uma cláusula #Else foi detectada por não ser precedida por um #If ou #ElseIf correspondente.

Verifique para ver se um #If anterior foi separado do #Else por um #End If. Observe que somente um #Else é permitido em cada bloco #If, portanto duas cláusulas #Else sucessivas levam a esse erro.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


#Else If, #Else ou #End If precisam ser precedidos por um #If correspondente

#Else If, #Else e #End If são diretivas de compilação conditional. A causa e a solução desse erro são as seguintes:

•	Um #Else If, #Else ou #End If foi detectado por não estar precedido por uma cláusula #If correspondente.

Verifique se o #If necessário foi separado da cláusula em questão por um bloco de intervenção ou se o #If necessário está precedido por um sinal (#) de sinal numérico. Se o restante estiver em ordem, insira uma cláusula #If na posição apropriada.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


#ElseIf deve ser precedido por um #If ou #ElseIf correspondente e ser seguido por um #ElseIf, #Else ou #End If

#ElseIf é uma diretiva de compilação condicional. As causas e soluções desse erro são as seguintes:

•	Um #ElseIf foi detectado por não estar precedido por um #If ou #ElseIf.

Insira uma instrução #If antes do #ElseIf ou remova um #End If anterior inserido incorretamente.

•	Um #ElseIf foi detectado por não estar precedido por um #Else ou #End If.

Finalize, devidamente, o bloco #If anterior ou altere o #Else anterior para um #ElseIf.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Um componente ActiveX compatível deve ser um executável do Visual Basic ou uma DLL

Um componente ActiveX compatível é aquele especificado como um componente ActiveX compatível. A causa e a solução desse erro são as seguintes:

•	Visual Basic tentou acessar um objeto especificado como um componente ActiveX compatível, porém o arquivo especificado não era um arquivo executável ou uma biblioteca de vínculo dinâmico (DLL) criada pelo Visual Basic.

Somente arquivos .exe e DLLs criados pelo Visual Basic são entradas válidas no campo Componente ActiveX compatível, da caixa de diálogo Propriedades do projeto, acessado através do menu Projeto. Se possível, carregue o projeto no Visual Basic e escolha o comando Arquivo Criar projeto.exe, a partir do menu Arquivo, para criar um arquivo executável do Visual Basic. Se esse já for um arquivo executável ainda não criado pelo Visual Basic ou se o arquivo não pode ser carregado no Visual Basic, consulte a documentação do arquivo para saber se ele pode ser convertido em um arquivo executável do Visual Basic ou se o fornecedor pode fornecer arquivo executável, criado pelo Visual Basic.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


O suplemento não pode se referir ao projeto

Os projetos são dinâmicos, porém os suplementos são estáticos. A causa e a solução desse erro são as seguintes:

•	Você tentou criar um suplemento a partir de um projeto que faz referência a outro projeto.

A semântica de projetos pode alterar de maneira a afetar projetos e suplementos em referência. Por isso, você não pode criar um suplemento a partir de um projeto que faz referência a outro projeto.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Um módulo não é um tipo válido

Um módulo padrão não representa uma classe e não é possível criar uma ocorrência na forma de uma variável. A causa e a solução desse erro são as seguintes:

•	Você usou o nome de um módulo padrão em uma declaração Dim ou Set.

Verifique a ortografia do nome do módulo e certifique-se de que ele corresponde a um formulário, formulário MDI (Multiple Document Interface, interface de documentos múltiplos) ou módulo de classe.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Um procedimento com um argumento ParamArray não pode ser chamado através de argumentos nomeados

Todos os argumentos em uma chamada para um procedimento definidos com um ParamArray devem ser posicionais. A causa e a solução desse erro são as seguintes:

•	A sintaxe argumento nomeado aparece em uma chamada de procedimento.

O argumento nomeado que se chama sintaxe não pode ser usado para chamar um procedimento que inclua um parâmetro ParamArray. Para fornecer apenas alguns elementos do ParamArray, use vírgulas como espaços reservados para esses elementos que você deseja omitir. Por exemplo, na chamada a seguir, se os argumentos ParamArray se iniciam depois de Arg2, os valores são passados somente para o primeiro, terceiro e sexto valores no ParamArray:

MySub Arg1, Arg2, 7,, 44,,,3

Observação   O ParamArray sempre representa os últimos itens da lista de argumentos.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Nome repetido encontrado

O identificador está em conflito com outro identificador ou requer qualificação. As causas e soluções desse erro são as seguintes:

•	Mais de um objeto no mesmo escopo pode ter elementos com o mesmo nome.

Qualifique o nome do elemento incluindo o nome do objeto e um período. Por exemplo:

propriedade do objeto

Identificadores de nível de módulo e identificadores de nível de projeto (nomes do módulo e nomes de projeto referenciado) podem ser usados novamente em um procedimento, embora isso faça com que seja mais difícil manter e depurar os programas. Entretanto, se você deseja se referir aos dois itens no mesmo procedimento, o item com escopo mais largo deve ser qualificado. Por exemplo, se MyID for declarado no nível de módulo como MyModule e, em seguida, uma variável do nível de procedimento for declarada com o mesmo nome no módulo, as referências à variável do nível de módulo devem ser corretamente qualificadas:

Dim MyID As String

Sub MySub

MyModule.MyID = "Esta é a variável do nível de módulo"

Dim MyID As String

MyID = "Esta é a variável do nível de procedimento"

Debug.Print MyID

Debug.Print MyModule.MyID

End Sub

•	Um identificador declarado no nível de módulo entra em conflito com um nome do procedimento. Por exemplo, esse erro ocorre se a variável MyID for declarada no nível de módulo e, em seguida, um procedimento for definido com o mesmo nome:

Public MyID

Sub MyID

. . .

End Sub

Nesse caso, você deve alterar um dos nomes, pois a qualificação com um nome de módulo comum não resolveria a ambigüidade. Os nomes do procedimento são Public por padrão, mas os nomes da variável são Private, a menos que especificados como Public.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Erro AppleScript

Ocorreu um erro durante o processamento do script. As causas e soluções desse erro são as seguintes:

•	O erro pode estar relacionado ao aplicativo de destino.

Verifique se os identificadores no script correspondem àqueles no aplicativo.

•	O erro pode estar relacionado ao AppleScript.

Certifique-se de que a sintaxe usada no script seja sintaxe AppleScript válida.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Erro definido pelo aplicativo ou pelo objeto

Esta mensagem é exibida quando um erro gerado pelo método Raise ou instrução Error não corresponde a um erro definido pelo Visual Basic for applications. Ela também é retornada pela função Error para argumentos que não correspondam a erros definidos pelo Visual Basic for applications. Então, ela pode ser um erro que você definiu ou foi definida por um objeto, incluindo aplicativos host, como o Microsoft Excel, Visual Basic etc. Por exemplo, os formulários do Visual Basic geram erros relacionados ao formulário que não podem ser gerados a partir de código, simplesmente especificando um número como um argumento para o método Raise ou instrução Error. As causas e soluções desse erro são as seguintes:

•	O aplicativo executou um Err.Raise n ou instrução Error n, mas o número n não foi definido pelo Visual Basic for applications.

Se isso não era o esperado, você deve usar o Err.Raise e especificar argumentos adicionais para que um usuário final possa entender a natureza do erro. Por exemplo, você pode incluir uma seqüência de descrição, origem e informações de ajuda. Para gerar um erro que você interceptou, essa abordagem funcionará se Err.Clear não for executado antes de gerar o erro. Se você executar primeiramente Err.Clear, você deve preencher os argumentos adicionais ao método Raise. Verifique o contexto no qual ocorreu o erro e certifique-se de estar gerando o mesmo erro.

•	Pode ser que ao acessar objetos a partir de aplicativos, um erro tenha sido propagado de volta ao programa que não possa ser mapeado por um erro do Visual Basic.

Verifique a documentação a respeito de qualquer objeto que você tenha acessado. A propriedade Source do objeto Err pode conter identificação programática do aplicativo ou objeto que gerou o erro. Para entender o contexto de um erro retornado por um objeto, convém usar a construção On Error Resume Next no código que acessa objetos, em vez da sintaxe On Error GoTo linha.

Observação   Anteriormente, os programadores usavam com freqüência um loop para imprimir uma lista de todas as seqüências de caracteres de mensagens de erro interceptáveis. Normalmente, isso era feito com código como o seguinte:

For index = 1 to 500

Debug.Print Error$(index)

Next index

Esse código ainda lista todas as mensagens de erro do Visual Basic for applications, mas exibe "Erro definido por aplicativo ou por objeto" para erros definidos pelo host, por exemplo aqueles no Visual Basic relacionados a formulários, controles etc. Muitos deles são erros em tempo de execuçãointerceptáveis. Você pode usar a caixa de diálogo Localizar da Ajuda para localizar a lista de erros interceptáveis específica ao aplicativo host. Clique em Localizar, digite Interceptável na primeira caixa de texto e, em seguida, clique em Mostrar tópicos. Selecione Erros interceptáveis na caixa de listagem inferior e clique em Ir para.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Argumento necessário para Property Let ou Property Set

O objetivo dos procedimentos Property Let e Property Set é dar um novo valor a uma propriedade. As causas e soluções desse erro são as seguintes:

•	Ao definir a propriedade, o valor não aparece no lugar correto.

Posicione o valor que deseja para definir a propriedade à direita da expressão definindo o valor da propriedade.

•	Na definição de procedimento, o parâmetro definido para receber o valor passado ao lado direito da expressão não foi encontrado ou está mal-posicionado .

Especifique um parâmetro para a lista de argumentos do valor na definição do procedimento. Se o procedimento considera mais de um argumento, o parâmetro do valor da propriedade deve aparecer por último na lista.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Matriz já dimensionada

Uma matriz estática só pode ser dimensionada uma vez. As causas e soluções desse erro são as seguintes:

•	Você tentou alterar as dimensões de uma matriz estática com uma declaração ReDim. Somente matrizes dinâmicas podem ser redimensionadas.

Remova o redimensionamento ou use uma matriz dinâmica. Para definir uma matriz dinâmica, use uma instrução Dim, Public, Private ou Static, com parênteses vazios. Por exemplo:

Dim MyArray()

Em um procedimento, você pode definir uma matriz dinâmica através da declaração ReDim ou Static, usando uma variável para o número de elementos:

ReDim MyArray(n)

•	Ocorre uma declaração Option Base depois de definidas as dimensões da matriz.

Certifique-se de que toda declaração Option Base preceda todas as declarações da matriz.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


O argumento da matriz deve ser ByRef

Matrizes declaradas com Dim, ReDim ou Static não podem ser passadas ByVal. A causa e a solução desse erro são as seguintes:

•	Você tentou passar uma matriz ByVal completa.

Um elemento individual de uma matriz pode ser passado ByVal (por valor), mas uma matriz inteira deve ser passada ByRef (por referência). Observe que ByRef é o padrão. Se você deve passar uma matriz ByVal para evitar que alterações nos elementos da matriz sejam propagadas de volta ao chamador, você pode passar o argumento da matriz no próprio conjunto de parênteses ou posicioná-lo em um Variant e, em seguida, passar o Variant ao parâmetro ByVal, como a seguir:

Dim MyVar As Variant

MyVar = OldArray()

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Início do escopo de pesquisa foi atingido. Deseja continuar do final?

A pesquisa foi sem êxito. A causa e a solução desse erro são as seguintes:

•	A pesquisa acima atingiu o início do escopo especificado.

Você pode continuar a pesquisa a partir do fim do escopo de pesquisa ou cancelar e alterar o escopo da pesquisa.


Block if sem End if

Ocorreu um erro devido a uma declaração incompleta. A causa e a solução desse erro são as seguintes:

•	Uma declaração If é usada sem uma declaração End if correspondente.

Uma declaração If de várias linhas deve terminar com uma declaração End if correspondente. Para declarações aninhadas If...End if, certifique-se de que exista uma estrutura If...End if corretamente correspondente dentro de cada estrutura If...End if incluída.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Ponto de interrupção não permitido nessa linha

Os pontos de interrupção só podem ser posicionados em determinadas partes de instruções. As causas desse erro são as seguintes:

•	Você tentou posicionar um ponto de interrupção em uma linha que não pode aceitar um ponto de interrupção, por exemplo:

•	Uma linha somente com comentários.

•	Uma linha somente com rótulos de linha.

•	Uma linha somente com declarações (Const, Dim, Static, Type etc.).

•	Qualquer linha em um módulooculto.

•	Qualquer linha em uma janela Verificação imediata.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Tipos incompatíveis do argumento ByRef

Um argumento passado por ByRef (por referência), o padrão deve ter o tipo de dados exato, esperado no procedimento. A causa e a solução desse erro são as seguintes:

•	Você passou um argumento de um tipo que não poderia ter sido convertido ao tipo esperado.

Por exemplo, esse erro ocorre se você tenta passar uma variável Integer quando uma Long é esperada. Se você deseja que ocorra coerção, mesmo se isso fizer com que informações sejam perdidas, você pode passar o argumento no próprio conjunto de parênteses. Por exemplo, para passar o argumento MyVar Variant para um procedimento que espera um argumento Integer, você pode gravar a chamada como a seguir:

Dim MyVar

MyVar = 3,1415

Call SomeSub((MyVar))

Sub SomeSub (MyNum As Integer)

MyNum = MyNum + MyNum

End Sub

Posicionar o argumento no próprio conjunto de parênteses força sua avaliação como uma expressão. Durante essa avaliação, a parte fracionária do número é arredondada (não truncada) para ajustá-la ao tipo de argumento esperado. O resultado da avaliação é posicionado em um local temporário e uma referência no local temporário é recebido pelo procedimento. Então, o original MyVar mantém seu valor.

Observação   Se você não especificar um tipo para uma variável, a variável recebe o tipo padrão, Variant. Isso nem sempre é óbvio. Por exemplo, o seguinte código declara duas variáveis, a primeira, MyVar, é uma Variant; a segunda, AnotherVar, é um Integer.

Dim MyVar, AnotherVar As Integer

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


O Visual Basic não dá suporte à convenção de chamada

O Visual Basic não dá suporte a todas as convenções de chamada do procedimento, o qual especifica a ordem em que os argumentos devem ser passados e a maneira como esses tipos de argumentos devem ser especificados. A causa e a solução desse erro são as seguintes:

•	O procedimento foi chamado através de uma convenção de chamada à qual o Visual Basic não dá suporte. Por exemplo, o Visual Basic não dá suporte à convenção de chamada Pascal em uma versão de 16 bits no ambiente Windows da Microsoft.

Se o Visual Basic não dá suporte à convenção de chamada, o procedimento não pode ser chamado de Visual Basic. Verifique a documentação do objeto para ver se é fornecida uma alternativa.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Não é possível adicionar uma referência ao arquivo especificado

Nem todas as bibliotecas de objetos ou bibliotecas de tipos podem ser acessadas pelo Visual Basic. A causa e a solução desse erro são as seguintes:

•	Você tentou usar a caixa de diálogo Adicinar referências para uma referência a uma biblioteca de tipos ou biblioteca de objetos que não pode ser usada pelo Visual Basic.

Verifique a documentação do objeto representado pela biblioteca para ver se ele está disponível em algum outro formulário que o Visual Basic possa usar.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Não é possível atribuir ou impor matriz de seqüência de comprimento fixo ou tipo definido pelo usuário em Variant

Um Variant só pode aceitar atribuição de dados com um VarType válido. As causas e soluções desse erro são as seguintes:

•	Você tentou passar uma matriz de seqüência de comprimento fixo. Quando uma única seqüência de comprimento fixo for atribuída a um Variant, ela é convertida para uma seqüência de comprimento variável, mas isso não pode ser feito para uma matriz de seqüências de comprimento fixo.

Se você precisa passar a matriz, use um loop para atribuir os elementos individuais da matriz para os elementos de uma matriz temporária de seqüências de comprimento variável. Assim, você pode atribuir a matriz a uma variante e usar Erase para desalocar a matriz temporária. Entretanto, você não pode desalocar uma matriz de tamanho fixo através de Erase.

•	Você tentou passar uma seqüência de comprimento fixo ou tipo definido pelo usuário para a função VarType ou função TypeName.

Um argumento para a função VarType ou TypeName deve ser um tipo Variant válido.

•	Você tentou atribuir um tipo definido pelo usuário para uma variável Variant.

Apesar de não ser possível atribuir diretamente uma variável completa de tipo definido pelo usuário para uma Variant, você pode usar a função Matriz para atribuir os elementos individuais de uma variável de tipo definido pelo usuário para uma Variant. Isso produz uma Variant com uma matriz de variantes. O VarType de cada elemento nessa matriz de variantes corresponde ao tipo original de cada elemento do tipo definido pelo usuário.

•	Você tentou passar uma matriz de seqüências de comprimento fixo ou tipos definidos pelo usuário como um argumento em uma chamada de procedimento que requer um arqumento Variant. Observe que a qualquer momento em que um procedimento for vinculado posteriormente, ou seja, quando a chamada deve ser construída em tempo de execução, todos os argumentos devem ser passados como tipos Variant. Por exemplo, o seguinte código causa este erro:

Dim MyForm As Object	' Porque MyForm é Objeto, o vínculo é posterior.

Set MyForm = New Form1

Dim StringArray(10) As String * 12

' A próxima linha gera o erro.

MyForm.MyProc StringArray

Para a matriz de seqüência de caracteres, use um loop para atribuir cada membro individual da matriz a uma matriz temporária de seqüências de comprimento variável. Em seguida, você pode atribuir aquela matriz a uma Variant para passar ao procedimento. Para uma matriz de tipos definidos pelo usuário, você pode usar a função Array para atribuir os elementos individuais de uma variável de tipo definido pelo usuário para uma Variant. Isso produz uma Variant com uma matriz de variantes. O VarType de cada elemento nessa matriz de variantes corresponde ao tipo original de cada elemento do tipo definido pelo usuário.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Não é possível atribuir a uma matriz

Cada elemento de uma matriz deve ter seu valor atribuído individualmente. As causas e soluções desse erro são as seguintes:

•	Inadvertidamente, você tentou atribuir um único valor a uma variável da matriz sem especificar o elemento ao qual o valor deveria ser atribuído.

Para atribuir um único valor a um elemento da matriz, você deve especificar o elemento em um subscrito. Por exemplo, se MyArray é uma matriz inteira, a expressão MyArray = 5 é inválida, mas a expressão a seguir é válida:

MyArray(UBound(MyArray)) = 5

•	Você tentou atribuir uma matriz completa a outra matriz. Por exemplo, se Arr1 é uma matriz e Arr2 é outra matriz, as duas atribuições a seguir são inválidas:

Arr1 = Arr2	' Atribuição inválida.

Arr1() = Arr2()	' Atribuição inválida.

Para atribuir uma matriz a outra, certifique-se de que a matriz do lado esquerdo da atribuição seja redimensionável e os tipos da matriz se correspondam.

Observação   Você pode posicionar uma matriz completa em um Variant, resultando em uma única variável da variante com a matriz completa:

Dim MyVar As Variant

MyVar = Arr2()

Em seguida, você faz referência aos elementos da matriz na variação com a mesma notação de subscrito como para uma matriz normal, por exemplo:

MyVar(3) = MyVar(1) + MyVar(5)

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Não é possível alterar os tipos de dados dos elementos da matriz

ReDim só pode ser usado para alterar o número de elementos de uma matriz. A causa e a solução desse erro são as seguintes:

•	Você tentou declarar novamente o tipo de dados de uma matriz através de ReDim.

Declare uma nova matriz do tipo desejado e, em seguida, use as funções de conversão para atribuir cada elemento da matriz antiga ao elemento correspondente da nova matriz.

Você também pode posicionar a matriz em uma variável Variant. Isso pode ser feito através de uma simples atribuição:

Dim MyVar As Variant

MyVar = MyIntegerArray()

Isso cria uma Variant contendo uma matriz sinalizada como o tipo da matriz original. Em seguida, você pode atribuir variáveis de qualquer VarType válido aos elementos da matriz dentro de uma variante.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Não é possível definir um tipo KWID_tkPUBLIC definido pelo usuário dentro de um módulo do objeto particular

Um tipo definido pelo usuário que aparece dentro de um módulo objeto não pode ser Public. A causa e a solução desse erro são as seguintes:

•	Você tentou definir um tipo Public definido pelo usuário em um módulo do objeto.

Mova a definição do tipo definido pelo usuário para um módulo padrão e, em seguida, declare as variáveis do tipo no módulo do objeto ou outros módulos, de modo apropriado. Se deseja que apenas o tipo esteja disponível no módulo no qual ele aparece, você pode posicionar a definição Type...End Type no módulo do objeto e preceder sua definição com a palavra-chave Private.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Não é possível exibir procedimento oculto

Tudo o que está em um módulo oculto está oculto. A causa e a solução desse erro são as seguintes:

•	Você tentou exibir um procedimento em um módulo oculto.

Reexiba o módulo para exibir o procedimento. Para exibir uma linha que gerou um erro em um procedimento oculto, execute o código após reexibir o módulo para exibir o erro.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Não é possível editar módulo

Os módulos marcados como protegidos podem ser exibidos, mas não editados. A causa e a solução desse erro são as seguintes:

•	Você tentou editar um módulo protegido.

Remova a proteção do módulo e, em seguida, tente a edição novamente. Na maioria dos casos, esse erro ocorre porque o suplemento Visual SourceSafe está instalado e não foi feito o check out do.arquivo.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Não é possível inserir o modo de interrupção nesse momento

O modo de interrupção é o estado no qual um programa ainda está sendo executado, porém sua atividade está suspensa. A causa e a solução desse erro são as seguintes:

•	Você tentou inserir o modo de interrupção, por exemplo, ao pressionar CTRL+BREAKK (Windows) ou COMANDO+PONTO (Macintosh), o botão Interromper na barra de ferramentas Padrão ou a barra de ferramentas Depurar ou ao executar um ponto de interrupção no modo de execução.

Foi feita uma alteração de forma programática no projeto usando o modelo de objeto da extensibilidade (suplemento). Isso impede que o programa tenha a execução suspensa. Você pode continuar a executar ou encerrar a execução, porém não pode suspendê-la.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Não é possível executar instruções imediatas no modo de criação

Tempo de criação é qualquer momento em que o código não esteja sendo executado ou é suspenso e aguarda para continuar. A causa e a solução desse erro são as seguintes:

•	Você tentou executar uma instrução na janela Verificação imediata, mas o seu código não está no modo de execução.

Inicie a execução de seu código e, em seguida, suspenda a execução do programa. Em seguida, você pode executar o código na janela Verificação imediata.

Para obter informações adicionais, posicione o cursor na janela Verificação imediata e pressione F1 (no Windows) ou HELP (no Macintosh).


Não é possível localizar projeto ou biblioteca

Você não pode executar o seu código até que todas as referências não encontradas sejam resolvidas. As causas e soluções desse erro são as seguintes:

•	Um projeto referenciado não pôde ser localizado ou uma biblioteca de objetos referenciada que corresponda ao idioma do projeto não pôde ser localizada.

As referências não resolvidas são prefixadas com MISSING na caixa de diálogo Referências. Selecione a referência não encontrada para exibir o caminho e idioma do projeto ou biblioteca não encontrada. Siga essas etapas para resolver a referência ou referências:

Para resolver as referências

1.	Exiba a caixa de diálogo Referências.

2.	Selecionar a referência não encontrada.

3.	Iniciar o Pesquisador de objeto.

4.	Usar a caixa de diálogo Procurar para localizar a referência não encontrada.

5.	Clique em OK.

6.	Repetir as etapas anteriores até que todas as referências não encontradas sejam resolvidas.

Uma vez localizado um item não encontrado, o prefixo MISSING é removido para indicar que o vínculo está restabelecido. Se o nome de arquivo de um projeto referenciado foi alterado, uma nova referência é adicionada e a antiga deve ser removida.

Para remover uma referência que não seja mais necessária, apenas limpe a caixa de seleção ao lado da referência desnecessária. Observe que as referências à biblioteca de objetos do Visual Basic e da biblioteca de objetos do aplicativo host não podem ser removidas.

Os aplicativos podem suportar versões de idioma diferentes de suas bibliotecas de objetos. Para saber qual versão de idioma é necessária, clique na referência e verifique o idioma indicado na parte inferior da caixa de diálogo.

As bibliotecas de objetos podem ser arquivos autônomos com a extensão .OLB ou podem estar integradas a uma dynamic-link library (DLL, biblioteca de vínculo dinâmico) Elas podem existir em diferentes versões para cada plataforma. Portanto, quando os projetos são movidos através de plataformas, por exemplo, do Macintosh para Microsoft Windows, a versão de idioma correta da biblioteca referenciada para essa plataforma deve estar disponível na localização especificada na documentação de seu aplicativo host.

Os nomes de arquivos da biblioteca de objetos normalmente são construídos como a seguir:

•	Windows (versão 3.1 e anterior): Código do aplicativo + Código de idioma + [Versão].OLB. Por exemplo:

A biblioteca de objetos para o Visual Basic for applications em francês, Versão 2 era vafr2.olb.

A biblioteca de objetos do Microsoft Excel 5.0 em francês era xlfr50.olb.

•	Macintosh: Código de idioma do nome do aplicativo [Versão] OLB. Por exemplo:

A biblioteca de objetos para o Visual Basic for applications em francês, Versão 2 era VA FR 2 OLB.

A biblioteca de objetos do Microsoft Excel 5.0 em francês era MS Excel FR 50 OLB.

Se você não pode localizar um projeto ou biblioteca não encontrada em seu sistema, contate o autor do projeto referenciado. Se a biblioteca não encontrada for uma biblioteca de objetos do aplicativo Microsoft, ela poderá ser obtida como a seguir:

•	Se você tiver acesso aos serviços eletrônicos de suporte ao produto Microsoft, consulte a seção de suporte ao produto deste arquivo de Ajuda. Em serviços eletrônicos, você localizará instruções sobre como usar a opção de serviço apropriada.

•	Se você não tiver acesso aos serviços eletrônicos de suporte ao produto Microsoft, as bibliotecas de objetos da Microsoft estão disponíveis através de pedido como uma nota de aplicativo da Microsoft. As informações sobre como contactar a organização de suporte ao produto Microsoft também estão disponíveis na seção de suporte técnico deste arquivo de Ajuda.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Não é possível obter ou colocar uma variável de referência do objeto ou uma variável de tipo definido pelo usuário que contém uma referência do objeto

Uma referência do objeto é temporária e pode facilmente se tornar inválida entre o fechamento e a abertura de um arquivo. A causa e a solução desse erro são as seguintes:

•	A variável na instrução Get ou Put contém ou está declarada como contendo uma referência a um objeto.

Se a variável for uma referência do objeto, você não pode usá-la com instruções Get e Put. Para posicionar o valor de alguma ou todas as propriedades do objeto no arquivo, cada propriedade deve ser especificada individualmente.

•	A variável de tipo definido pelo usuário na instrução Get ou Put contém um elemento que é uma referência do objeto.

Se a instrução Type da variável contém um elemento que representa um objeto (por exemplo, ele é definido em um módulo de classe, tem tipo de dados Object, é um formulário ou um controle etc.), remova-o da definição ou defina um novo tipo para ser usado com as instruções Get e Put que não tenham nenhum elemento do tipo Object na sua definição.

Se você tem elementos do tipo definido pelo usuário com o tipo Variant, certifique-se de que nenhuma referência do objeto seja atribuída àquele elemento. Uma Variant pode aceitar essa atribuição, mas causará esse erro se o seu tipo definido pelo usuário for usado em uma Get ou Put

Observe que você pode usar Input #, Line Input #, Print # ou Write # para gravar a propriedade padrão de um objeto no disco.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Não é possível carregar módulo; formato inválido

Um módulo deve estar no formato do texto. A causa e a solução desse erro são as seguintes:

•	Você tentou carregar um arquivo em formato binário como um módulo.

Algumas versões do Visual Basic permitem que você salve o código nos formatos binário e de texto. Se possível, carregue novamente o arquivo no aplicativo em que foi salvo pela última vez e salve-o como texto.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Não é possível fazer uma atribuição a uma propriedade somente leitura

Algumas propriedades não podem aceitar atribuições. A causa e a solução desse erro são as seguintes:

•	Você tentou atribuir um valor a uma propriedade que não pode aceitar atribuição.

Em alguns casos, uma propriedade pode aceitar atribuição somente em momentos específicos. Por exemplo, uma propriedade pode aceitar atribuições em tempo de criação, mas não em tempo de execução. Verifique a Ajuda sobre a propriedade específica para ver quando ela pode aceitar atribuições.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Não é possível executar operação requisitada com o módulo oculto

Esse erro se aplica ao modelo do objeto (suplemento) da extensibilidade do Visual Basic. A causa e a solução desse erro são as seguintes:

•	O módulo está oculto. Você não pode modificar um módulo oculto ou obter informações a partir de um módulo oculto.

Reexiba o módulo e tente a operação novamente.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Não é possível posicionar um ponto de interrupção em uma matriz

Uma matriz não tem nenhum valor único associado a ela. A causa e a solução desse erro são as seguintes:

•	Você tentou definir um ponto de interrupção condicional (às vezes chamado de ponto de inspeção de variáveis) que suspenderia a execução do programa quando o valor de uma matriz completa fosse alterado.

Defina o ponto de interrupção condicional em um elemento específico da matriz.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Não é possível gravar em um módulo em execução

Você deve encerrar a execução para iniciar a gravação. A causa e a solução desse erro são as seguintes:

•	Você tentou gravar uma macro enquanto executava o código do módulo.

Interrompa a execução ou pressione CTRL+BREA K (Windows) ou COMANDO+PONTO (Macintosh) e, em seguida, ative a gravação.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Não é possível remover referência padrão

Sempre existe uma referência padrão. A causa e a solução desse erro são as seguintes:

•	Você tentou remover uma referência que sempre deve estar disponível, por exemplo, uma referência de biblioteca de tipos ou biblioteca de objetos.

Não tente remover a referência.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Case Else fora do Select Case

Uma instrução Case Else só pode ocorrer entre instruções Select Case e End Select correspondentes. A causa e a solução desse erro são as seguintes:

•	Você posicionou uma instrução Case Else fora do bloco Select Case...End Select.

Mova a instrução Case Else dentro de um bloco Select Case...End Select.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Case sem Select Case

Uma instrução Case deve ocorrer dentro de um Select Case...End Select Block. A causa e a solução desse erro são as seguintes:

•	Uma instrução Case não pode ser correspondida a uma instrução Select Case anterior.

Verifique outras estruturas do controle dentro da instrução Select Case...Case e se elas se correspondem corretamente. Por exemplo, um If sem um End If correspondente dentro da estrutura Select Case...End Select gera esse erro.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Dependências circulares entre módulos

As referências circulares entre módulos, constantes e tipos definidos pelo usuário não são permitidas. A causa e a solução desse erro são as seguintes:

•	Um tipo ou constante definida pelo usuário em um módulo se refere a um tipo ou constante definida pelo usuário em um segundo módulo, o qual, por sua vez, se refere a outro tipo ou constante definida pelo usuário no primeiro módulo.

Remova as referências dependentes.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Módulo objeto deve implementar todos os procedimentos em interface

Uma interface é uma coleção de protótipos do procedimento não implementado. A causa e a solução desse erro são as seguintes:

•	Você especificou uma interface em uma instrução Implementos, mas não adicionou código para todos os procedimentos da interface.

Você deve gravar o código para cada procedimento especificado na interface. Um procedimento vazio é adequado; o procedimento deveria implementar o comportamento necessário.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


A execução do código foi interrompida

A execução do código pode ser suspensa quando for necessário. A causa e a solução desse erro são as seguintes:

•	Uma combinação de teclas CTRL+BREAK (Microsoft Windows), ESC (Microsoft Excel) ou COMANDO+PONTO (Macintosh) foi encontrada.

Na caixa de diálogo do erro, clique em Depurar para inserir modo de interrupção, Continuar para continuar ou End para interromper a execução.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Compile error in hidden module: <module name>
Erro de compilação em módulo oculto: <module name>

Um módulo protegido não pode ser exibido. A causa e a solução desse erro são as seguintes:

•	Há erro de compilação no código do módulo especificado, mas ele não pode ser exibido porque o projeto está protegido.

Desproteja o projeto e, em seguida, execute o código novamente para exibir o erro.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Expressão constante requerida

Uma constante deve ser inicializada. As causas e soluções desse erro são as seguintes:

•	Você tentou inicializar uma constante com uma variável, uma ocorrência de um tipo definido pelo usuário, um objeto ou o valor retornado de uma chamada de função.

Inicialize constantes com literais, previamente declaradas constantes ou literais e constantes ingressadas por operadores (exceto o operador lógico Is).

•	Você tentou declarar uma matriz usando uma variável para especificar o número de elementos.

Para declarar uma matriz dinâmica dentro de um procedimento, declare a matriz com ReDim e especifique o número de elementos com uma variável.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Constantes, seqüências de comprimento fixo, matrizes, tipos definidos pelo usuário e instruções Declare não são permitidos como membros Public de um módulo objeto

Nem todas as variáveis em um módulo objeto podem ser declaradas como Public. Entretanto, os procedimentos são Public por padrão e os procedimentos Property podem ser usados para simular variáveis sintaticamente. As causas e soluções desse erro são as seguintes:

•	Você declarou uma constante Public em um módulo objeto.

Apesar de você não poder declarar uma constante Public em um módulo objeto, você pode criar um procedimento Property Get com o mesmo nome. Se você não criar um procedimento Property Let ou Property Set com aquele nome, de fato você está criando uma propriedade somente leitura que pode ser usada da mesma maneira que usaria uma constante.

•	Você declarou uma seqüência de comprimento fixo Public em um módulo objeto.

Você pode simular seqüências de comprimento fixo com um conjunto de procedimentos Property que trunca os dados da seqüência quando excede o comprimento permitido ou notifica o usuário de que o comprimento foi excedido.

•	Você declarou uma matriz Public em um módulo objeto.

Apesar de um procedimento não poder retornar uma matriz, ele pode retornar uma Variant que contém uma matriz. Para simular uma matriz Public em um módulo de classe, use um conjunto de procedimentos Property que aceite e retorne uma Variant com uma matriz.

•	Você posicionou uma instrução Declare em um módulo objeto.

Instruções Declare são, implicitamente, públicas. Preceda a instrução Declare com a palavra-chave Private.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Módulo atual não dá suporte ao método Print

Nem todos os métodos e propriedades são corretas em todos os módulos. As causas e soluções desse erro são as seguintes:

•	Você tentou usar o método Print em um objeto que não pode exibir nada. Por exemplo, você não pode usar o método Print sem qualificação em um módulo padrão.

Remova a referência para o método Print ou qualifique-a com um objeto correto. Por exemplo, qualifique-a com o objeto Debug para exibir seus argumentos na janela Verificação imediata durante a depuração.

•	Você tentou usar o método Line, Circle, Pset ou Scale em um objeto que não os aceita. Por exemplo, eles não podem parecer não-qualificados em um módulo padrão ou em um módulo de classe de automação.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


A referência cíclica de projetos não é permitida

As referências circulares para projetos não são permitidas. Por exemplo, se MyProj faz referência a YourProj, então YourProj (ou um projeto que se refira a YourProj) não pode fazer referência a MyProj. A causa e a solução desse erro são as seguintes:

•	Você tentou adicionar uma referência a um projeto que já faz parte do projeto.

Remova a referência ou referência circulares.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


As definições de procedimento da propriedade para a mesma propriedade são inconsistentes ou contêm parâmetros opcionais ou um ParamArray

Os parâmetros para procedimentos Property Get, Property Let e Property Set para a mesma propriedade devem se corresponder corretamente, exceto que Property Let tenha um parâmetro extra, cujo tipo deva corresponder ao tipo retornado do Property Get correspondente e Property Set tenha mais um parâmetro que o Property Get correspondente, cujo tipo seja Variant, Object, um nome da classe ou um tipo de biblioteca de objetos especificado em uma biblioteca de objetos. As causas e soluções desse erro são as seguintes:

•	O número de parâmetros para o procedimento Property Get não é um menor que o número de parâmetros para o procedimento Property Let ou Property Set correspondente.

Adicione um parâmetro ao Property Let ou Property Set ou remova um parâmetro do Property Get, de modo adequado.

•	Os tipos de parâmetro de Property Get devem corresponder exatamente aos parâmetros correspondentes do Property Let ou Property Set, exceto pelo parâmetro Property Set extra.

Modifique as declarações do parâmetro nas definições do procedimento correspondente para que eles sejam corretamente correspondidos.

•	O tipo de parâmetro do parâmetro extra de Property Let deve corresponder ao tipo retornado do procedimento Property Get correspondente.

Modifique a declaração do parâmetro extra no Property Let ou o tipo retornado do Property Get correspondente para que eles se correspondam corretamente.

•	O tipo do parâmetro extra do Property Set pode ser diferente do tipo retornado do Property Get correspondente, mas ele deve ser uma Variant, Object, nome da classe ou um tipo válido da biblioteca de objetos.

Certifique-se de que o parâmetro extra do procedimento Property Set seja uma Variant, Object, nome da classe ou tipo da biblioteca de objetos.

•	Você definiu um procedimento Property com um parâmetro Optional ou ParamArray.

Os parâmetros ParamArray e Optional não são permitidos em procedimentos Property. Redefina os procedimentos sem usar essas palavras-chave.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


As instruções Deftipo devem preceder declarações

As instruções Deftipo incluem DefInt, DefDbl, DefCur, etc. As causas e soluções desse erro são as seguintes:

•	Uma declaração da variável precede uma instrução Deftipo no nível de módulo.

Mova a instrução Deftipo para que preceda todas as declarações da variável.

•	Uma instrução Deftipo aparece em um procedimento.

Mova a instrução Deftipo no nível de módulo, precedendo todas as declarações da variável.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Rótulo de destino muito distante; loop, Select Case ou bloco If muito grande

Os procedimentos podem ter 64K do começo ao fim, mas, por causa do desvio poder ocorrer de forma progressiva ou regressiva dentro de um procedimento, esse desvio está limitado a 32.767 bytes em qualquer direção. As causas e soluções desse erro são as seguintes:

•	Você tem uma instrução de desvio (GoTo, GoSub) cujo rótulo de destino está distante mais de 32.767 bytes da instrução de desvio do destino.

Aproxime o rótulo ou diminua o procedimento.

•	Você tem uma estrutura de loop muito grande que ocupa mais de 32K de memória, do começo ao fim.

Diminua o loop.

•	Você tem uma estrutura de bloco If muito grande que contém uma cláusula Then ou Else que ocupa mais de 32K de memória, do começo ao fim.

Reduza o tamanho da parte transgredida da estrutura.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Do sem Loop

Cada Do deve ser correspondido a um Loop em finalização. A causa e a solução desse erro são as seguintes:

•	Uma instrução Do foi usada sem uma instrução Loop em finalização.

Verifique se outras estruturas do controle dentro da estrutura Do...Loop correspondem-se corretamente. Por exemplo, um bloco If sem um End If correspondente dentro da estrutura Do...Loop pode gerar esse erro.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Declaração duplicada no escopo atual

O nome especificado já é usado nesse nível de escopo. Por exemplo, duas variáveis podem ter o mesmo nome se elas forem definidas em diferentes procedimentos, mas não se elas forem definidas dentro do mesmo procedimento. As causas e soluções desse erro são as seguintes:

•	Uma nova variável ou procedimento tem o mesmo nome que uma variável ou procedimento existente. Por exemplo:

Sub MySub()

Dim A As Integer

Dim A As Variant

. . .	' Outras declarações ou código do procedimento estão aqui.

End Sub

Verifique o procedimento atual, módulo ou projeto e remova qualquer declaração duplicada.

•	Uma instrução Const usa o mesmo nome de uma variável ou procedimento existente.

Remova ou renomeie a constante em questão.

•	Você declarou uma matriz fixa mais de uma vez.

Remova ou renomeie uma das matrizes.

Pesquise o nome duplicado. Ao especificar o nome para a pesquisa, omita qualquer caractere da declaração do tipo porque pode ocorrer um conflito se os nomes forem os mesmos e os caracteres da declaração do tipo forem diferentes.

Observe que uma variável no nível de módulo pode ter o mesmo nome que uma variável declarada em um procedimento, mas para se referir à variável no nível de módulo dentro do procedimento, você deve qualificá-la com o nome do módulo. Os nomes dos módulos e os nomes de projetos referenciados podem ser reutilizados como nomes dentro de procedimentos e também podem ser qualificados.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Definição duplicada

Você só pode definir uma constante do compilador condicional para ter um valor. A causa e a solução desse erro são as seguintes:

•	Você especificou dois valores diferentes para a mesma constante do compilador condicional, por exemplo:

#Const Mac = 0

#Const Mac = 1

Remova uma das definições.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Instrução Deftype duplicada

As instruções Deftipo, no mesmo escopodevem especificar intervalos de letras exclusivas. A causa e a solução desse erro são as seguintes:

•	Parte do intervalo de letras ou todas elas para essa instrução Deftipo já estão incluídas em outra instrução Deftipo.

Regrave a instrução para que não haja sobreposição nos intervalos de letras.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Instrução Duplicate Option

Apenas uma instrução Option de cada tipo pode ocorrer em cada módulo. A causa e a solução desse erro são as seguintes:

•	Você definiu mais de uma instrução Option Base, Option Compare, Option Explicit ou Option Private nesse módulo.

Remova qualquer duplicidade no módulo.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


É impossível desfazer a edição - continuar mesmo assim?
É impossível desfazer a edição — continuar mesmo assim?

Não será possível escolher o comando Desfazer para restaurar o estado atual depois de executar essa edição. A causa e a solução desse erro são as seguintes:

•	Normalmente isso ocorre quando uma edição é muito grande para ser salva.

Tente executar a edição em incrementos menores.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Else sem If

Um Else deve ser precedido por um If. A causa e a solução desse erro são as seguintes:

•	Uma instrução Else foi usada sem uma instrução If correspondente.

Verifique outras estruturas do controle dentro da estrutura If...End If e se elas são corretamente correspondidas. Verifique também se o bloco If está formatado corretamente.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


O tipo Enum não é permitido

Um tipo Enum especifica o nome e membros para uma enumeração. A causa e a solução desse erro são as seguintes:

•	Você nomeou uma enumeração em um bloco Enum…End Enum, mas falhou ao especificar qualquer membro.

Adicione pelo menos um membro ao bloco Enum…End Enum.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Expressão da inspeção vazia
Expressão da inspeção de variáveis vazia

A caixa de diálogo Adicionar inspeção de variáveis requer entrada de uma expressão. A causa e a solução desse erro são as seguintes:

•	Você não forneceu uma expressão da inspeção de variáveis na caixa de diálogo Adicionar inspeção de variáveis.

Adicione uma expressão à caixa de diálogo Adicionar inspeção de variáveis ou pressione a tecla ESC.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


End If sem bloco If

Uma instrução End If deve ter uma instrução If correspondente. A causa e a solução desse erro são as seguintes:

•	A cláusula If foi omitida ou está separada do End If.

Verifique outras estruturas do controle dentro da estrutura If...End If e se elas são corretamente correspondidas. Verifique também se o bloco If está formatado corretamente.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Fim de escopo da pesquisa foi atingido. Deseja continuar a partir do início?

A pesquisa foi sem êxito. A causa e a solução desse erro são as seguintes:

•	A pesquisa para baixo alcançou o fim do escopo especificado.

Você pode continuar a pesquisa a partir do início do escopo da pesquisa ou cancelar e alterar o escopo dela.


End Select sem Select Case

End Select deve corresponder a um Select Case anterior. A causa e a solução desse erro são as seguintes:

•	Você usou uma instrução End Select sem uma instrução Select Case correspondente.

Normalmente, isso se deve a um End Select extra abaixo de um bloco Select Case ou é desconsiderado pela instrução End Select ao copiar um bloco Select Case de um procedimento para outro. Verifique cada instrução End Select para certificar-se de que ela finaliza uma estrutura Select Case.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


End With sem With

End With deve corresponder a um With anterior. A causa e a solução desse erro são as seguintes:

•	Você usou uma instrução End With sem uma instrução With correspondente.

Verifique outras estruturas de controle dentro da estrutura With...End With e se elas são correspondidas corretamente. Por exemplo, um If sem um End If correspondente dentro da estrutura With...End With pode causar esse erro.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Enum types defined in standard modules or private classes cannot be used in public object modules as parameters or return types for public procedures, as public data members, or as fields of public user defined types
Tipos Private Enum e tipos Enum definidos em módulo padrão ou classes particulares não podem ser usados em módulos objeto público como parâmetros ou tipos retornados para procedimentos públicos, como procedimentos, membros de dados públicos ou campos de tipos públicos definidos pelo usuário

A causa e a solução desse erro são as seguintes:

•	Uma Enum não-exposta foi usada como parâmetro ou tipo retornado de um procedimento público ou membro de dados públicos de uma classe exposta.

Exposto, aqui, significa que o Enum está exposto a partir do servidor do ActiveX sendo definido, o qual equivale a salvar o que está declarado em uma classe pública de um projeto do ActiveX Exe ou Dll.


Tipos Private Enum e tipos Enum definidos em módulo padrão ou classes particulares não podem ser usados em módulos objeto público como parâmetros ou tipos retornados para procedimentos públicos, como procedimentos, membros de dados públicos ou campos de tipos públicos definidos pelo usuário
Erro ao acessar o registro do sistema

Algumas operações devem acessar o banco de dados do registro de seu sistema. A causa e a solução desse erro são as seguintes:

•	O banco de dados do registro do sistema foi corrompido.

Execute o Programa de Instalação do aplicativo host novamente.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


O manipulador de eventos é inválido

A lista de parâmetros de um procedimento que manipula eventos deve corresponder precisamente à declaração do evento. A causa e a solução desse erro são as seguintes:

•	O procedimento que manipula eventos tem o número de parâmetros errado.

Elimine os parâmetros extras ou adicione os não encontrados.

•	Um ou mais dos parâmetros do procedimento têm o tipo de dadoserrado.

Faça com que os tipos do parâmetro correspondam àqueles da declaração do evento.

•	O procedimento que manipula eventos é uma Function em vez de um Sub.

Make your procedure a Sub. An event handler can't return a value.

•	Um outro tipo de biblioteca de tipos usa o nome do evento para seu próprio tipo.

Qualifique o nome com o nome da biblioteca correta de tipos para evitar ambigüidade.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


A declaração do procedimento não corresponde à descrição de evento ou procedimento com o mesmo nome

O módulo de classe tem um nome de procedimento que está em conflito com o nome de um evento. A causa e a solução desse erro são as seguintes:

•	Um procedimento tem o mesmo nome de um evento, mas não tem a mesma assinatura (ou seja, o número e tipos dos parâmetros). Isso pode ocorrer se você fez algo como adicionar um novo parâmetro a um procedimento do evento. Por exemplo, se você modificar a definição do procedimento do evento Form_Load de um formulário como a seguir, ocorrerá esse erro:

Sub Form Load (MyParam As Integer)

. . .

End Sub

Se o procedimento não for o procedimento do evento que corresponde ao evento, altere seu nome. Se o procedimento corresponde ao evento, faça com que a lista de parâmetros concorde com o requerido pelo evento (se houver).

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Exit Do não está dentro de Do...Loop

Exit Do só é válida dentro de uma instrução Do...Loop. A causa e a solução desse erro são as seguintes:

•	Você usou uma instrução Exit Do fora de uma instrução Do...Loop.

Certifique-se de que uma instrução Do válida preceda a Exit Do.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Exit For not within For...Next

Exit For só é válida dentro de um loop For...Next. A causa e a solução desse erro são as seguintes:

•	Você usou uma instrução Exit For fora de uma instrução For...Next.

Certifique-se de que uma instrução For válida preceda Exit For.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Exit For não está dentro de For...Next

Uma instrução Exit deve corresponder ao procedimento em que ocorre. A causa e a solução desse erro são as seguintes:

•	Você usou Exit Function em um procedimento Sub ou Property.

Use Exit Sub ou Exit Property para esses tipos de procedimentos.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Exit Property não permitido em Function ou Sub

Uma instrução Exit deve corresponder ao procedimento em que ocorre. A causa e a solução desse erro são as seguintes:

•	Você usou Exit Property em um procedimento Sub ou Function.

Use a instrução Exit apropriada para esse tipo de procedimento.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Exit Sub não permitido em Function ou Property

Uma instrução Exit deve corresponder ao procedimento em que ocorre. A causa e a solução desse erro são as seguintes:

•	Você usou Exit Sub em um procedimento Function ou Property.

Use a instrução Exit apropriada para esse tipo de procedimento.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Matriz esperada

O nome de uma variável com um subscrito indica que a variável é uma matriz. A causa e a solução desse erro são as seguintes:

•	A sintaxe especificada é apropriada para uma matriz, mas nenhuma matriz com esse nome é um escopo.

Verifique para certificar-se de que o nome da variável esteja escrito corretamente. A menos que o módulo contenha Option Explicit, uma variável é criada na primeira vez. Se o nome de uma variável da matriz for escrito incorretamente, a variável pode ser criada, mas não como uma matriz.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Era esperado Function

Uma instrução do procedimento End deve corresponder ao procedimento em que ocorre. A causa e a solução desse erro são as seguintes:

•	Você usou End Property ou End Sub para encerrar um procedimento Function.

Use End Function para esse tipo de procedimento.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Expected End Property

Uma instrução do procedimento End deve corresponder ao procedimento em que ocorre. A causa e a solução desse erro são as seguintes:

•	Você usou End Function ou End Sub para encerrar um procedimento Property.

Use End Property para esse tipo de procedimento.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Era esperado End Property

Uma instrução do procedimento End deve corresponder ao procedimento em que ocorre. A causa e a solução desse erro são as seguintes:

•	Você usou End Function ou End Property para encerrar um procedimento Sub.

Use End Sub para esse tipo de procedimento.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Era esperado End With

Um bloco With deve ser finalizado. A causa e a solução desse erro são as seguintes:

•	Você não finalizou um bloco With corretamente.

Posicione uma instrução End With no fim do bloco.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Function ou variável esperada

A sintaxe da sua instrução indica uma variável ou chamada de função. A causa e a solução desse erro são as seguintes:

•	O nome não é o de uma variável ou procedimento Function conhecido.

Verifique a ortografia do nome. Certifique-se de que qualquer variável ou função com esse nome seja visível na parte do programa ao qual você se refere. Por exemplo, se uma função for definida como Private ou uma variável não for definida como Public, ela só é visível dentro de seu próprio módulo.

•	Você está tentando, indevidamente, atribuir uma valor a um nome do procedimento. Por exemplo, se MySub for um procedimento Sub, o código a seguir gera esse erro:

MySub = 237	' Causa Function esperado ou erro da variável

Apesar de você poder usar sintaxe de atribuição com um procedimento Property Let ou Function que retorne um objeto ou uma Variant que contém um objeto, você não pode usar sintaxe de atribuição com um procedimento Sub, Property Get ou Property Set.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Era esperado procedimento, não módulo

Não há nenhum procedimento com esse nome no escopo atual, mas há um módulo. Você pode chamar um procedimento, mas não um módulo. A causa e a solução desse erro são as seguintes:

•	O nome de um módulo é usado como uma chamada de procedimento.

Verifique a ortografia do nome do procedimento e certifique-se de que o procedimento que está tentando chamar não seja particular a outro módulo.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Expected procedure, not project or library

Não há nenhum procedimento com esse nome no escopo mas há um projeto. Você pode chamar um procedimento, mas não um projeto. A causa e a solução desse erro são as seguintes:

•	O nome de um projeto é usado como uma chamada de procedimento.

Verifique a ortografia do nome do procedimento e certifique-se de que o procedimento que está tentando chamar não seja particular a outro módulo.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Era esperado procedimento, não projeto ou biblioteca

Não há nenhum procedimento com esse nome no escopo atual, mas há um tipo definido pelo usuário. Você pode chamar um procedimento, mas não um tipo definido pelo usuário. A causa e a solução desse erro são as seguintes:

•	O nome de um tipo definido pelo usuário é usado como uma chamada de procedimento.

Verifique a ortografia do nome do procedimento e certifique-se de que o procedimento que está tentando chamar não seja particular a outro módulo.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Era esperado procedimento, não variável

Não há nenhum procedimento com esse nome no escopo atual, mas há uma variável. Você pode chamar um procedimento, mas não uma variável. A causa e a solução desse erro são as seguintes:

•	O nome de uma variável é usado como uma chamada de procedimento.

O erro também pode ser causado por erro de ortografia do nome de um procedimento válido, porque ele pode ser construído erroneamente como uma variável definida implicitamente. Verifique a ortografia do nome do procedimento e certifique-se de que o procedimento que está tentando chamar não seja particular a outro módulo.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Era esperado Sub, Function ou Property..

A sintaxe da instrução indica um invocação do procedimento Sub, Function ou Property. A causa e a solução desse erro são as seguintes:

•	O nome especificado não é de um procedimento Sub, Function ou Property no escopo nessa parte do programa.

Verifique a ortografia do nome. Observe que se o procedimento for definido como Private, ele só pode ser chamado de dentro de seu módulo.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Era esperado tipo definido pelo usuário, não projeto

Não há nenhum tipo definido pelo usuário com esse nome no escopo atual, mas há um projeto. Você pode definir uma variável como tendo um tipo definido pelo usuário, mas não um tipo de projeto. A causa e a solução desse erro são as seguintes:

•	O nome de um projeto é usado como um tipo definido pelo usuário.

Verifique a ortografia do nome do tipo definido pelo usuário e certifique-se de que esse tipo não seja particular a outro módulo.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Era esperada variável ou procedimento, não tipo Enum

O nome de um tipo Enum só aparece em uma instrução que declare uma enumeração do tipo ou como um qualificador. A causa e a solução desse erro são as seguintes:

•	O nome de um tipo Enum é usado em vez do nome de uma variável da enumeração do tipo.

Declare uma variável do tipo Enum ou localize uma declaração anterior no escopo atual e use essa variável.

•	O nome de um tipo Enum é usado em vez do nome de uma variável ou procedimento.

Verifique a ortografia do identificador que causou o erro. Use o nome de uma variável ou procedimento onde um tipo Enum foi especificado.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Era esperada variável ou procedimento, não módulo

Não há nenhuma variável ou procedimento com esse nome no escopo atual, mas há um módulo. A causa e a solução desse erro são as seguintes:

•	O nome de um módulo é usado como uma variável ou procedimento.

Verifique a ortografia do nome da variável ou procedimento e certifique-se de que o nome ao qual deseja se referir não seja particular a outro módulo. O nome de um módulo pode ser um qualificador, mas não pode estar sozinho.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Era esperada variável ou procedimento, não projeto

Não há nenhuma variável ou procedimento com esse nome no escopo atual, mas há um projeto. A causa e a solução desse erro são as seguintes:

•	O nome de um projeto é usado como uma variável ou procedimento.

Verifique a ortografia do nome da variável ou procedimento e certifique-se de que o nome ao qual deseja se referir não seja particular a outro módulo. O nome de um projeto pode ser um qualificador, mas não pode estar sozinho.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Expected: <various>
Esperado: <various>

Uma parte da sintaxe esperada não foi localizada. Normalmente o erro está localizado à esquerda do item selecionado, mas nem sempre é óbvio. Por exemplo, você pode chamar um procedimento Sub com ou sem a palavra-chave Call. Entretanto, se usar a palavra-chave Call, você deve incluir a lista de argumentos entre parênteses. As causas e soluções desse erro são as seguintes:

•	Esperado: Fim de instrução. Uso indevido de parênteses na invocação de um procedimento:

X = Workbook.Add F:= 5	' Erro devido a ausência de parênteses.

Call MySub 5	' Erro devido a ausência de parênteses.

Use parênteses em uma chamada de função que especifique argumentos ou através de uma invocação do procedimento Sub que use a palavra-chave Call.

•	Esperado: ). Sintaxe incorreta para uma chamada de procedimento. Por exemplo, uma chamada de função não está sozinha e as chamadas do procedimento Sub às vezes requerem a palavra-chave Call, dependendo de como os argumentos são especificados.

Workbook.Add (X:=5, Y:=7)	' Chamada de função sem expressão.

YourSub(5, 7)	' Invocação Sub sem Call.

Sempre use chamadas de função em expressões. Se você tiver múltiplos argumentos entre parênteses em uma chamada de procedimento Sub, você deve usar a palavra-chave Call.

•	Esperado: Expressão. Por exemplo, ao colar o código do Pesquisador de objeto, talvez você tenha se esquecido de especificar um valor para um argumento nomeado.

Workbook.Add (X:= )	' Erro porque não se atribuiu nenhum valor ao

' argumento nomeado

Adicione um valor ao argumento ou exclua o argumento, se ele for opcional.

•	Esperado: Variable. For example, you may have used restricted keywords for variable names. No exemplo a seguir, a instrução Input # espera uma variável como o segundo argumento. Uma vez que Type é uma palavra-chave restrita, ele pode ser usado como o nome de uma variável.

Input # 1, Type ' A palavra-chave Type é usada de forma inválida como

 ' nome da variável.

Renomeie a variável para que não entre em conflito com palavras-chave restritas.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Nome externo não definido

Você pode indicar nomes externos incluindo-os entre colchetes ([ ]). A causa e a solução desse erro são as seguintes:

•	O identificador especificado entre colchetes não tem significado ao aplicativo host.

Verifique a ortografia do nome para se certificar sobre sua consistência com o esperado pelo host.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Formato de arquivo não mais suportado

Nem todos os formatos de arquivo são legíveis sob todas as circunstâncias. A causa e a solução desse erro são as seguintes:

•	Você está tentando carregar um arquivo binário criado com uma versão anterior do Visual Basic.

Carregue o arquivo na versão do Visual Basic com a qual o arquivo foi criado, salve-o no formato de texto e, em seguida, tente carregá-lo novamente.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Seqüências de comprimento fixo e uso do qualificador `new' não são permitidos para campos em um tipo público definido pelo usuário em um módulo objeto
Seqüências de comprimento fixo e uso do qualificador ‘new’ não são permitidos para campos em um tipo público definido pelo usuário em um módulo objeto

A causa e a solução desse erro são as seguintes:

•	Seqüências de comprimento fixo e o uso do qualificador 'new' não são permitidos para campos em um tipo público definido pelo usuário definido em um módulo objeto.


Seqüência de caracteres de comprimento fixo não permitida como o tipo de um membro público de um módulo objeto; módulos objeto particular não permitidos como o tipo de um membro público de um módulo objeto particular

A causa e a solução desse erro são as seguintes:

•	Você não pode definir o tipo de um membro público de um módulo objeto para uma seqüência de comprimento fixo. Use um tipo de variável diferente.

•	Você não pode definir o tipo de um membro público de um módulo objeto público para um módulo objeto particular. Use um tipo diferente.


Dados fixos ou estáticos não podem ser maiores que 64K

Os dados fixos ou estáticos incluem variáveis não automáticas, seqüências de comprimento fixo e matrizes fixas. As causas e soluções desse erro são as seguintes:

•	Você tentou alocar mais de 64K de dados no nível de módulo.

Reduza a quantidade de dados declarados. Observe que apesar de o limite do tamanho para os dados no nível de módulo ser de 64K, as seqüências de comprimento variável e matrizes podem exceder esse limite.

•	Você tentou alocar mais de 64K de dados estáticos no nível de procedimento no módulo.

Reduza a quantidade declarada desse tipo de dados. Os dados estáticos de todos os procedimentos em um módulo estão limitados a um total de 64K (não 64K por procedimento). Observe que as seqüências de comprimento variável e matrizes podem exceder esse limite.

•	O tamanho de um tipo definido pelo usuário excede 64K.

Reduza o tamanho do tipo definido pelo usuário. Geralmente, o tamanho de um tipo definido pelo usuário é igual à soma dos tamanhos especificados para os seus elementos. Em algumas plataformas, talvez haja enchimento entre os elementos para mantê-los alinhados em limites da palavra. Se você aninhar um tipo definido pelo usuário a outro, o tamanho do tipo aninhado deve ser incluído no tamanho do novo tipo.

•	Em um procedimento, você tentou declarar uma variável de tipo definido pelo usuário que requer mais de 32K.

Apesar de o limite do tamanho de uma variável de tipo definido pelo usuário ser de 64K no nível de módulo, variáveis de tipo definido pelo usuário em procedimentos não podem exceder 32K. Reduza o tamanho requerido para o tipo definido pelo usuário ou use uma variável no nível de módulo.

•	O tamanho de uma seqüência de comprimento fixo declarado dentro de um procedimento excede 65.464.

Reduza o comprimento da seqüência de comprimento fixo. Observe que as seqüências de comprimento variável podem exceder esse limite.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Variável do controle For já em uso

Ao aninhar loops For...Next, você deve usar diferentes variáveis do controle em cada um. A causa e a solução desse erro são as seguintes:

•	Um loop interno For usa o mesmo contador que um loop For incluído.

Verifique loops aninhados a respeito de repetição. Por exemplo, se o loop externo usar For Count = 1 To 25, os loops internos não podem usar Count as como variáveis do controle.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


A variável do controle For Each deve ser Variant ou Object

Uma variável do controle é a parte elemento da sintaxe da instrução For Each...Next. As causas e soluções desse erro são as seguintes:

•	Uma coleção tem uma variável do controle que não é um tipo Variant ou Object.

Certifique-se de que a parte elemento de For Each...Next seja uma Variant ou Object.

•	Uma matriz tem uma variável do controle que não é uma Variant.

Certifique-se de que a parte elemento de For Each...Next seja uma Variant.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


A variável do controle Each em matrizes deve ser Variant

Uma variável do controle é a parte elemento da sintaxe da instrução For Each...Next. A causa e a solução desse erro são as seguintes:

•	Uma matriz tem uma variável do controle que não é uma Variant.

Certifique-se de que a parte grupo de For Each...Next seja uma variável do tipo Variant.

•	Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


For Each não pode ser usado em matrizes de tipo definido pelo usuário ou seqüências de comprimento fixo

As construções For Each só são válidas para coleções e matrizes de tipos intrínsecos, inclusive matrizes de objetos. Ainda, matrizes de seqüências de comprimento fixo não podem ser iteradas, usando For Each. As causas e soluções desse erro são as seguintes:

•	Os elementos da matriz na sua construção For Each têm um tipo definido pelo usuário.

Use um loop For...Next comum para iterar os elementos da matriz.

•	Os elementos da matriz na construção For Each têm um tipo de seqüência de comprimento fixo.

Use um loop For...Next comum para iterar os elementos da matriz.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


For Each só pode iterar através de um objeto coleção ou uma matriz

A construção For Each só pode ser usada com coleções e matrizes. A causa e a solução desse erro são as seguintes:

•	Você especificou um objeto que não é uma coleção ou matriz como a parte grupo da sintaxe For Each.

Verifique a ortografia do item através do qual deseja iterar para garantir que corresponda a uma coleção ou matriz no escopo, nessa parte do código.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


For sem Next

Toda instrução For deve ter uma instrução Next correspondente. A causa e a solução desse erro são as seguintes:

•	Uma instrução For é usada sem uma instrução Next correspondente.

Verifique uma instrução For...Next correspondida incorretamente dentro da estrutura externa For...Next.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Referência de encaminhamento ao tipo definido pelo usuário

Um tipo definido pelo usuário deve ser definido antes que se refira a ele. As causas e soluções desse erro são as seguintes:

•	Você declarou uma variável com um tipo definido pelo usuário antes que aparecesse a definição do tipo definido pelo usuário. No exemplo a seguir, a variável OtherVar é declarada antes que o tipo (OtherType) seja conhecido:

Type MyType

OtherVar As OtherType

End Type

Type OtherType

WholeVar As Integer

RealVar As Double

End Type

Reposicione as definições do tipo para que a referência de encaminhamento não ocorra.

•	Você aninhou um tipo definido pelo usuário dentro dele mesmo.

Type MyType

MyVar As Integer

OtherVar As MyType

End Type

Remova o tipo aninhado com a própria referência. Talvez isso ocorra indiretamente se você aninhou um tipo dentro de outro tipo, no qual o primeiro já tenha sido declarado. Verifique a definição de cada tipo aninhado para eliminar duplicação.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


A chamada de função à esquerda da atribuição deve retornar Variant ou Object

Uma chamada de função pode aparecer à esquerda de uma atribuição, mas somente se o valor retornado da função for um Object ou Variant. A causa e a solução desse erro são as seguintes:

•	O tipo retornado da função à esquerda da atribuição não é Variant ou Object.

Altere o tipo retornado. Observe que se o valor retornado for um objeto ou Variant que contém um objeto, a atribuição é para a propriedade padrão do objeto. Se a Variant retornado não for um objeto, a atribuição não tem nenhum efeito.

•	Tudo na chamada está correto, entretanto ela não pode ser concluída. Por exemplo, talvez você esteja tentando definir uma propriedade que só pode ser definida em tempo de criação.

Insira o modo de criação e defina a propriedade na janela Propriedade. Remova o código que tentou definir a propriedade programaticamente.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Função marcada como restrita ou que usa um tipo sem suporte no Visual Basic

Nem todo procedimento que aparece em uma biblioteca de tipos ou biblioteca de objetos pode ser acessado por toda linguagem de programação. O criador de uma biblioteca de tipos ou de objetos pode designar algumas funções como restritas para impedir o uso pelas linguagens de macro. As causas e soluções desse erro são as seguintes:

•	Você tentou usar uma função com uma especificação restrita.

Você não pode usar a função no seu programa. Se você tem documentação para o objeto representado pela biblioteca, verifique se um método é fornecido para oferecer funcionalidade equivalente.

•	Você tentou usar uma função que requer um tipo parâmetro ou tem um tipo retornado não disponível no Visual Basic.

Às vezes, você pode simular tipos retornados com equivalentes do Visual Basic. Verifique os subtipos do tipo de dados Variant. Talvez isso também funcione para tipos de parâmetros externos ao Basic esperados como referências. Entretanto, você não pode passar um tipo de dados Variant por valor como tentativa para simular um tipo externo ao Basic.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Identificador muito longo

Identifiers can't be more than 255 characters long. This error has the following cause and solution:

•	O identificador excede 255 caracteres.

Reduza o comprimento do identificador.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


O identificador sob o cursor não é um nome de procedimento

Você tentou exibir um procedimento, mas o identificador, no ponto de inserção, não era um nome de procedimento. A causa e a solução desse erro são as seguintes:

•	O identificador não é um nome de procedimento.

Verifique a ortografia do identificador.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Versão DLL incorreta

Toda versão do Visual Basic trabalha apenas com a dynamic-link library (DLL, biblioteca de vínculo dinâmico) correspondente (Windows) ou recurso de códigos (Macintosh). A causa e a solução desse erro são as seguintes:

•	Sua versão da biblioteca de vínculo dinâmico ou recurso de códigos no Visual Basic não corresponde à versão esperada por esse aplicativo host. O programa está tentando chamar rotinas em uma DLL ou recurso de códigos, mas a versão da biblioteca ou recurso está inconsistente com o Visual Basic ou o aplicativo host.

Obtenha a versão correta da biblioteca ou recurso e garanta que versões anteriores não precedam a correta no caminho.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Versão OLE incorreta

As versões das dynamic-link libraries (DLL, bibliotecas de vínculo dinâmico) OLE (Object Linking and Embedding, vinculação e incorporação de objetos) (Windows) ou recurso de códigos (Macintosh) não correspondem às esperadas pelo aplicativo host. No Microsoft Windows, o aplicativo primeiramente procura as DLLs no diretório atual e, em seguida, através das configurações do caminho e no diretório WINDOWS\SYSTEM. A causa e a solução desse erro são as seguintes:

•	As DLLs OLE anteriores foram encontradas na procura antes que as DLLs esperadas pelo aplicativo host.

Você não deveria tentar usar as duas versões das DLLs.

Observe que no Macintosh, os arquivos OLE normalmente só são localizados na pasta Extensões para que esse erro não ocorra.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Memória da janela Verificação imediata insuficiente para criar variável

A memória na janela Verificação imediata é limitada. A causa e a solução desse erro são as seguintes:

•	Você especificou uma variável na janela Verificação imediata que deve receber uma ocorrência, se ele não foi criado no contexto de código do programa.

Exclua a referência para a variável na janela Verificação imediata ou declare-a no contexto de código do programa para que ela não tenha que ser criada na janela Verificação imediata.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Memória insuficiente para salvar informações de Desfazer

Não será possível escolher o comando Desfazer para restaurar o estado atual depois de executar essa edição. A causa e a solução desse erro são as seguintes:

•	A edição é muito grande para ser salva em Desfazer.

Tente executar a edição em incrementos menores.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Informação insuficiente para carregar o projeto na plataforma ou com a versão que está sendo utilizada

Ao salvar um projeto, informações extras são salvas para permitir o carregamento do projeto com uma versão mais recente ou em uma plataforma diferente. A causa e a solução desse erro são as seguintes:

•	Ao salvar esse projeto, você recebeu uma indicação de erro de que memória insuficiente estava disponível para salvar todas as informações que pudessem ser necessárias para carregar o projeto com uma versão diferente ou para carregá-lo em uma plataforma diferente.

Carregue o arquivo usando a plataforma ou a versão do Visual Basic na qual ele foi salvo anteriormente e, em seguida, salve-o novamente. Se você não receber nenhuma mensagem de erro enquanto salvar, você deveria poder carregá-lo na versão atual ou na plataforma atual.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Interface inválida para Implements

Nem todas as interfaces podem ser implementadas no Visual Basic. A causa e a solução desse erro são as seguintes:

•	A interface contém alguns elementos que o Visual Basic não pode suportar. Por exemplo, o Visual Basic não tem equivalente para o tipo inteiro e longo não assinado, o Visual Basic não pode designar um parâmetro do procedimento como "somente externo". Apesar de o Visual Basic dar suporte ao uso do caractere sublinhado (_) em identificadores do Visual Basic, ele não pode implementar uma interface que use caracteres sublinhados nos nomes de seus membros.

Você não pode implementar a interface no Visual Basic.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Modo de acesso inválido

Na instrução Open, você especificou um tipo de acesso inválido para o tipo de arquivo especificado. As causas e soluções desse erro são as seguintes:

•	Você tentou abrir um arquivo para Input, mas especificou um modo de acesso ilegal.

Você pode omitir a especificação do modo de acesso ao abrir um arquivo para entrada, porém se a especificou, o modo de acesso deve ser Read. Os modos de acesso Write e Read Write são inválidos em um arquivo aberto para Input.

•	Você tentou abrir um arquivo para Append, mas especificou um modo de acesso inválido.

Você pode omitir a especificação do modo de acesso ao abrir um arquivo para acrescentar, porém se a especificou, o modo de acesso deve ser Write. Os modos de acesso Read e Read Write são inválidos em um arquivo aberto para Append.

•	Você tentou abrir um arquivo para Output, mas especificou um modo de acesso inválido.

Você pode omitir a especificação do modo de acesso ao abrir um arquivo para saída, porém se a especificou, o modo de acesso deve ser Write. Os modos de acesso Read e Read Write são inválidos em um arquivo aberto para Output.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Atributo inválido em Sub, Function ou Property

Alguns atributos são inválidos dentro de procedimentos. A causa e a solução desse erro são as seguintes:

•	Um atributo Public ou Private aparece dentro do corpo de uma definição do procedimento.

Remova o atributo do procedimento. Para dar escopo mais largo à variável, mova a declaração para o nível de módulo. As variáveis declaradas dentro de procedimentos sempre são Private.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Caractere inválido

O caractere não pode ser usado no contexto atual. A causa e a solução desse erro são as seguintes:

•	Provavelmente você usou um caractere inválido, um colchete ou hífen, como parte do nome de uma variável.

Compare a ortografia do nome com a sua declaração.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Formato de dados inválido

Os dados lidos de um arquivo não estavam no formato esperado. As causas e soluções desse erro são as seguintes:

•	Um arquivo do projeto ou arquivo da biblioteca de objetos está corrompido ou em um formato que não pode ser entendido.

Obtenha uma nova versão do arquivo do projeto ou do arquivo da biblioteca de objetos.

•	Talvez você tenha tentado carregar um arquivo.exe em um módulo.

Em vez disso, carregue o código fonte.

•	Talvez você tenha usado a caixa de diálogo Referências e o Pesquisador de objeto para adicionar uma referência a um arquivo que não seja uma biblioteca de objetos válida ou contenha um projeto do Basic em um formato ao qual o aplicativo host não dê suporte. Por exemplo, na plataforma do Windows, o Microsoft Excel não consegue entender arquivos .bas ou .frm ou os arquivos do Microsoft Project com código do Basic.

Carregue o arquivo duvidoso no aplicativo em que foi criado e, em seguida, salve-o em um formato compatível. Por exemplo, o código fonte da biblioteca de objetos pode ser processado através do MkTypLib; e o código QuickBasic e Visual Basic podem ser salvos no formato de texto, etc.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Tipo de dados inválido para constante

Nem todos os tipos de dados podem ser atribuídos às constantes. A causa e a solução desse erro são as seguintes:

•	Você tentou declarar o tipo de uma constante para ser um tipo definido pelo usuário, um objeto ou uma matriz.

Remova a declaração ou declare novamente como uma variável.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Inválido na janela Verificação imediata

Nem todas as instruções são permitidas na janela Verificação imediata. As causas e soluções desse erro são as seguintes:

•	Uma instrução declarativa foi usada. Por exemplo, Const, Declare, Deftipo, Dim, Function, Option Base, Option Explicit, Option Compare, Option Private, Private, Public, as instruções de declaração do procedimento da propriedade (Property Let, Property Set e Property Get), ReDim, Static, Sub e Type não são permitidas na janela Verificação imediata.

Remova as instruções declarativas da janela Verificação imediata.

•	Uma instrução do fluxo de controle foi usada, por exemplo, Sub, Function, Property, GoSub, GoTo, Return e Resume.

Remova essas instruções da janela Verificação imediata.

•	Não há nenhuma conexão lógica feita entre as linhas físicas separadas na janela Verificação imediata, portanto as instruções formatadas como linhas físicas múltiplas, como uma instrução do bloco If, não podem ser executadas corretamente.

Esses blocos podem ser digitados em uma única linha física, onde cada instrução é separada da próxima por dois-pontos (:). Por meio de conversão, você pode estender uma única instrução através de linhas físicas na janela Verificação imediata usando o caractere continuação de linha, o qual é um espaço seguido por um sublinhado ( _).

•	Você tentou executar algum código na janela Verificação imediata que invalida o estado atual do programa e requer que você o reinicialize.

Remova o código em questão da janela Verificação imediata.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Procedimento interno inválido

A instrução não pode ocorrer em um procedimento Sub ou Function. A causa e a solução desse erro são as seguintes:

•	Uma das instruções a seguir aparece em um procedimento: Declare, Deftipo, Private, Public, Option Base, Option Compare, Option Explicit, Option Private, Enum e Type.

Remova a instrução do procedimento. As instruções podem ser posicionadas no nível de módulo.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Comprimento inválido para seqüência de comprimento fixo

As causas e soluções desse erro são as seguintes:

•	Uma seqüência de comprimento fixo é declarada com comprimento zero.

Uma seqüência de comprimento fixo deve ter pelo menos um caractere.

•	Uma seqüência de comprimento fixo excede o comprimento de 65.526.

Reduza o comprimento especificado para a seqüência de comprimento fixo.

Observação   As seqüências de comprimento variável podem exceder o limite superior e podem ter comprimento zero.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Referência da variável do controle Next inválida

A variável numérica na parte Next de um loop For...Next deve corresponder à variável da parte For. A causa e a solução desse erro são as seguintes:

•	A variável da parte Next de um loop For...Next se diferencia da variável da parte For. Por exemplo:

For counter = 1 To 10

0	MyVar = Counter

1	Next Count

Verifique a ortografia da variável da parte Next para garantir que corresponda à parte For. Ainda, certifique-se de não ter excluído, indevidamente, partes do loop incluído que usou a variável.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Referência inválida ou desqualificada

Um identificador que se inicia com um ponto só é válido dentro de um bloco With. A causa e a solução desse erro são as seguintes:

•	O identificador se inicia com um ponto.

Conclua a qualificação do identificador ou remova o ponto.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Procedimento externo inválido

A instrução deve ocorrer dentro de um Sub ou Function ou um procedimento da propriedade (Property Get, Property Let, Property Set). A causa e a solução desse erro são as seguintes:

•	Uma instrução executável, Static ou ReDim, aparece no nível de módulo.

Static não é necessário no nível de módulo, se todas as variáveis nesse nível forem estáticas. Use Dim em vez de ReDim no nível de módulo. Para criar uma matriz dinâmica no nível de módulo, declare-a com Dim usando parênteses vazios.

Observação   No nível de módulo, você só pode usar comentários e instruções declarativas, como Const, Declare, Deftipo, Dim, Option Base, Option Compare, Option Explicit, Option Private, Private, Public e Type. As instruções Sub, Function e Property ocorrem fora do corpo de seus procedimentos, porém dentro da declaração do procedimento.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Uso inválido do ParamArray

O parâmetro definido como ParamArray foi usado no procedure incorretamente. As causas e soluções desse erro são as seguintes:

•	Você tentou passar ParamArray como um argumento para outro procedimento que espera uma matriz ou uma Variant ByRef.

Atribua o parâmetro ParamArray a uma Variant e, em seguida, passe a variante.

•	Você tentou usar uma instrução Erase ou ReDim com um parâmetro ParamArray dentro do procedimento.

Remova Erase ou ReDim. Essas operações não podem ser executadas no parâmetro ParamArray.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Nome do procedimento inválido

Há restrições para a nomeação do procedimento além das regras para nomeação de identificadores. A causa e a solução desse erro são as seguintes:

•	Você tentou definir um procedimento, mas o nome usado para ele é inválido porque o host já usa esse identificador para outro fim. Por exemplo, se o aplicativo host for Microsoft Excel, você não pode identificar um procedimento com o nome R1C1 porque esse identificador já é usado pelo Microsoft Excel.

Selecione outro nome para o procedimento.

•	O nome do procedimento de uma palavra-chave restrita excede 255 caracteres ou não se inicia com uma letra.

Selecione um nome diferente para o procedimento.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Qualificador inválido

Os qualificadores são usados para desfazer ambigüidades. A causa e a solução desse erro são as seguintes:

•	O qualificador não identifica um projeto, módulo, objeto ou uma variável de tipo definido pelo usuário dentro do escopo atual.

Verifique a ortografia do qualificador. Certifique-se de que o identificador de qualificação esteja dentro do escopo atual. Por exemplo, uma variável de tipo definido pelo usuário em um módulo Private só é visível dentro desse módulo.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


ReDim inválido

Nem todas as matrizes podem ser redimensionadas. As causas e soluções desse erro são as seguintes:

•	Uma variável foi implicitamente declarada como uma Variant e você tentou usar ReDim para alterá-la para uma matriz.

Uma Variant pode conter uma matriz, porém se ela não for explicitamente declarada, você não pode usar ReDim para transformá-la em uma matriz. Declare a Variant antes de usar ReDim para especificar o número de elementos que pode conter. Por exemplo, no código a seguir, ReDim AVar(10) causa um erro ReDim inválido, mas ReDim BVar(10) não:

AVar = 1	' Declaração implícita de AVar.

ReDim AVar(10)	' Causa erro ReDim inválido.

.

.

.

Dim BVar	' Declaração explícita de BVar.

ReDim BVar(10)	' Sem erro.

•	Você tentou usar ReDim para alterar mais de uma dimensão de uma matriz dentro de uma Variant.

Você só pode usar ReDim para alterar o tamanho da última dimensão de uma matriz em uma Variant. Para criar uma matriz com dimensões múltiplas que podem ser redimensionadas, ela não pode estar dentro de uma Variant e você deve declará-la de modo normal.

•	Você pode usar ReDim somente para alterar o número de elementos em uma matriz normal, não o tipo desses elementos.

Se deseja uma matriz na qual possa alterar os tipos dos elementos, use uma matriz dentro de uma Variant. Se declarar a matriz primeiro, a alteração dos tipos e o número de seus elementos pode ser feita como a seguir:

Dim MyVar As Variant	' Declare a variável.

ReDim MyVar(10) As String	' ReDim a variável como matriz de subtipos String.

ReDim MyVar(20) As Integer	' ReDim a variável como matriz de subtipos Integer.

ReDim MyVar(5) As Variant	' ReDim a variável como subtipos Variant.

•	Você tentou usar ReDim com uma matriz que é membro de um objeto de automação.

Remova ReDim.

Observação   Se você não especificar um tipo para uma variável, a variável recebe o tipo padrão, Variant. Isso nem sempre é óbvio. Por exemplo, o seguinte código declara duas variáveis, a primeira, MyVar, é uma Variant; a segunda, AnotherVar, é um Integer.

Dim MyVar, AnotherVar As Integer

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Sintaxe inválida para declarações da constante do compilador

Inserir constantes do compilador condicional em uma caixa de diálogo Options se diferencia de declarar constantes em código. A causa e a solução desse erro são as seguintes:

•	Você usou sintaxe imprópria ao inserir uma declaração da constante na caixa de diálogo Options.

A única sintaxe válida é uma simples atribuição de um valor inteiro ao identificador. Certifique-se de que a sintaxe para a entrada é como a seguir, com cada constante separada por dois-pontos (:):

constantname = [{+ | – }]integervalue : [{+ | – }]constantname = integervalue [...]

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Caractere de declaração de tipo

Caracteres de declaração de tipo são válidos, mas não existem para todos os tipos de dados; eles não são permitidos em algumas situações. As causas e soluções desse erro são as seguintes:

•	Um caractere de declaração de tipo é acrescentado a uma variável declarada em uma instrução Private, Public ou Static como uma cláusula As.

Remova o caractere de declaração de tipo.

•	Um caractere de declaração de tipo é acrescentado a um literal inconsistente. Por exemplo, se o E comercial (&) for o caractere de declaração de tipo para um inteiro Long, acrescentá-lo a um literal de tipo diferente causa esse erro:

10.253&

Remova o caractere de declaração de tipo ou substitua-o pelo correto.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Uso inválido do operador AddressOf

O operador AddressOf modifica um argumento para passar o endereço de uma função em vez de passar o resultado da chamada de função. A causa e a solução desse erro são as seguintes:

•	Você tentou usar AddressOf com o nome de um método de classe.

Somente os nomes de procedimentos do Visual Basic em um módulo .bas podem ser modificados com AddressOf. Você não pode especificar um método de classe.

•	O nome do procedimento modificado pelo AddressOf está definido em um módulo em um projeto diferente.

•	Você tentou modificar o nome de uma função DLL (Dynamic Link Library, biblioteca de vínculo dinâmico) ou uma função definida em uma biblioteca de tipos com AddressOf.

•	As funções DLL e da biblioteca de tipos não podem ser modificadas com AddressOf.

A definição do procedimento deve estar em um módulo do projeto atual. Mova a definição para um módulo desse projeto ou inclua o módulo atual no projeto.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Uso inválido da palavra-chave Me

A palavra-chave Me pode aparecer em módulos classe. As causas e soluções desse erro são as seguintes:

•	A palavra-chave Me apareceu em um módulo padrão.

A palavra-chave Me não pode aparecer em um módulo padrão porque um módulo padrão não representa um objeto. Se você copiou o código em questão de um módulo de classe, você deve substituir a palavra-chave Me pelo objeto específico ou nome do formulário para manter a referência original.

•	A palavra-chave Me apareceu à esquerda da atribuição Set, por exemplo:

Set Me = MyObject	' Causa a mensagem "Uso inválido da palavra-chave Me ".

Remova a atribuição Set.

Observação   A palavra-chave Me pode aparecer à esquerda de uma atribuição Let, nesse caso a propriedade padrão do objeto representado pela Me é definida. Por exemplo:

Let Me = MyObject	' Atribuição válida com Let explícito.

Me = MyObject	' Atribuição válida com Let implícito.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Uso inválido da palavra-chave New

A palavra-chave New só pode ser aplicada a um objeto que pode ser criado (uma ocorrência de uma classe ou objeto de automação). As causas e soluções desse erro são as seguintes:

•	Você tentou criar um exemplo que pode ter apenas uma ocorrência. Por exemplo, você tentou criar uma nova ocorrência de um módulo ao especificar Module1 em uma instrução como a seguir:

Dim MyMod As New Module1

Você não pode criar a nova ocorrência, uma vez que um módulo pode ter apenas uma ocorrência.

•	Você tentou criar um exemplo de objeto de automação, mas ele não é um objeto que pode ser criado. Por exemplo, você tentou criar uma nova ocorrência de uma caixa de listagem ao especificar ListBox em uma instrução como a seguir:

' Sintaxe válida para criar a variável.

Dim MyListBox As ListBox

Dim MyFormInst As Form

' Sintaxe inválida para criar o objeto.

Set MyFormInst = New Form

Set MyListBox = New ListBox

ListBox e Form são nomes de classe, não nomes de objetos específicos. Você pode usá-los para especificar que uma variável será uma referência a um determinado tipo de objeto, da mesma forma com as instruções Dim válidas acima. Mas você não pode usá-los para criar os próprios objetos em uma instrução Set. Você deve especificar um objeto específico, em vez do nome da classe genérico, na instrução Set:

' Sintaxe válida para criar nova ocorrência de um formulário ou caixa de listagem.

Set MyFormInst = New Form1

Set MyListBox = New List1

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Uso inválido de objeto

Você tentou usar um objeto de maneira incorreta. As causas e soluções desse erro são as seguintes:

•	Você tentou parar de usar a referência de um objeto ao atribuir Nothing a ele, mas omitiu a palavra-chave Set:

MyObject = Nothing

Use a instrução Set para definir um objeto para Nothing. Ao assumir MyObject como um objeto, você deve defini-lo para Nothing com a instrução Set:

Set MeuObjeto = Nothing

Omitir a palavra-chave Set é um uso implícito de Let, o qual causa uma tentativa de executar uma atribuição de valor, em vez de uma atribuição de referência. Nothing não pode ser usado em uma atribuição de valor.

•	Você tentou usar Nothing em uma expressão.

Regrave a expressão sem Nothing.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Uso inválido de Property

Você está usando um tipo de procedimento Property onde um tipo diferente é esperado. As causas e soluções desse erro são as seguintes:

•	Você está tentando gravar em uma propriedade que é somente leitura.

Se o único procedimento da propriedade definido para ela for um Property Get, você não pode atribuir um valor à propriedade. Grave um procedimento Property Let apropriado ou não tente gravar na propriedade.

•	Você está tentando ler uma propriedade que é somente gravação.

Se o único procedimento da propriedade definido para ela for um Property Let, você não pode ler o valor da propriedade. Grave um procedimento Property Get apropriado ou não tente gravar na propriedade.

•	Você está tentando definir uma referência, mas a propriedade tem apenas procedimentos Property Get ou Property Let.

Grave um procedimento Property Set na propriedade ou não tente definir uma referência para ela.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Expressão de inspeção inválida
Expressão de inspeção de variáveis inválida

A expressão de inspeção de variáveis especificada não é uma expressão válida. A causa e a solução desse erro são as seguintes:

•	A expressão de inspeção de variáveis está incorreta sintaticamente.

Verifique a sintaxe de todos os componentes da expressão. Observe que a sintaxe para uma expressão da inspeção de variáveis corresponde ao local do projeto no qual a expressão sendo inspecionada é definida.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Rótulo não definido

A causa e a solução desse erro são as seguintes:

•	Faz-se referência a um rótulo de linha ou número de linha (por exemplo, em uma instrução GoTo), mas não ocorre dentro do escopo da referência.

O rótulo deve estar dentro do procedimento com a referência. Os rótulos de linha são visíveis somente nos próprios procedimentos.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Definição de idioma/país foi alterada

A causa e a solução desse erro são as seguintes:

•	Você alterou a definição do idioma/país para o ambiente do Visual Basic.

Lembre-se de que isso pode causar problemas, apesar de que ele, isolado, seja legal.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


A linha não é uma instrução executável

Declarações e comentários não são instruções executáveis. A causa e a solução desse erro são as seguintes:

•	Você selecionou o comando Executar até o cursos, mas o cursor não estava em uma linha com uma instrução executável.

Posicone o cursor em uma instrução executável próxima à linha atual.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Linha muito longa

Uma linha física de código do Visual Basic pode conter até 1.023 caracteres. A causa e a solução desse erro são as seguintes:

•	Uma linha contém muitos caracteres.

Você pode criar uma linha lógica mais longa ingressando linhas físicas a um caractere de continuação de linha, um espaço de seguido de sublinhado ( _). Até 25 linhas físicas podem ser ingressadas a caracteres de continuação de linha para formar uma única linha lógica, ou 24 caracteres de continuação de linha consecutivos. Assim, uma linha lógica poderia conter potencialmente um total de 10.230 caracteres. Além disso, você deve quebrar a linha em instruções individuais ou atribuir algumas expressões às variáveis intermediárias.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Loop sem Do

Um loop Do deve se iniciar com uma instrução Do. A causa e a solução desse erro são as seguintes:

•	Você tem um bloco de loop não finalizado aninhado dentro de outro loop.

Verifique se a sintaxe Do...Loop correta foi usada.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


LSet só permitido em seqüências e tipos definidos pelo usuário

LSet é usado para alinhar dados à esquerda dentro de seqüências e variáveis de tipo definido pelo usuário. As causas e soluções desse erro são as seguintes:

•	A variável especificada não é uma seqüência ou tipo definido pelo usuário.

Se estiver tentando bloquear atribuição de uma matriz para outra, LSet não funciona. Você deve usar um loop para atribuir cada elemento individualmente.

•	Você tentou usar LSet com um objeto.

LSet também pode ser usado para atribuir os elementos de uma variável de tipo definido pelo usuário aos elementos de um tipo definido pelo usuário diferente, porém compatível. Apesar de os objetos serem semelhantes aos tipos definidos pelo usuário, você não pode usar LSet com eles. De forma semelhante, você não pode usar LSet com variáveis de tipos definidos pelo usuário com seqüências, objetos ou variações.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


LSet não permitido

LSet é usado para alinhar dados à esquerda dentro de seqüências e variáveis de tipo definido pelo usuário. A causa e a solução desse erro são as seguintes:

•	Você tentou usar LSet em um tipo definido pelo usuário contendo seqüências, objetos ou variações.

Você deve atribuir os elementos individualmente dessa variável de tipo definido pelo usuário para outra.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Bad interface for Implements: interface is derived from another pure interface with non-restricted methods
Interface incorreta para Implements: a interface é derivada de outra interface pura com métodos não restritos

A causa e a solução desse erro são as seguintes:

•	A interface é direta ou indiretamente derivada de uma interface pura que contém métodos não restritos.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Bad interface for Implements: interface contains data fields
Interface incorreta para Implements: a interface contém campos de dados

A causa e a solução desse erro são as seguintes:

•	A interface ou classe contém campos de dados.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Bad interface for Implements: method has underscore in name
Interface incorreta para Implements: method has underscore in name

A instrução Implements é usada para especificar uma interface ou classe que será implementada no módulo de classe em que aparece. A causa e a solução desse erro são as seguintes:

•	A interface ou classe contém o nome de um método com um caractere sublinhado.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Bad interface for Implements: method does not return HRESULT
Interface incorreta para Implements: method does not return HRESULT

A instrução Implements é usada para especificar uma interface ou classe que será implementada no módulo de classe em que aparece. A causa e a solução desse erro são as seguintes:

•	A interface ou classe contém o nome de um método que retorna um valor que não é de tipo HRESULT.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Bad interface for Implements: method has out-only or LCID parameter
Interface incorreta para Implements: method has out-only or LCID parameter

A instrução Implements é usada para especificar uma interface ou classe que será implementada no módulo de classe em que aparece. A causa e a solução desse erro são as seguintes:

•	A interface ou classe contém um método com um parâmetro de tipo somente externo ou LCID.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Bad interface for Implements: method has parameter with too many levels of indirection
Interface incorreta para Implements: método com um parâmetro com muitos níveis de não direção

A instrução Implements é usada para especificar uma interface ou classe que será implementada no módulo de classe em que aparece. A causa e a solução desse erro são as seguintes:

•	A interface ou classe contém um método com um parâmetro com muitos níveis de não direção. Por exemplo, uso de não direções duplas de inteiros ou triplas de tipos definidos pelo usuário.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Bad interface for Implements: methods uses type that is not supported by Visual Basic
Interface incorreta para Implements: métodos usa tipo sem suporte no Visual Basic

A instrução Implements é usada para especificar uma interface ou classe que será implementada no módulo de classe em que aparece. A causa e a solução desse erro são as seguintes:

•	A interface ou classe contém um método ao qual o Basic não oferece suporte.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Bad interface for Implements: interface is not derived from Iunknown
Interface incorreta para Implements: interface não é derivada de Iunknown

A instrução Implements é usada para especificar uma interface ou classe que será implementada no módulo de classe em que aparece. A causa e a solução desse erro são as seguintes:

•	A interface ou classe contém um método que usa tipos de dados que o Basic não dá suporte.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Número máximo de expressões de inspeção de variáveis de variáveis adicionadas
Número máximo de expressões de inspeção de variáveis adicionadas

Há um limite de número de expressões de inspeção de variáveis que a janela Watch pode conter. A causa e a solução desse erro são as seguintes:

•	Você adicionou o número máximo de expressões de inspeção de variáveis para a janela Watch.

Remova uma expressão de inspeção de variáveis quando adicionar alguma outra ou exiba o valor que você deseja saber na janela Immediate.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


O identificador de membro já existe no módulo de objeto a partir do qual esse módulo deriva

Os identificadores usados para os membros do módulo objeto não podem ser conflitantes com nomes já usados em um módulo objeto a partir do qual derivam. A causa e a solução desse erro são as seguintes:

•	Um procedimento ou identificador de membro de dados em seu módulo objeto usa um identificador já usado no módulo objeto a partir do qual ele deriva. Por exemplo, um formulário tem uma propriedade BackColor, assim, o seguinte código causaria este erro:

' O formulário já tem uma propriedade BackColor.

Dim BackColor As Integer	' Gera o erro.

Function BackColor()	' Gera o erro.

End Function

Altere o identificador conflitante com o identificador de membro em seu módulo objeto.

Observação   Os seguintes nomes não podem ser usados como nomes de propriedade ou método porque pertencem às interfaces subjacentes IUnknown e Idispatch: QueryInterface, AddRef, Release, GetTypeInfoCount, GetTypeInfo, GetIDsOfNames, Invoke. O uso desses nomes leva a um erro de compilação.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Método inválido sem objeto adequado

Nem todos os métodos podem ser executados por todos os objetos. A causa e a solução desse erro são as seguintes:

•	Você chamou um método sem especificar um objeto e o método não é válido para o objeto implícito. Por exemplo, você não pode usar o método Line em um módulo padrão sem um qualificador de objeto válido porque um módulo padrão não pode exibir a saída do método Line.

Qualifique explicitamente a chamada do método com um objeto que possa aceitar o método. Por exemplo, você pode especificar uma caixa de formulário ou figura com o método Line.

Observação   Outros métodos que precisam de um qualificador de objeto explícito, quando usados em um módulo padrão, são Circle, Print e PSet.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Colchete final ausente

Os colchetes em uma instrução devem ocorrer em pares correspondentes. A causa e a solução desse erro são as seguintes:

•	Um colchete de abertura não é correspondido por um colchete de fechamento.

Coloque um colchete de fechamento no final do material a ser delimitado por colchetes.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Módulo não encontrado

Os módulos não são carregados de uma referência de código — eles devem fazer parte do projeto. A causa e a solução desse erro são as seguintes:

•	O módulo solicitado não existe no projeto especificado. Por exemplo, a instrução MyModule.SomeVar = 5 gera este erro quando MyModule não está visível no projeto MyProject.

Consulte a documentação de seu aplicativo host para obter informações sobre a inclusão do módulo no projeto.


Módulo muito grande

Um módulo contém código dentro do projeto. A causa e a solução desse erro são as seguintes:

•	Há códigos em excesso no módulo.

Crie um novo módulo e mova alguns dos procedimentos deste módulo para aquele recém-criado. Se o módulo atual contiver declarações de dados de nível de módulo que devam ficar visíveis aos procedimentos do novo módulo, declare esses dados como Public.

Observação   Comentários não são contados como linhas de código. Portanto, a exclusão de comentários não impede este erro.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Deve ser a primeira instrução na linha

Nem todas as palavras-chave podem aparecer no início de uma linha de código. As causas e soluções desse erro são as seguintes:

•	Uma instrução Sub, Function ou Property foi precedida por uma outra instrução na mesma linha.

Uma instrução Sub, Function ou Property sempre deve ser a primeira instrução em qualquer linha em que apareça (a menos que seja precedida pela palavra-chave Public, Private ou Static).

•	Uma instrução End If, Else ou ElseIf foi precedida por outra instrução na mesma linha.

Uma instrução End If, Else ou ElseIf (somente quando usada em uma estrutura de bloco If) sempre deve ser a primeira instrução em qualquer linha em que apareça.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Nome conflitante com o módulo, projeto ou biblioteca de objetos existente

Os módulos, as bibliotecas de objetos e os projetos referenciados devem ter um nome exclusivo dentro de um projeto. As causas e soluções desse erro são as seguintes:

•	Já existe um módulo, projeto ou biblioteca de objetos com este nome neste projeto. Uma extensão do nome de arquivo não é considerada parte do nome, portanto, podem ser usadas extensões diferentes para distinguir um arquivo do outro.

Use um nome diferente para uma das referências de módulo, projeto ou biblioteca de objetos duplicadas.

•	Você tentou adicionar uma referência a um projeto ou biblioteca de objetos cujo nome de arquivo (sem uma extensão) é igual ao nome de algum dos módulos do projeto atual.

Altere o nome do módulo ou o nome do arquivo que não pôde ser adicionado.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Argumento nomeado já especificado

Você pode usar um argumento nomeado somente uma vez na lista de argumentos de cada chamada de procedimento. As causas e soluções desse erro são as seguintes:

•	Você especificou o mesmo argumento nomeado mais de uma vez em uma única chamada. Por exemplo, se o procedimento MySub espera os argumentos nomeados Arg1 e Arg2, a seguinte chamada gera este erro:

Call MySub(Arg1 := 3, Arg1 := 5)

Remova uma das especificações duplicadas.

•	Você especificou o mesmo argumento pela posição e com um argumento nomeado, por exemplo:

Call MySub(1, Arg1 := 3)

Remova uma das especificações duplicadas.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Argumentos nomeados não permitidos

Argumentos nomeados não são permitidos em todas as situações. As causas e soluções desse erro são as seguintes:

•	Você tentou especificar um argumento nomeado como um índice de matriz, por exemplo:

MyVar = MyArray(MyNamedArg := 1)

Use uma variável normal ou expressão de constante como um índice de matriz.

•	Você tentou especificar um argumento nomeado com um objeto, por exemplo:

MyVar = MyObject(MyNamedArg := 1)

Use uma variável ou expressão de constante se o objeto necessitar de um argumento. Por exemplo, se o padrão para um objeto é um método, o nome do objeto representa o método padrão. Se forem necessários argumentos, especifique-os posicionalmente.

•	Você tentou especificar um argumento nomeado com um nome externo:

MyVar = [MyName](MyNamedArg := 1)

Use uma variável normal ou expressão de constante se o nome externo precisar de um argumento.

•	Você tentou especificar um argumento nomeado com um membro de dados de um objeto, por exemplo:

MyVar = [MyObject].MyProperty(MyNamedArg := 1)

Use uma variável normal ou expressão de constante se o membro de dados precisar de um argumento.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Next sem For

Uma instrução Next deve ter uma instrução For precedente que seja correspondente. A causa e a solução desse erro são as seguintes:

•	Uma instrução Next é usada sem uma instrução For correspondente.

Verifique outras estruturas de controle dentro da estrutura For...Next e verifique se elas correspondem corretamente. Por exemplo, um If sem um End If correspondente dentro da estrutura For...Next gera este erro.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Nenhum texto selecionado

Você deve selecionar algum texto para executar esta operação. A causa e a solução desse erro são as seguintes:

•	Você não selecionou nenhum texto antes de iniciar uma operação Localizar ou Substituir.

Alguns aplicativos host permitem que você especifique o escopo de seleção quando pesquisar e substituir texto, mesmo que não haja texto realmente selecionado. Para selecionar texto, posicione o ponteiro no início da seleção desejada e, em seguida, mantenha pressionada a tecla SHIFT e use as teclas de direção ou clique no final do texto para concluir a seleção. Para não pesquisar texto selecionado, desfaça a opção de Seleção.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Memória insuficiente para salvar completamente o projeto

Quando um projeto é salvo, as informações extras geralmente são salvas para possibilitar o carregamento do projeto em uma versão mais recente ou em uma plataforma diferente. A causa e a solução desse erro são as seguintes:

•	A memória disponível é insuficiente para salvar informações que serão necessárias se você tentar carregar o projeto em uma versão mais recente do Visual Basic ou em uma plataforma diferente.

Se você pretender abrir o projeto em uma versão mais recente do Visual Basic ou em outra plataforma, feche alguns aplicativos e tente salvar novamente.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Nenhuma expressão de inspeção de variáveis selecionada

Você deve ter uma expressão selecionada quando escolher o comando Inspecionar variáveis. A causa e a solução desse erro são as seguintes:

•	Você não selecionou uma expressão para ser inspecionada antes de escolher Inspecionar variáveis.

Realce a expressão de inspeção de variáveis na janela Code antes de escolher Inspecionar variáveis.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Não há suporte para o recurso da biblioteca de objetos

É possível ter recursos em uma biblioteca de objetos que não tenham equivalentes no Visual Basic. A causa e a solução desse erro são as seguintes:

•	Foi feita uma tentativa para acessar um tipo de dados da biblioteca de objetos ou uma função para o qual o Visual Basic não dá suporte.

Contate o autor da biblioteca de objetos para obter mais informações sobre quando é apropriado usar a biblioteca de objetos e as ferramentas com as quais ela deve ser usada.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Biblioteca de objetos do Visual Basic for Applications não encontrada

A biblioteca de objetos do Visual Basic for Applications deixou de ser um arquivo autônomo; ela está integrada à dynamic-link library (DLL, biblioteca de vínculo dinâmico).

0	Em circunstâncias incomuns, uma versão anterior da biblioteca de objetos (vaxxx.olb ou vaxxxx.olb) correspondente ao idioma do projeto pode ser necessária, mas não encontrada. As causas e soluções desse erro são as seguintes:

•	A biblioteca de objetos não foi completamente encontrada, não está no diretório esperado ou está em uma versão incorreta.

Pesquise seu disco para certificar-se de que a biblioteca de objetos esteja no diretório correto, conforme especificado na documentação do aplicativo host.

Se a biblioteca não encontrada estiver em uma versão de idioma que não instalada pelo aplicativo host, pode ser mais fácil simplesmente executar o programa de instalação novamente. Se um projeto necessitar de uma biblioteca de objetos de idioma diferente daquela fornecida com seu aplicativo host (por exemplo, se alguém envia a você um projeto escrito em uma máquina configurada para um idioma diferente), certifique-se de que a versão de idioma correta da biblioteca de objetos do Visual Basic esteja incluída com o projeto e instalada na localização esperada.

Os aplicativos podem suportar versões de idioma diferentes de suas bibliotecas de objetos. Para descobrir qual versão de idioma é requerida, exiba a caixa de diálogo References e veja qual idioma é indicado na parte inferior da caixa de diálogo.

As bibliotecas de objetos existem em versões diferentes para cada plataforma. Portanto, quando os projetos são movidos através de plataformas, por exemplo, do Macintosh para Microsoft Windows, a versão de idioma correta da biblioteca referenciada para essa plataforma deve estar disponível na localização especificada na documentação de seu aplicativo host. Observe que há códigos de idioma com dois ou três caracteres.

O nome de arquivo da biblioteca de objetos do Visual Basic é construída como a seguir:

•	Windows: Código do aplicativo + Código de idioma + [Versão].OLB. Por exemplo:

A biblioteca de objetos em francês do Visual Basic for Applications, para a versão 2, era vafr2.olb.

•	Macintosh: Código de idioma do nome do aplicativo [Versão] OLB. Por exemplo:

A biblioteca de objetos em francês do Visual Basic for Applications, para a versão 2, era VA FR 2 OLB.

Se você não conseguir localizar um projeto ou biblioteca de objetos não encontrada em seu sistema, contate o autor do projeto em referência. Se a biblioteca não encontrada for uma biblioteca de objetos do aplicativo Microsoft, ela poderá ser obtida como a seguir:

•	Se você tiver acesso aos serviços eletrônicos de suporte ao produto Microsoft, consulte a seção de suporte ao produto deste arquivo de Ajuda. Em serviços eletrônicos, você localizará instruções sobre como usar a opção de serviço apropriada.

•	Se você não tiver acesso aos serviços eletrônicos de suporte ao produto Microsoft, as bibliotecas de objetos da Microsoft estão disponíveis através de pedido como uma nota de aplicativo da Microsoft. As informações sobre como contactar a organização de suporte ao produto Microsoft também estão disponíveis na seção de suporte técnico deste arquivo de Ajuda.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Biblioteca de objetos não registrada

A biblioteca de objetos do Visual Basic for Applications deixou de ser um arquivo autônomo; ela está integrada à dynamic-link library (DLL, biblioteca de vínculo dinâmico).

0	Em versões anteriores, quando você iniciava um aplicativo que usava o Visual Basic for Applications, determinadas bibliotecas de objetos eram carregadas. A causa e a solução desse erro são as seguintes:

•	Foi feita uma tentativa para carregar uma versão anterior da biblioteca de objetos do Visual Basic for Applications (vaxxx.olb) ou bibliotecas de objetos do aplicativo host. No entanto, a versão de idioma correta destas bibliotecas de objetos não foi encontrada no registro do sistema.

Registre novamente seu aplicativo. No Macintosh, exclua o arquivo vba.ini a partir da pasta Macintosh Preferences e reinicialize o aplicativo.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Definição de idioma da biblioteca de objetos incompatível com o projeto atual

Não foi possível adicionar a referência. A causa e a solução desse erro são as seguintes:

•	Você tentou adicionar uma referência a uma biblioteca de objetos cuja localidade não é compatível com a localidade do projeto atual. A referência não foi adicionada. Para usar essa biblioteca de objetos, deverá ser criado um projeto cuja localidade seja compatível com ela.

Tente registrar o Visual Basic for Applications e o aplicativo host para o idioma fornecido. A biblioteca de objetos torna-se então disponível na caixa de diálogo References.

Observação   Quando o Visual Basic for o aplicativo host, não é possível alterar a definição de idioma de um projeto. Qualquer biblioteca de objetos usada deve ser compatível com a definição Inglês (E.U.A.).


Não há suporte para o tipo no Visual Basic

Não há suporte para todos os tipos no Visual Basic. A causa e a solução desse erro são as seguintes:

•	Você tentou usar um tipo em seu programa que não tem equivalente no Visual Basic for Applications. Por exemplo, o Visual Basic não tem ponteiro ou tipo inteiro não sinalizado, portanto, se você tentar criar uma variável de um destes tipos a partir de uma biblioteca de objetos, ocorrerá este erro. No exemplo a seguir, mesmo que Rainbow seja uma estrutura válida, o Visual Basic não poderá criar uma variável desse tipo se contiver um tipo não reconhecido pelo Visual Basic:

Dim MyVar As Rainbow	' Causa erro.

Se o tipo de parâmetro for válido para uma função em uma biblioteca de objetos, este erro significa apenas que você não pode criar uma variável desse tipo em seu próprio código. Embora nem sempre seja possível declarar variáveis com um tipo de dados especificado na documentação de um objeto, muitas vezes há um equivalente do Visual Basic. Por exemplo, embora o Visual Basic não tenha o tipo ponteiro, você pode passar um ponteiro para uma função de API usando o operador AddressOf. Além disso, verifique os subtipos do tipo Variant. Você pode, freqüentemente, usá-los como equivalentes de tipos não oferecidos diretamente no Visual Basic. No entanto, em alguns casos, o Visual Basic simplesmente não tem equivalente. Por exemplo, os ponteiros de dados não estão disponíveis.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Somente comentários podem aparecer após End Sub, End Function ou End Property

Somente comentários, diretivas e declarações são permitidos fora de procedimentos. A causa e a solução desse erro são as seguintes:

•	Você posicionou o código executável fora de um procedimento.

Qualquer linha não-declarativa fora de um procedimento deve começar com um delimitador de comentário ('). As instruções declarativas devem aparecer antes da primeira declaração de procedimento. Os comentários são ignorados quando o código é executado.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


O argumento opcional deve ser Variant

Argumentos opcionais podem ter qualquer tipo de dados intrínseco, mas devem ser um tipo com um valor padrão único. A causa e a solução desse erro são as seguintes:

•	Você tentou especificar Optional com um parâmetro sem valor padrão, por exemplo, uma matriz.

Certifique-se de que qualquer argumento especificado como Optional tenha um valor padrão.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Option Private Module não permitida em módulo objeto

Option Private Module torna o conteúdo de um módulo não disponível para outros projetos, enquanto preserva a disponibilidade para seu projeto. A causa e a solução desse erro são as seguintes:

•	A instrução Option Private Module aparece em um módulo objeto.

Remova a instrução Option Private Module do módulo. Os módulos objeto têm a característica de Option Private Module como padrão. A alteração do padrão não pode ser feita a partir do código. Consulte a documentação do aplicativo host para obter informações sobre como fornecer maior visibilidade para membros do módulo objeto.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Sem memória; algumas inspeção de variáveis podem ter sido excluídas
Sem memória; algumas inspeções de variáveis podem ter sido excluídas

Quando o sistema estiver sem memória, as expressões de inspeção de variáveis são excluídas para disponibilizar memória suficiente para permitir a recuperação da condição. A causa e a solução desse erro são as seguintes:

•	Você tem aplicativos, projetos ou módulos em excesso carregados.

Para continuar trabalhando, remova os elementos dispensáveis da memória, incluindo aplicativos, projetos ou módulos desnecessários que possam ser carregados.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Sem recursos

Certos tipos de recursos denominados "identificadores" são usados internamente para muitas operações. A causa e a solução desse erro são as seguintes:

•	Seu código alcançou um limite de recursos.

Tente salvar, fechar e carregar novamente seu código. Se mesmo assim receber esta mensagem de erro, reduza o número de objetos em referência no código.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


ParamArray deve ser declarado como uma matriz de Variant

Cada argumento para um  parâmetro ParamArray pode ser de um tipo de dados diferente. Portanto, o parâmetro em si deve ser declarado como uma matriz de tipo Variant. Você também pode fornecer qualquer número de argumentos para um ParamArray. Quando a chamada é feita, cada argumento fornecido na chamada torna-se um elemento correspondente da matriz Variant. Por exemplo:

Sub MySub(ParamArray VarArg())

0	. . .

End Sub

Call MySub ("Primeiro arg", 2, 3.54)

As causas e soluções desse erro são as seguintes:

•	Na definição do procedimento, o parâmetro ParamArray é definido como uma matriz de um tipo diferente de Variant.

Declare novamente o tipo de parâmetro como uma matriz de elementos Variant.

•	Nenhum tipo de dados foi especificado para o parâmetro ParamArray, mas a definição de procedimento está dentro do escopo de uma instrução Deftype, portanto, o parâmetro é declarado implicitamente como tendo um tipo diferente de Variant.

Use uma cláusula As Variant explícita na especificação do parâmetro ParamArray.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Consulte o arquivo Leiame para obter mais informações sobre este erro

Alguns tópicos foram adicionados a este produto após a Ajuda ter sido concluída. As explicações da Ajuda podem ser encontradas no arquivo Leiame do aplicativo host.

0	Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Private Enum e tipos definidos pelo usuário não podem ser usados como parâmetros ou tipos retornados para procedimentos públicos, membros de dados públicos ou campos de tipos públicos definidos pelo usuário

Um procedimento Public é visível para todos os módulos em um projeto, enquanto um tipo Private Enum não é visível fora de seu próprio módulo. A causa e a solução desse erro são as seguintes:

•	O procedimento Public está em uma classe Public, mas retorna um valor ou tem um parâmetro que é definido em um módulo padrão ou em uma classe Private.

Declare Enum Public. Ele deve estar em um módulo de classe.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Procedimento muito grande

Quando compilado, o código para um procedimento não pode exceder 64K. A causa e a solução desse erro são as seguintes:

•	O código para este procedimento excede 64K quando compilado.

Divida este e qualquer outro procedimento grande, em dois ou mais procedimentos menores.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


O projeto contém muitos nomes de procedimento, variável e constante

Os nomes de procedimento, variável, constante e parâmetro de um projeto são armazenados em uma tabela de nomes. A causa e a solução desse erro são as seguintes:

•	O número de nomes da tabela de nomes do projeto excede 32.768.

A tabela de nomes pode conter algumas duplicatas temporárias. Você pode compactar a tabela de nomes salvando o projeto em um disco e, em seguida, fechando-o. Se o problema continuar após você reabrir o projeto, reduza o número de nomes usando novamente os nomes de variáveis locais em múltiplos procedimentos e, em seguida, compacte novamente a tabela salvando, fechando e reabrindo o projeto.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Projeto não encontrado

O projeto não foi encontrado. A causa e a solução desse erro são as seguintes:

•	Você especificou um nome de projeto que não pode ser encontrado.

Verifique se há erros quanto ao modo como o projeto foi especificado.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Nome qualificado não permitido no escopo do módulo

Em certas circunstâncias, alguns aplicativos host não permitem chamadas de procedimento que incluam nomes qualificados. A causa e a solução desse erro são as seguintes:

•	Você especificou o nome de um módulo em uma chamada de procedimento usando notação de ponto (qualificador.item ).

Se você estiver recebendo este erro, provavemente é porque o aplicativo host já conhece o qualificador especificado e não precisa dessas informações na chamada de procedimento. Nesse caso, simplesmente omita o qualificador por completo e o aplicativo host criará a chamada de procedimento corretamente. Verifique a documentação do aplicativo host para descobrir a causa para quaisquer outras restrições em nomes qualificados.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


O qualificador deve ser coleção

O uso de um ponto de exclamação entre dois identificadores é específico para coleções. A causa e a solução desse erro são as seguintes:

•	Você usou um nome à esquerda do ponto de exclamação (!) que não é o nome de uma coleção.

Se o nome for considerado para representar uma coleção, certifique-se de que a ortografia do nome esteja correta. Observe que o ponto de exclamação é também o caractere de declaração de tipo para o tipo de dados Single. Se o nome em questão não for considerado como uma coleção, talvez o caractere de declaração de tipo ! anexado a um nome de variable tenha sido concatenado com outro nome.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


O intervalo não tem valores

Há limitações no modo como você pode especificar o número de elementos em uma matriz. A causa e a solução desse erro são as seguintes:

•	Você especificou os limites da matriz incorretamente. Por exemplo, os seguintes intervalos são inválidos:

Dim MyArray(10 To -5)	' Ordem decrescente não permitida.

0	Dim MyArray(0 To 0)	' Nenhum elemento na matriz.

Verifique se a sintaxe está correta. Por exemplo, o seguinte intervalo é válido:

Dim MyArray(-5 To 10)

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


RSet permitida apenas em seqüências

RSet é usada para alinhar à direita os dados da seqüência dentro de seqüências de comprimento fixo ou variável. A causa e a solução desse erro são as seguintes:

•	Você tentou usar a instrução RSet em uma variável que não é uma seqüência.

Se apropriado, tente converter a variável em uma seqüência. Caso contrário, não use RSet.

Observação   Embora a instrução LSet possa ser usada para atribuir os elementos de uma variável de tipo definido pelo usuário aos elementos de um tipo definido pelo usuário diferente, mas compatível, essas atribuições não são recomendadas porque não podem ser garantidas como portáveis.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Erro em tempo de execução <número>:

Este erro é definido pelo usuário e tem a seguinte causa e solução:

•	Foi gerado um erro que não corresponde a um erro do Visual Basic.

Trate o erro conforme indicado na documentação do objeto ou da biblioteca de objetos que gerou o erro.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Seqüência de caracteres muito longa ou complexa

Os recursos de correspondência de padrão do Visual Basic são limitados. A causa e a solução desse erro são as seguintes:

•	A seqüência de pesquisa é muito longa ou a combinação das especificações de caractere curinga não podem ser compreendidas.

Reduza o comprimento ou a complexidade da seqüência de pesquisa e repita a pesquisa.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Uma seqüência de caracteres de pesquisa deve ser especificada

Você deve especificar uma seqüência de pesquisa. A causa e a solução desse erro são as seguintes:

•	Você tentou executar uma operação de pesquisa sem uma seqüência para comparação.

Você deve especificar a seqüência de pesquisa. Embora você possa especificar uma seqüência de comprimento zero ("") como uma seqüência de substituição, uma seqüência de comprimento zero não tem significado como uma seqüência de pesquisa.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


O texto de pesquisa não foi encontrado

Nenhum texto de pesquisa foi encontrado. As causas e soluções desse erro são as seguintes:

•	Não há um texto correspondente entre o ponto inicial e final do escopo de pesquisa especificado.

Você pode ampliar o escopo da pesquisa para continuar pesquisando.

•	Você não forneceu um colchete esquerdo ao usar uma expressão de correspondência padrão

Forneça o colchete esquerdo.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Seek failed: can't read/write from the disk
A pesquisa falhou: não é possível ler/gravar no disco

As instruções Seek são transportadas diretamente para o disco. As causas e soluções desse erro são as seguintes:

•	Você tentou ler a partir de um disco ou arquivo que é protegido contra gravação, somente leitura ou está bloqueado.

Remova o atributo de proteção contra gravação ou altere o atributo somente leitura ou o bloqueio. Observe que se o arquivo estiver bloqueado por outro processo, não é possível remover o bloqueio.

•	O arquivo torna-se não disponível, por exemplo, se um disco removível tiver sido alterado fisicamente.

Se o arquivo tiver sido movido para outro disco, acesse-o a partir desse disco. Caso contrário, você não poderá acessar o arquivo.

•	Você tentou ler a partir de um arquivo de projeto, uma biblioteca de objetos ou uma biblioteca de tipos, mas o arquivo foi corrompido.

Obtenha uma nova cópia da biblioteca ou do arquivo de projeto.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Select Case sem End Select

Cada construção Select Case deve ser terminada com uma instrução End Select. A causa e a solução desse erro são as seguintes:

•	Você usou uma instrução Select Case sem uma instrução End Select correspondente.

Verifique se há uma estrutura Select Case...End Select com correspondência incorreta dentro de uma estrutura Select Case...End Select externa. Se você tiver instruções Select Case aninhadas, cada uma deverá ter um End Select correspondente

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Expressão de inspeção de variáveis selecionada inválida

Nem sempre é possível selecionar uma expressão de inspeção de variáveis válida. As causas e soluções desse erro são as seguintes:

•	Você escolheu o comando Inspecionar variáveis, mas a expressão selecionada não é uma expressão válida. Por exemplo, você não pode inspecionar um comentário ou uma chamada de procedimento Sub.

Selecione uma expressão que seja válida ou escolha Add Watch e digite uma expressão válida.

•	A expressão de inspeção de variáveis deve ter sintaxe de código correspondente à localidade do projeto que define a expressão que está sendo inspecionada.

Grave novamente uma expressão que seja válida para a localidade.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Set Next Statement só pode ser aplicado a linhas executáveis dentro do procedimento atual.
Set Next Statement só pode ser aplicado a linhas executáveis dentro do procedimento atual

Você pode escolher o comando Set Next Statement para indicar onde um programa suspenso deve começar quando a execução é continuada. As causas e soluções desse erro são as seguintes:

•	Quando você escolheu o comando, o cursor estava em uma linha que não continha uma instrução executável.

Posicione o cursor em uma linha com uma instrução executável e tente novamente. Declarações, rótulos de linha e comentários não são executáveis, portanto, as linhas somente com declarações, rótulos e comentários não podem ser os destinos do comando Set Next Statement.

•	Quando você escolheu o comando, o cursor estava em uma linha fora do procedimento que estava em execução no momento.

Posicione o cursor em uma linha dentro do procedimento que estiver em execução no momento.


SHARE.EXE obrigatório

O programa share.exe deve estar sendo executado ao iniciar o Visual Basic. A causa e a solução desse erro são as seguintes:

•	Você não iniciou o share.exe antes de iniciar o Visual Basic.

Feche seu aplicativo, inicie o share.exe e, em seguida, reinicialize o aplicativo. Para evitar este problema futuramente, posicione uma chamada de share.exe no arquivo autoexec.bat para que share.exe inicie automaticamente quando você ligar sua máquina.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Biblioteca ou projeto especificado já referenciado

A caixa de diálogo Add References exibe bibliotecas e projetos referenciados. A causa e a solução desse erro são as seguintes:

•	Você escolheu o botão Procurar na caixa de diálogo Add References e, em seguida, selecionou uma biblioteca de tipos ou projeto que já foi listado na seção Available References da caixa de diálogo Add References.

Para tornar um projeto ou biblioteca de tipos parte de seu projeto, exiba a caixa de diálogo References e certifique-se de que o nome da biblioteca de tipos ou do projeto esteja marcado.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Instrução inválida dentro do bloco Type

Somente nomes de elementos, suas cláusulas As type e comentários são permitidos dentro de um bloco de instrução Type...End Type. A causa e a solução desse erro são as seguintes:

•	Você posicionou uma instrução inválida em uma definição de tipo definido pelo usuário.

Remova qualquer texto que não seja um comentário, um nome de elemento ou uma cláusula As type.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Instrução inválida fora do bloco Type

A sintaxe para declarar variáveis fora de um bloco de instrução Type...End Type é diferente da sintaxe para declarar os elementos do tipo definido pelo usuário. As causas e soluções desse erro são as seguintes:

•	Você tentou declarar uma variável fora de um bloco Type...End Type ou fora de uma instrução.

Quando declarar uma variável com uma cláusula As fora de um bloco Type...End Type, use uma das instruções de declaração, Dim, ReDim, Static, Public ou Private. Por exemplo, a primeira declaração de MyVar no código a seguir gera este erro; a segunda e terceira declarações de MyVar são válidas:

MyVar As Double	' Sintaxe de declaração inválida.

Dim MyVar As Double

Type AType

MyVar As Double	' Esta é uma sintaxe de declaração válida

End Type	' porque está dentro de um bloco Type.

•	Você usou uma instrução End Type sem uma instrução Type correspondente.

Verifique se há uma End Type não correspondida e anteceda seu bloco com uma instrução Type ou exclua a instrução End Type se não for necessária.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Instrução muito complexa

O Visual Basic não consegue analisar esta instrução. As causas e soluções desse erro são as seguintes:

•	Sua instrução não pode ser analisada devido a sua complexidade.

Tente dividir a instrução em vários componentes menores ou substitua cláusulas condicionais complexas por uma combinação de operadores lógicos e instruções If...Then...Else.

•	Sua instrução ou função usa muitas chamadas de função aninhadas.

Faça chamadas de função anteriores e atribua os resultados a variáveis específicas. Em seguida, use as variáveis na instrução que está causando o erro de complexidade.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Instruções ou rótulos inválidos entre Select Case e a primeira Case

Você não pode posicionar nada além de um comentário entre a instrução Select Case e a primeira cláusula Case. A causa e a solução desse erro são as seguintes:

•	Você posicionou uma instrução entre Select Case e sua primeira cláusula Case. Por exemplo:

Select Case SomeVar

' Este é um comentário válido.

Stop	' Mesmo uma instrução Stop é inválida aqui.

Case SomeValue

. . .

End Select

A instrução Select Case deve ser imediatamente seguida por sua primeira instrução Case. Se a expressão interveniente for um comentário, anteceda-a com um delimitador de comentário ('). Caso contrário, coloque a expressão onde ela pertence ou a exclua.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Erro de sintaxe

Não é possível ao Visual Basic determinar a ação a ser tomada. As causas e soluções desse erro são as seguintes:

•	Uma palavra-chave ou argumento contém erro de ortografia.

As palavras-chave e os nomes dos argumentos nomeados devem corresponder exatamente àqueles em suas especificações de sintaxe. Verifique a Ajuda on-line e, em seguida, corrija a ortografia.

•	A pontuação está incorreta.

Por exemplo, quando você omite argumentos opcionais posicionalmente, deve substituir uma vírgula (,) como um espaço reservado para o argumento omitido.

•	Um procedimento não está definido.

Verifique a ortografia do nome do procedimento.

•	Você tentou especificar Optional e ParamArray na mesma declaração de procedimento.

Um argumento ParamArray não pode ser Optional. Escolha um e exclua o outro.

•	Você tentou definir um procedimento de evento com um parâmetro Optional ou ParamArray.

Remova a palavra-chave Optional ou ParamArray da especificação do parâmetro.

•	Você tentou usar um argumento nomeado em uma instrução RaiseEvent.

Os eventos não dão suporte para argumentos nomeados.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


A DLL ou EXE de compatibilidade binária contém um tipo Implements cuja definição não pode ser encontrada

Se você tiver um servidor Binário compatível que implemente uma interface que está contida em outra DLL (Dynamic Link Library, biblioteca de vínculo dinâmico), deve tomar cuidado quando compilá-lo. A causa e a solução desse aviso são as seguintes:

•	A outra DLL foi recompilada como Projeto compatível que altera a interface GUID. Como não é uma alteração visível, este pode ser um erro inesperado. Isto também pode ocorrer se alguém fornecer uma DLL de Projeto compatível para referência.

Basicamente, este erro ocorre quando a DLL ou EXE compatível binária do projeto tem um typelib com uma referência interrompida.  As referências interrompidas podem ocorrer quando um typelib referido é sobrescrito por outro arquivo (como uma DLL/EXE recompilada), quando você exclui o arquivo typelib ou quando dá lugar a um typelib de referência em uma máquina, mas não move ou registra o typelib referido.

Uma correção possível é obter uma cópia do typelib referido em sua máquina e registrá-lo. Você não conseguirá usar o antigo porque ele foi sobrescrito na recompilação. Se isto não produzir efeito, tudo o que pode ser feito é parar de usar a DLL/EXE como sua versão compatível binária.


A DLL ou EXE de compatibilidade binária contém um tipo de parâmetro ou tipo retornado cuja definição não pode ser encontrada

Se você tiver um servidor Binário compatível com um tipo de parâmetro ou retornado que esteja contido em outra DLL, seja cuidadoso quando recompilá-lo. A causa e a solução desse aviso são as seguintes:

•	Quando você define a Compatibilidade binária em um projeto e, em seguida, recompila o projeto, a Compatibilidade de projeto é definida automaticamente, alterando a GUID interna da interface. Como não é uma alteração visível, este pode ser um erro inesperado.

Basicamente, este erro ocorre quando a DLL ou EXE compatível binária do projeto tem um typelib com uma referência interrompida.  As referências interrompidas podem ocorrer quando um typelib referido é sobrescrito por outro arquivo (como uma DLL/EXE recompilada), quando você exclui o arquivo typelib ou quando dá lugar a um typelib de referência em uma máquina, mas não move ou registra o typelib referido.

Uma correção possível é obter uma cópia do typelib referido em sua máquina e registrá-lo. Você não conseguirá usar o antigo porque ele foi sobrescrito na recompilação. Se isto não produzir efeito, tudo o que pode ser feito é parar de usar a DLL/EXE como sua versão compatível binária.


A edição pode tornar o módulo de objeto incompatível com o componente ActiveX compatível anteriormente especificado

Se um componente ActiveX compatível já existir como um arquivo executável ou dynamic-link library (DLL, biblioteca de vínculo dinâmico) distribuído anteriormente, você deve tomar cuidado para não alterar sua interface. A causa e a solução desse aviso são as seguintes:

•	Você está tentando editar o código de um módulo objeto que já está representado por um arquivo executável.

Se você fizer alterações que afetam a interface para o objeto, a classe não será de compatibilidade ascendente com a versão anterior e, portanto, não será possível usar a nova versão no lugar da antiga para código compilado.

No Visual Basic, o nome do componente ActiveX compatível aparece na caixa de diálogo exibida quando você escolhe Project Options no menu Ferramentas.

Importante   Para aceitar a edição, clique em OK na caixa de diálogo de mensagem de erro. Para desfazer a edição, clique no botão Cancelar.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


A região especificada foi pesquisada

Quando você clica nos botões Find Next e Replace na caixa de diálogo Replace, o número total de substituições não é especificado. A causa e o efeito dessa condição são os seguintes:

•	Ao fazer uma operação de pesquisa e substituição, você pode especificar a região a ser abrangida — seleção, procedimento, módulo ou projeto.

Se uma região for selecionada, ela será a região de pesquisa padrão. Se nenhuma região for selecionada, o módulo atual será a região de pesquisa padrão. Para alterar o escopo de uma pesquisa, selecione uma opção diferente na caixa de diálogo Replace.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


A região especificada foi pesquisada e foi feita 1 substituição

Quando você clica no botão Substituir tudo da caixa de diálogo Replace, esta mensagem especifica o número total de substituições. A causa e o efeito dessa condição são os seguintes:

•	Durante a operação de pesquisa e substituição, somente uma ocorrência do texto especificado foi encontrada e a substituição foi feita. Você pode especificar a região a ser abrangida — seleção, procedimento, módulo ou projeto.

Se uma região for selecionada, ela será a região de pesquisa padrão. Se nenhuma região for selecionada, o módulo atual será a região de pesquisa padrão. Para alterar o escopo de uma pesquisa, selecione uma opção diferente na caixa de diálogo Replace.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


A região especificada foi pesquisada e as substituições foram feitas

Quando você clica no botão Substituir tudo da caixa de diálogo Replace, esta mensagem especifica o número total de substituições. A causa e o efeito dessa condição são os seguintes:

•	Ao fazer uma operação de pesquisa e substituição, você pode especificar a região a ser abrangida — seleção, procedimento, módulo ou projeto.

Se uma região for selecionada, ela será a região de pesquisa padrão. Se nenhuma região for selecionada, o módulo atual será a região de pesquisa padrão. Para alterar o escopo de uma pesquisa, selecione uma opção diferente na caixa de diálogo Replace.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


O arquivo .vbp para este projeto contém uma identificação de referência de biblioteca inválida ou corrompida

Quando você salva um projeto para o qual uma referência foi selecionada a partir da caixa de diálogo References, uma entrada é criada no arquivo .vbp do projeto (chamado de arquivo .mak em versões anteriores do Visual Basic). Por exemplo, a entrada para um objeto de acesso de dados é:

Reference=*\G{00025E01-0000-0000-C000-000000000046}#0.0#0#C:\WINDOWS\SYSTEM\DAO2516.DLL#Microsoft

Biblioteca de Objetos DAO 2.5

Este erro ocorre quando essa referência foi editada ou corrompida. A causa e a solução desse erro são as seguintes:

•	Uma referência no arquivo .vbp tornou-se inválida.

Exclua a linha incorreta do arquivo .vbp e verifique a biblioteca de objetos apropriada na caixa de diálogo References no menu Ferramentas. Em seguida, salve o projeto e as informações corretas serão inseridas no arquivo .vbp.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Este componente não provoca eventos

Um procedimento de evento deve corresponder a um evento que pode ser provocado por um objeto. A causa e a solução desse erro são as seguintes:

•	Você gravou um procedimento de evento para um objeto que não provoca eventos.

Você não pode gravar um procedimento de evento que não corresponda a um evento.

•	Você tentou usar WithEvents em uma classe que não provoca eventos.

Não é possível usar WithEvents em uma classe que não provoca eventos.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Excesso de argumentos

Um procedimento pode ter apenas 60 argumentos. A causa e a solução desse erro são as seguintes:

•	Você especificou mais de 60 argumentos.

Se você precisar especificar mais argumentos, defina um tipo definido pelo usuário para coletar múltiplos argumentos de tipos diferentes ou use um ParamArray como o argumento final e passe valores múltiplos para ele. Você também pode passar múltiplos argumentos colocando-os em uma matriz.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Excesso de dimensões

Matrizes podem ter no máximo 60 dimensões. As causas e soluções desse erro são as seguintes:

•	Você tentou declarar uma matriz com mais de 60 dimensões.

Reduza o número de dimensões.

•	Sua declaração de matriz está dentro dos limites especificados, mas não há memória suficiente para realmente criar a matriz.

Libere mais memória ou reduza o número de dimensões. Se for uma matriz do tipo Variant ou uma matriz contida dentro de uma Variant, será possível criar a matriz com o mesmo número de dimensões declarando-a novamente com o tipo de dados de seus elementos. Por exemplo, se contiver somente números inteiros, declará-la como uma matriz do tipo Integer usará menos memória do que se cada elemento for uma Variant.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Excesso de continuações de linha

Há um limite para o número de linhas que você pode associar com caracteres de continuação de linha. A causa e a solução desse erro são as seguintes:

•	Seu código tem mais de 25 linhas físicas associadas com os caracteres de continuação de linha ou mais de 24 caracteres de continuação de linha consecutivos em uma única linha.

Torne algumas das linhas constituintes fisicamente mais longas para reduzir o número de caracteres de continuação de linha necessários ou divida a construção em mais de uma instrução.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Excesso de variáveis locais não-estáticas

As variáveis locais não-estáticas são variáveis que estão definidas dentro de um procedimento e são reinicializadas sempre que o procedimento é chamado. A causa e a solução desse erro são as seguintes:

•	A soma dos requisitos de memória das variáveis locais não-estáticas e das variáveis temporárias geradas pelo compilador para este procedimento excede 32K.

Declare algumas das variáveis com a instrução Static conforme apropriado. As variáveis Static retêm seus valores entre as chamadas de procedimento porque são alocadas a partir de recursos de memória diferentes de variáveis não-estáticas.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Excesso de variáveis a nível de módulo

As variáveis a nível de módulo são aquelas declaradas na seção Declarações de um módulo, antes dos procedimentos do módulo. A causa e a solução desse erro são as seguintes:

•	A soma dos requisitos de memória para todas as variáveis a nível de módulo neste módulo excede 64K.

Este é o limite de memória para este módulo. Se apropriado, você pode declarar algumas das variáveis como Public em outro módulo, ou se algumas variáveis a nível de módulo forem usadas apenas em um procedimento, poderá declará-las dentro desse procedimento. Se você declarou variáveis a nível de módulo porque deseja que elas retenham seus valores entre as chamadas de procedimento, pode, em vez disso, declará-las como Static dentro do procedimento no qual elas foram referidas.

Observação   O espaço disponível pode variar entre sistemas operacionais.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


O caractere de declaração de tipo não corresponde ao tipo de dados declarado

O tipo de dados de uma variável não pode ser alterado anexando o caractere de declaração de tipo para outro tipo. A causa e a solução desse erro são as seguintes:

•	Você declarou uma variável de um tipo específico, fez referência a uma variável do mesmo nome no mesmo escopo e, em seguida, anexou um caractere de declaração de tipo inconsistente.

Para alterar o tipo de dados atribuído a uma variável, declare a variável como uma Variant. Se você simplesmente anexou um caractere de declaração de tipo incorreto, exclua ou altere-o.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Caractere de declaração de tipo não permitido

Enquanto o uso de caracteres de declaração de tipo é válido no Visual Basic, alguns tipos de dados (incluindo Byte, Boolean, Date, Object e Variant) não têm caracteres de declaração de tipo associados. As causas e soluções desse erro são as seguintes:

•	Você tentou usar um caractere de declaração de tipo na declaração de uma variável que usa a cláusula As, por exemplo, com Dim, Static, Public, etc.

Remova o caractere de declaração de tipo ou remova a cláusula As.

•	Você tentou usar um caractere de declaração de tipo em referência a uma variável que foi declarada implicitamente sem um caractere de declaração de tipo:

MyVar = 20	' Declaração implícita.

MyVar% = 25	' Gera um erro.

Remova o caractere de declaração de tipo ou declare novamente a variável original.

Observação   Se uma declaração de variável explícita contém um caractere de declaração de tipo, a inclusão do caractere é opcional em referências posteriores. Por exemplo:

Dim MyStr$

MyStr = "Como foi declarada explicitamente, o $ é opcional."

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Caractere de declaração de tipo obrigatório

A necessidade de usar caracteres de declaração de tipo depende da forma da declaração do identificador. A causa e a solução desse erro são as seguintes:

•	Uma variável que originalmente foi declarada implicitamente com caractere de declaração de tipo foi referida sem um caractere de declaração de tipo. Por exemplo:

MyStr$ = "Declaração implícita"

MyStr = "Tentando se referir a MyStr$, mas ocorre erro" _

0	 & "em chamá-lo de MyStr."

Torne a declaração explícita ou adicione o caractere de declaração de tipo a referências mais recentes.

Observação   Se uma declaração de variável explícita contém um caractere de declaração de tipo, a inclusão do caractere é opcional em referências posteriores. Por exemplo:

Dim MyStr$

MyStr = "Como foi declarada explicitamente, o $ é opcional."

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Type mismatch: array or user-defined type expected
Tipos incompatíveis: esperava-se matriz ou tipo definido pelo usuário

O tipo de um argumento ou parâmetro inclui se é ou não uma matriz ou um tipo definido pelo usuário. A causa e a solução desse erro são as seguintes:

•	Seu argumento especificou um elemento único de uma matriz ou tipo definido pelo usuário ou uma variável, literal ou constante simples. No entanto, está sendo passado para um parâmetro que espera uma matriz completa ou tipo definido pelo usuário.

Altere o argumento ou a definição do parâmetro.

•	Seu argumento especificou uma matriz ou tipo definido pelo usuário, mas não era do mesmo tipo que o parâmetro.

Passe uma matriz do tipo esperado ou altere a definição da declaração de parâmetro.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Não é possível ler a partir do disco

Ocorre um problema geral ao ler a partir de um disco. As causas e soluções desse erro são as seguintes:

•	A porta da unidade de disco não está fechada corretamente.

Se o disco for removível, verifique a porta da unidade. Feche-a corretamente, se necessário.

•	O disco pode estar inserido de modo invertido.

Insira o disco novamente com o lado certo para cima.

•	O disco pode não estar formatado corretamente.

Formate o disco novamente se você estiver disposto a perder os dados contidos nele atualmente.

•	Você está tendo problemas na rede.

Tente reinicializar sua rede.

•	Você posicionou um disco de uma determinada densidade em uma unidade que não pode fazer sua leitura.

Use uma unidade diferente ou copie o material para um disco que possa ser lido em sua unidade.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Não é possível gravar no disco

Ocorre um problema geral ao gravar em um disco. As causas e soluções desse erro são as seguintes:

•	A porta da unidade de disco não está fechada corretamente.

Se o disco for removível, verifique a porta da unidade. Feche-a corretamente, se necessário.

•	O disco pode estar inserido de modo invertido.

Insira o disco novamente com o lado certo para cima.

•	O disco pode não estar formatado corretamente.

Formate o disco novamente se você estiver disposto a perder os dados contidos nele atualmente.

•	Você está tendo problemas na rede.

Tente reinicializar sua rede.

•	Você posicionou um disco de uma determinada densidade em uma unidade que não pode fazer sua gravação.

Use uma unidade diferente ou copie o material para um disco que possa ser lido em sua unidade.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Erro inesperado; contate o Suporte ao Produto Microsoft

Esta condição pode ou não ser séria. A causa e a solução desse erro são as seguintes:

•	Ocorreu um erro imprevisível no aplicativo host ou no Visual Basic.

Você não precisa considerar este erro como sério. No entanto, deve anotar o número do erro e relatá-lo ao Suporte ao Produto Microsoft.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Colchetes não correspondentes na seqüência de pesquisa

Um colchete de abertura deve ter um colchete de fechamento correspondente. A causa e a solução desse erro são as seguintes:

•	Você abriu um par de colchetes em uma seqüência de pesquisa, mas não o fechou com um colchete de fechamento correspondente.

Coloque um colchete de fechamento no lugar apropriado.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Idioma de projeto não reconhecido

Atualmente este aplicativo não dá suporte à localidade de código especificada para o projeto a ser carregado. As causas e soluções desse erro são as seguintes:

•	O projeto foi criado em um sistema que suporta a localidade de código, mas foi movido para um sistema onde essa localidade de código não é reconhecida. Por exemplo, o ole2nls.dll na máquina atual pode ser uma versão que não reconheça a localidade de código.

Instale a dynamic-link library (DLL, biblioteca de vínculo dinâmico) correta para o sistema atual.

•	A biblioteca de objetos correta para o projeto não foi encontrada.

Certifique-se de que as bibliotecas de objetos corretas estejam disponíveis, verificando, por exemplo, se o caminho inclui seus diretórios.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Tipo definido pelo usuário não pode ser passado por ByVal

Tipos definidos pelo usuário podem ser passados somente por referência (o padrão), não por valor. O erro pode não ser relatado até que a chamada seja feita. A causa e a solução desse erro são as seguintes:

•	Você colocou uma palavra-chave ByVal na definição de um parâmetro que representava um tipo definido pelo usuário.

Remova a palavra-chave ByVal. Para evitar que as alterações sejam propagadas de volta para o chamador, use Dim para uma variável temporária do tipo e passe a variável temporária para o procedimento.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Tipo definido pelo usuário não definido

Você pode criar seus próprios tipos de dados no Visual Basic, mas eles devem ser definidos primeiramente em uma instrução Type...End Type ou em uma biblioteca de objetos ou biblioteca de tipos devidamente registrada. As causas e soluções desse erro são as seguintes:

•	Você tentou declarar uma variável ou argumento com um tipo de dados não definido ou especificou uma classe ou nome de objeto desconhecido.

Use a instrução Type em um módulo para definir um novo tipo de dados. Se você estiver tentando criar uma referência para uma classe, a classe deve ser visível para o projeto. Se fizer referência a uma classe em seu programa, deve haver um módulo de classe do nome especificado em seu projeto. Verifique a ortografia do nome do tipo ou do nome do objeto.

•	O tipo que você deseja declarar está em outro módulo, mas foi declarado como Private.

Mova a definição do tipo para um módulo padrão onde possa ser Public.

•	O tipo é válido, mas a biblioteca de objetos ou de tipos na qual ele está definido não está registrada no Visual Basic.

Exiba a caixa de diálogo References e, em seguida, selecione a biblioteca de objetos ou biblioteca de tipos apropriada. Por exemplo, se você não marcar o Data Access Object na caixa de diálogo References, tipos como Database, Recordset e TableDef não serão reconhecidos e as referências a eles no código causarão este erro.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Tipo definido pelo usuário sem membros não permitido

Os tipos definidos pelo usuário devem ter pelo menos um elemento. A causa e a solução desse erro são as seguintes:

•	Você especificou um tipo definido pelo usuário vazio em uma definição Type...End Type.

Verifique se há na instrução Type delimitadores de comentário não intencionais.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Variável não definida

Você usa a instrução Option Explicit para evitar que seus módulos tenham variáveis não declaradas e para eliminar a possibilidade de criar, inadvertidamente, novas variáveis quando ocorrem erros tipográficos. A causa e a solução desse erro são as seguintes:

•	Você usou uma instrução Option Explicit para requerer a declaração explícita de variáveis, mas usou uma variável sem declará-la.

Declare explicitamente a variável ou altere a ortografia da variável para corresponder àquela da variável pretendida.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Variável ainda não criada neste contexto

Uma variável deve ser criada antes de poder ser exibida na janela Watch ou na janela Immediate e antes de poder ter valores atribuídos a ela na janela Immediate. As causas e soluções desse erro são as seguintes:

•	Você tentou exibir o valor de uma variável local que acabou de ser inserida em seu código antes de executar pelo menos um comando Single Step no modo de interrupção.

Entre no código para forçar a compilação da nova instrução.

•	Voce tentou exibir o valor de uma variável local que acabou de ser adicionada em um procedimento mais para baixo da cadeia de chamadas movendo para o procedimento através da caixa de diálogo Calls.

Você realmente deve retornar ao procedimento antes de poder exibir a variável em seu contexto.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Variable required. Can't assign to this expression
Variável obrigatória. Não é possível atribuir a esta expressão

Este erro geralmente ocorre quando você tenta atribuir um valor para algo que não pode aceitar a atribuição As causas e soluções desse erro são as seguintes: As causas e soluções desse erro são as seguintes:

•	Você tentou usar uma expressão numérica como um argumento para a função Len.

A função Len não aceita uma expressão numérica, um literal numérico ou uma expressão numérica binária, mas aceita uma seqüência ou variável numérica, uma expressão de seqüência ou uma variável de tipo definido pelo usuário.

•	Você usou uma chamada de função ou uma expressão como um argumento para Input #, Let, Get ou Put. Por exemplo, você pode ter usado um argumento que parece ser uma referência válida para uma variável de matriz, mas em vez disso é uma chamada para uma função do mesmo nome.

Input #, Let, Get e Put não aceitam chamadas de função como argumentos.

•	Você tentou atribuir um valor para um identificador anteriormente declarado como uma constante.

Escolha outro nome para o identificador.

•	Você tentou usar uma não-variável como um contador de loops em uma construção For...Next.

Use uma variável como contador.

•	Você tentou atribuir um valor para uma propriedade somente leitura ou para uma expressão que consiste em mais de uma variável (como X + Y). Uma atribuição posiciona um valor em um local de memória. A expressão especificada deve representar um local único gravável.

Grave a atribuição novamente para um nome de variável único que possa aceitar os dados.

•	Você tentou usar uma variável não declarada que está definida como uma constante em uma biblioteca de tipos.

Use um nome diferente para a variável ou declare-a explicitamente.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Warning: custom language settings not portable
Aviso: configurações de idioma personalizadas não portáveis

Nem todas as configurações de idioma são portáveis. A causa e a solução desse aviso são as seguintes:

•	Você usou uma definição de idioma personalizada em seu código.

Quando você escolhe uma definição de idioma/país personalizada para seu código, as convenções de idioma usadas em seu código correspondem àquelas definidas no Painel de controle de seu sistema. Você pode usar as configurações de localidade de código personalizadas, mas seu código pode não funcionar em outras localidades ou em outros sistemas com configurações diferentes. O aplicativo host analisa algumas seqüências baseadas nas configurações do Painel de controle da máquina na qual está sendo executada.

Se as configurações do Painel de controle na máquina de destino não forem iguais as da máquina na qual o código foi gravado, as seqüências analisadas por um aplicativo host não funcionarão, por exemplo, o código que depende de um separador decimal específico da localidade. Portanto, você não deve usar uma definição de idioma personalizada a menos que não pretenda enviar seu código para outros usuários. Se você pretende enviar seu código para outros usuários, selecione uma localidade predefinida.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Wend sem While

Toda instrução Wend deve ser precedida por uma instrução While correspondente. A causa e a solução desse erro são as seguintes:

•	Você usou uma instrução Wend sem uma instrução While precedente.

Verifique se há algum loop aninhado não terminado dentro do loop While...Wend que está causando o erro.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


While sem Wend

Uma instrução While é usada sem uma instrução Wend correspondente. A causa e a solução desse erro são as seguintes:

•	Você abriu uma construção While...Wend, mas não a fechou.

Verifique se há alguma estrutura While...Wend correspondida incorretamente dentro da estrutura While...Wend externa.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Objeto With deve ser de tipo definido pelo usuário, Object ou Variant

O bloco With...End With não pode ser usado com todos os tipos de variável. A causa e a solução desse erro são as seguintes:

•	Você tentou usar uma variável que não era do tipo Object, tipo definido pelo usuário ou tipo Variant contendo um objeto dentro de um bloco With.

Verifique se a ortografia do nome do objeto, tipo definido pelo usuário ou variável Variant está correta.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Número incorreto de dimensões

Você deve fazer referência a uma matriz com índices correspondentes ao mesmo número de dimensões que aparece na declaração da matriz. A causa e a solução desse erro são as seguintes:

•	Você fez referência a uma matriz com um número diferente de dimensões do que ela realmente contém. Por exemplo, a referência a uma matriz como X(2,4) (uma matriz com duas dimensões) quando tiver sido definida como Dim X(5) (uma matriz com uma), gera este erro.

Verifique a declaração da matriz e, na referência, inclua um índice para cada dimensão na declaração.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Esta ação redefinirá seu projeto, continuar mesmo assim?

Você pode editar o código no modo de interrupção, mas algumas edições impedem a continuação da execução. A causa e a solução desse erro são as seguintes:

•	Você tentou uma edição que impede a execução continuada, por exemplo, declarou uma variável estática.

Se você escolher Yes, a execução terminará e será possível editar seu código. Se escolher No, poderá continuar executando o código a partir do ponto no qual foi suspenso.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Você deve terminar o bloco #If com um #End If

#If é uma diretiva de compilação condicional. A causa e a solução desse erro são as seguintes:

•	Foi detectado um bloco #If não terminado por um #End If.

Adicione um #End If na posição apropriada.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Módulos de objeto particulares não podem ser usados nos módulos objeto públicos como parâmetros ou tipos retornados para procedimentos públicos, como membros de dados públicos ou campos públicos de tipos definidos pelo usuário.

A causa e a solução desse erro são as seguintes:

•	Você tentou usar um módulo objeto particular como um parâmetro em um módulo objeto público, ou como um tipo retornado para um procedimento público, membro de dados ou um campo público de um tipo definido pelo usuário, que não seja permitido.


Somente tipos públicos definidos pelo usuário especificados nos módulos objeto públicos podem ser usados como parâmetros ou tipos retornados para procedimentos públicos de módulos classe ou campos públicos de tipos definidos pelo usuário

A causa e a solução desse erro são as seguintes:

•	Você tentou usar um tipo público definido pelo usuário como um parâmetro ou tipo retornado para um procedimento público de um módulo de classe ou um campo de um tipo público definido pelo usuário. Somente tipos públicos definidos pelo usuário que estão definidos em um módulo objeto público podem ser usados desta maneira.


Biblioteca de objetos inválida ou com referências a definições de objeto que não foram encontradas

A causa e a solução desse erro são as seguintes:

•	Uma biblioteca de objetos contém referências a definições de objetos não encontradas ou, de alguma outra maneira, não é válida.


Argumento não opcional (Erro 449)

O número e os tipos de argumentos devem corresponder aos previstos. As causas e soluções desse erro são as seguintes:

•	Número incorreto de argumentos.

Forneça todos os argumentos necessários. Por exemplo, a função Left requer dois argumentos; o primeiro representando a seqüência de caracteres na qual está sendo operado e o segundo representando o número de caracteres a serem retornados do lado esquerdo da seqüência de caracteres. Como nenhum dos argumentos é opcional, ambos devem ser fornecidos.

•	O argumento omitido não é opcional.

Um argumento só pode ser omitido em uma chamada para um procedimento definido pelo usuário se tiver sido declarado como Optional na declaração de procedimento. Forneça o argumento na chamada ou declare o parâmetro Optional na definição.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Convenção de chamada de DLL incorreta (Erro 49)

Argumentos passados para uma biblioteca de vínculo dinâmico (DLL) ou rotina de recursos de código Macintosh devem corresponder exatamente aqueles esperados pela rotina. As convenções de chamada tratam de número, tipo e ordem dos argumentos. As causas e soluções desse erro são as seguintes:

•	Seu programa está chamando uma rotina em um DLL (no Windows) ou um recurso de código (no Macintosh) que tem passado o tipo incorreto de argumentos.

Certifique-se de que todos os tipos de argumentos estão em conformidade com aqueles especificados na declaração da rotina que está sendo chamada.

•	Seu programa está chamando uma rotina em um DLL (no Windows) ou um recurso de código (no Macintosh) que tem passado o número incorreto de argumentos.

Certifique-se de que esteja passando o mesmo número de argumentos indicado na declaração da rotina que está sendo chamada.

•	Seu programa está chamando uma rotina em um DLL, mas não está usando a convenção de chamada StdCall.

Se a rotina de DLL espera argumentos por valor, certifique-se de que ByVal esteja especificado para aqueles argumentos na declaração para a rotina.

•	Sua instrução Declare para um DLL do Windows inclui CDecl.

A palavra-chave CDecl aplica-se somente ao Macintosh.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Modo de arquivo incorreto (Erro 54)

As instruções usadas na manipulação do conteúdo do arquivo devem ser apropriadas para o modo no qual o arquivo foi aberto. As causas e soluções desse erro são as seguintes:

•	Uma instrução Put ou Get está especificando um arquivo seqüencial.

Put e Get podem se referir somente a arquivos abertos para acesso Random ou Binary.

•	Uma instrução Print # especifica um arquivo aberto para um modo de acesso diferente de Output ou Append.

Use uma instrução diferente para colocar dados no arquivo ou reabrir o arquivo em um modo apropriado.

•	Uma instrução Input # especifica um arquivo aberto para um modo de acesso diferente de Input.

Use uma instrução diferente para colocar dados no arquivo ou reabrir o arquivo no modo Input.

•	Você tentou gravar em um arquivo somente leitura.

Altere o status de leitura/gravação do arquivo ou não tente gravar nele.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Nome ou número de arquivo incorreto (Erro 52)

Ocorreu um erro ao tentar acessar o arquivo especificado. As causas e soluções desse erro são as seguintes:

•	Uma instrução refere-se a um arquivo com um número de arquivo ou nome de arquivo que:

•	Não está especificado na instrução Open ou foi especificado em uma instrução Open, mas desde então foi fechado.

Especifique o nome do arquivo em uma instrução Open. Observe que se você chamou a instrução Close sem argumentos, pode ter fechado, inadvertidamente, todos os arquivos atualmente abertos, invalidando todos os números de arquivo.

•	Fora do intervalo de números de arquivo (1 – 511).

Se o seu código estiver gerando números de arquivo em algoritmo, certifique-se de que os números sejam válidos.

•	Há um nome ou número inválido.

Os nomes de arquivo devem estar em conformidade com as convenções do sistema operacional, bem como com as convenções de nomenclatura de arquivo do Basic. No Microsoft Windows, use as seguintes convenções para nomear arquivos e diretórios:

•	O nome de um arquivo ou diretório pode ter duas partes: um nome e uma extensão opcional. As duas partes são separadas por um ponto, por exemplo, meuarq.nov.

•	O nome pode conter até 255 caracteres.

•	O nome deve iniciar com uma letra ou número. Pode conter quaisquer caracteres maiúsculos ou minúsculos (nomes de arquivo não coincidem maiúsculas/minúsculas), exceto os seguintes caracteres: aspas ("), apóstrofo ('), barra (/), barra invertida (\), dois-pontos (:) e barra vertical (|).

•	O nome pode conter espaços.

•	Os seguintes nomes são reservados e não podem ser usados para arquivos ou diretórios: CON, AUX, COM1, COM2, COM3, COM4, LPT1, LPT2, LPT3, PRN e NUL. Por exemplo, se você tentar nomear um arquivo PRN em uma instrução Open, a impressora padrão simplesmente se tornará o destino para instruções Print # e Write # direcionadas para o número de arquivo especificado na instrução Open.

•	Os seguintes exemplos são nomes de arquivo válidos para o Microsoft Windows:

LETTER.DOC

My Memo.Txt

BUDGET.92

12345678.901

Second Try.Rpt

•	No Macintosh, um nome de arquivo pode incluir qualquer caractere, exceto dois-pontos (:), e pode conter espaços. Caracteres nulos (Chr(0)) não são permitidos em nomes de arquivo.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Comprimento de registro incorreto (Erro 59)

O comprimento de uma variável de registro em uma instrução Get ou Put deve ser o comprimento especificado em sua instrução Open correspondente. As causas e soluções desse erro são as seguintes:

•	O comprimento da variável de registro difere do comprimento especificado na instrução Open correspondente.

Certifique-se de que a soma dos tamanhos das variáveis de comprimento fixo no tipo definido pelo usuário que define o tipo da variável de registro seja igual ao valor declarado na cláusula Len da instrução Open. No exemplo a seguir, considere RecVar como uma variável do tipo apropriado. Você pode usar a função Len para especificar o comprimento da seguinte forma:

Open MyFile As #1 Len = Len(RecVar)

•	A variável em uma instrução Put é (ou inclui) uma seqüência de caracteres de comprimento variável.

Como um descritor de 2 bytes sempre é adicionado a uma seqüência de caracteres de comprimento variável colocada em um arquivo de acesso randômico com Put, tal seqüência deve ter no mínimo 2 caracteres a menos que o comprimento de registro especificado na cláusula Len do argumento Open.

•	A variável em uma instrução Put é (ou inclui) uma Variant.

Assim como as seqüências de caracteres de comprimento variável, os tipos de dados Variant também requerem um descritor de 2 bytes. As variantes que contêm seqüências de caracteres de comprimento variável requerem um descritor de 4 bytes. Portanto, para seqüências de caracteres de comprimento variável em uma Variant, a seqüência de caracteres deve ter pelo menos 4 bytes a menos que o comprimento de registro especificado na cláusula Len.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Número de registro incorreto (Erro 63)

Ocorreu um erro durante a tentativa de acesso ao arquivo. A causa e a solução desse erro são as seguintes:

•	O número do registro em uma instrução Put ou Get é menor ou igual a zero.

Verifique os cálculos usados ao gerar o número do registro. Certifique-se de que a ortografia das variáveis que contêm o número do registro ou usadas no cálculo dos números de registro está correta. Um nome de variável com ortografia incorreta é declarado implicitamente e inicializado como zero, a menos que você tenha colocado apropriadamente Option Explicit no módulo.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Não é possível criar arquivo temporário necessário (Erro 322)

A criação de um arquivo executável requer a criação de arquivos temporários. A causa e a solução desse erro são as seguintes:

•	A unidade que contém o diretório especificado pela variável de ambiente TEMP está cheia.

Exclua arquivos da unidade cheia ou especifique uma unidade diferente na variável de ambiente TEMP.

•	A variável de ambiente TEMP especifica uma unidade ou diretório inválido ou somente leitura.

Especifique uma unidade válida para a variável de ambiente TEMP ou remova a restrição somente leitura da unidade ou diretório atualmente especificado.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Não é possível executar a operação solicitada (Erro 17)

Uma operação não pode ser executada se invalidar o estado atual do projeto. A causa e a solução desse erro são as seguintes:

•	A operação solicitada invalidaria o estado atual do projeto. Por exemplo, o erro ocorre se você usar a caixa de diálogo Referências para adicionar uma referência a um novo projeto ou biblioteca de objetos enquanto um programa está no modo de interrupção.

Pare a execução do código atual e, em seguida, repita a operação.

•	Foi feita uma tentativa de modificar de modo programático o código atualmente em execução. Por exemplo, seu código pode ter tentado ler o código de um arquivo em disco para um módulo atualmente em execução.

Embora você possa modificar os módulos no projeto enquanto eles estão realmente em execução, não é possível fazer modificações em um módulo em execução. Para fazer tais alterações, você deve parar a execução do módulo, fazer as inclusões ou alterações e, em seguida, reiniciar a execução.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Não é possível renomear com unidade diferente (Erro 74)

A instrução Name deve renomear o arquivo para a unidade atual. A causa e a solução desse erro são as seguintes:

•	Você tentou mover um arquivo para uma unidade diferente usando a instrução Name.

Use FileCopy para gravar o arquivo em uma outra unidade e, em seguida, exclua o arquivo antigo com uma instrução Kill.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Não é possível salvar o arquivo no diretório TEMP (Erro 735)

Muitas vezes os componentes precisam salvar informações temporárias no disco. A causa e a solução desse erro são as seguintes:

•	O componente não consegue localizar um diretório nomeado TEMP.

Crie um diretório nomeado TEMP e defina a variável de ambiente TEMP igual a seu caminho.

•	A unidade ou partição contendo o diretório TEMP não tem espaço suficiente para salvar as informações.

Libere espaço na unidade apagando arquivos desnecessários ou crie um diretório TEMP em outra partição e defina a variável de ambiente TEMP igual a seu caminho.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


A classe não suporta Automação (Erro 430)

Nem todos os objetos exibem uma interface de Automação. A causa e a solução desse erro são as seguintes:

•	A classe especificada na chamada de função GetObject ou CreateObject foi encontrada, mas não exibia uma interface de programabilidade.

Você não pode escrever código para controlar o funcionamento de um objeto a menos que ele tenha sido exibido para Automação. Verifique na documentação do aplicativo que criou o objeto se há limitações no uso de Automação com esta classe de objeto.

•	Você alterou um projeto de .dll para .exe, ou vice-versa. Se, por exemplo, você tiver um servidor .dll já compilado e registrado e, em seguida, alterar o tipo de projeto para .exe e recompilá-lo, o fato do .dll e .exe já estarem registrados em seu sistema impede a criação de qualquer um dos objetos. Você deve remover manualmente o registro do .dll ou .exe antigo para evitar o problema.

Isto é causado pela combinação de compatibilidade de projetos e pela alteração de um projeto de .exe para .dll. Na compatibilidade de projetos, o CLSID é preservado, mas não o IID. Como o CLSID é preservado, a classe acaba sendo registrada com dois servidores—um servidor em-processo e o servidor local. Quando uma ocorrência é criada, o servidor em-processo é escolhido. Quando ocorre a consulta da interface, o .dll não suporta o IID porque é novo.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Erro de bloqueio do recurso de código (Erro 455)

Este erro pode ocorrer somente no Macintosh. Quando você acessa um recurso de código, deve bloqueá-lo. A causa e a solução desse erro são as seguintes:

•	Foi feita uma chamada para um procedimento em um recurso de código. O recurso de código foi encontrado, mas ocorreu um erro ao tentar bloquear o recurso.

Verifique se há um erro retornado por Hlock, por exemplo, "Inválido no identificador vazio" ou "Inválido no bloco livre".

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Recurso de código não encontrado (Erro 454)

Este erro pode ocorrer somente no Macintosh. A causa e a solução desse erro são as seguintes:

•	Foi feita uma chamada para um procedimento em um recurso de código, mas o recurso de código não foi encontrado.

Verifique se o recurso está disponível e foi referido apropriadamente.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


A conexão com a biblioteca de tipos ou biblioteca de objetos do processo remoto foi perdida (Erro 442)

Durante o acesso remoto (ou seja, ao acessar um objeto que é parte de outro processo ou está em execução em outra máquina), a conexão com a biblioteca que contém as informações do objeto foi interrompida. A causa e a solução desse erro são as seguintes:

•	Você perdeu a conexão com a biblioteca de objetos ou biblioteca de tipos do processo remoto.

Para reconectar, siga as etapas a seguir:

1.	Reinicie o objeto Application.

2.	Na caixa de diálogo do erro em que você digitou este tópico da Ajuda, clique sobre OK para exibir a caixa de diálogo Referências.

3.	A referência perdida aparece com a palavra MISSING à esquerda.

4.	Remova a referência perdida.

5.	Na caixa de diálogo Referências, clique na caixa de seleção do objeto iniciado na etapa 1.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Erro de E/S do dispositivo (Erro 57)

Às vezes os dispositivos externos estão sujeitos a erros imprevisíveis. A causa e a solução desse erro são as seguintes:

•	Ocorreu um erro de entrada ou saída enquanto seu programa estava usando um dispositivo, como uma impressora ou unidade de disco.

Certifique-se de que o dispositivo esteja funcionando corretamente e, em seguida, repita a operação.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Dispositivo não disponível (Erro 68)

As causas e soluções desse erro são as seguintes:

•	O dispositivo que você está tentando acessar não está on-line ou não existe.

Verifique a energia para o dispositivo e os cabos que conectam seu computador ao dispositivo. Se você estiver tentando acessar uma impressora através de uma rede, certifique-se de que exista uma conexão lógica entre seu computador e a impressora, por exemplo, uma conexão associando LPT1 com a ID da impressora da rede.

•	Sua conexão de rede pode ter sido interrompida.

Reconecte-se à rede e tente a operação novamente.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Disco cheio (Erro 61)

As causas e soluções desse erro são as seguintes:

•	Não há espaço suficiente no disco para a conclusão de uma operação Print #, Write # ou Close.

Mova alguns arquivos para outro disco ou exclua alguns arquivos.

•	Não há espaço suficiente no disco para criar os arquivos requeridos.

Mova alguns arquivos para outro disco ou exclua alguns arquivos.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


O disco não está pronto (Erro 71)

As causas e soluções desse erro são as seguintes:

•	Não há disco na unidade especificada.

Insira um disco na unidade e repita a operação.

•	A porta da unidade especificada está aberta.

Feche a porta da unidade e repita a operação.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Divisão por zero (Erro 11)

A divisão por zero não é possível. A causa e a solução desse erro são as seguintes:

•	O valor de uma expressão que está sendo usada como um divisor é zero.

Verifique a ortografia das variáveis na expressão. Um nome de variável com ortografia incorreta pode criar implicitamente uma variável numérica que seja inicializada como zero. Verifique as operações anteriores em variáveis da expressão, especialmente aquelas passadas para o procedimento como argumentos a partir de outros procedimentos.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Erro ao carregar DLL (Erro 48)

Uma biblioteca de vínculo dinâmico (DLL) é uma biblioteca especificada na cláusula Lib de uma instrução Declare. As causas e soluções desse erro são as seguintes:

•	O arquivo não é um DLL executável.

Se o arquivo for um arquivo de texto de origem, deverá ser compilado e vinculado ao formulário de DLL executável.

•	O arquivo não é um DLL do Microsoft Windows.

Obtenha o DLL do Microsoft Windows equivalente do arquivo.

•	O arquivo está em um DLL anterior do Microsoft Windows que é incompatível com o modo de proteção do Microsoft Windows.

Obtenha uma versão atualizada do DLL.

•	O DLL faz referência a outro DLL que não está presente.

Obtenha o DLL referido e torne-o disponível para o outro DLL.

•	O DLL ou um dos DLLs referidos não está em um diretório especificado por seu caminho.

Mova o DLL para um diretório referido ou coloque seu diretório atual no caminho.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


O arquivo já existe (Erro 58)

As causas e soluções desse erro são as seguintes:

•	Este erro ocorre em tempo de execução quando o novo nome de arquivo, por exemplo, especificado em uma instrução Name, é idêntico a um nome de arquivo que já existe.

Especifique um novo nome de arquivo na instrução Name ou exclua o arquivo antigo antes de especificá-lo em uma instrução Name.

•	Você usou o comando Salvar como para salvar um projeto atualmente carregado, mas o nome do projeto já existe.

Use um nome de projeto diferente se você não quiser substituir o outro projeto.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


O arquivo já está aberto (Erro 55)

Às vezes um arquivo deve ser fechado antes de ocorrer uma operação Open ou qualquer outra operação. As causas e soluções desse erro são as seguintes:

•	Uma instrução Open do modo de saída seqüencial foi executada para um arquivo que já está aberto.

Você deve fechar um arquivo aberto para um tipo de acesso seqüencial antes de abri-lo para outro. Por exemplo, um arquivo aberto para Input deve ser fechado antes de ser aberto para Output.

•	Uma instrução, por exemplo, Kill, SetAttr ou Name, refere-se a um arquivo aberto.

Feche o arquivo antes de executar a instrução.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Arquivo não encontrado (Erro 53)

O arquivo não foi encontrado onde especificado. As causas e soluções desse erro são as seguintes:

•	Uma instrução, por exemplo, Kill, Name ou Open, refere-se a um arquivo que não existe.

Verifique a ortografia do nome do arquivo e a especificação do caminho.

•	Foi feita uma tentativa de chamar um procedimento em uma biblioteca de vínculo dinâmico (DLL) ou recurso de código Macintosh, mas o nome da biblioteca ou arquivo de recurso especificado na cláusula Lib da instrução Declare não foi encontrado.

Verifique a ortografia do nome do arquivo e a especificação do caminho.

•	No ambiente de desenvolvimento, este erro ocorre se você tentar abrir um projeto ou carregar um arquivo de texto que não existe.

Verifique a ortografia do nome do projeto ou nome do arquivo e da especificação do caminho.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Loop For não inicializado (Erro 92)

Contadores de loops For devem ser inicializados. A causa e a solução desse erro são as seguintes:

•	Você saltou para o meio de um loop For...Next.

Remova o salto para o loop. Não é recomendável colocar rótulos dentro de um loop For...Next.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Input após fim de arquivo (Erro 62)

Não é possível ler após a posição fim de arquivo. A causa e a solução desse erro são as seguintes:

•	Uma instrução Input # ou Line Input # está lendo um arquivo no qual todos os dados foram lidos ou um arquivo vazio.

Use a função EOF imediatamente antes da instrução Input # para detectar o fim de arquivo.

•	Você usou a função EOF com um arquivo aberto para acesso Binary.

EOF funciona somente com arquivos abertos para acesso Input seqüencial. Use Seek e Loc com arquivos abertos para acesso Binary.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Erro interno (Erro 51)

Certifique-se de que este erro não foi gerado pela instrução Error ou pelo método Raise. A causa e a solução desse erro são as seguintes:

•	Ocorreu um mau funcionamento interno no Visual Basic.

A menos que esta chamada tenha sido gerada pela instrução Error ou pelo método Raise, entre em contato com o Serviço de Suporte ao Produto Microsoft para relatar as condições sob as quais a mensagem apareceu.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Formato inválido da Área de transferência (Erro 460)

A Área de transferência aceita dados somente em determinados formatos especificados. A causa e a solução desse erro são as seguintes:

•	Você tentou colocar dados de um componente na Área de transferência, mas os dados estão em um formato incompatível com a Área de transferência.

Consulte a documentação do componente para determinar se é possível usar a Área de transferência para transferir dados do componente.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Formato de arquivo inválido (Erro 321)

Os arquivos em disco geralmente têm dados armazenados em formatos patenteados. A causa e a solução desse erro são as seguintes:

•	Você tentou carregar um arquivo para um componente, mas o formato dos dados do arquivo era incompatível com o componente.

Consulte a documentação do componente para determinar o formato apropriado para os dados do arquivo em disco e se o componente fornece suporte para converter de um formato para outro.

•	Você tentou salvar dados do componente para um arquivo, mas o formato dos dados era incompatível com o formato do arquivo.

Consulte a documentação do componente para determinar se fornece suporte para converter de um formato para outro.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Ordinal inválido (Erro 452)

Sua chamada para uma biblioteca de vínculo dinâmico (DLL) indicou a utilização de um número em vez de um nome de procedimento, usando a sintaxe #num. As causas e soluções desse erro são as seguintes:

•	Uma tentativa para converter a expressão num para um ordinal falhou.

Certifique-se de que a expressão representa um número válido ou chame o procedimento pelo nome.

•	O num especificado não especifica qualquer função no DLL.

Certifique-se de que num identifica uma função válida no DLL.

•	Uma biblioteca de tipos tem uma declaração inválida que resulta em uso interno de um número ordinal inválido.

Coloque o código como comentário para isolar a chamada de procedimento que está causando o problema. Escreva uma instrução Declare para o procedimento e relate o problema para o fornecedor da biblioteca de tipos.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Seqüência de caracteres padrão inválida (Erro 93)

A seqüência de caracteres padrão especificada na operação Like de uma pesquisa é inválida. A causa e a solução desse erro são as seguintes:

•	Um exemplo comum de uma expressão inválida da lista de caracteres é [a-b , em que falta o colchete direito.

Reveja os caracteres válidos para expressões da lista.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Chamada de procedimento ou argumento inválido (Erro 5)

Alguma parte da chamada não pode ser concluída. As causas e soluções desse erro são as seguintes:

•	Um argumento provavelmente excede o intervalo de valores permitidos. Por exemplo, a função Sin pode aceitar somente valores dentro de um certo intervalo. Argumentos positivos menores que 2.147.483.648 são aceitos, enquanto 2.147.483.648 gera este erro.

Verifique os intervalos permitidos para argumentos.

•	Este erro também pode ocorrer se for feita uma tentativa para chamar um procedimento que não seja válido na plataforma atual. Por exemplo, alguns procedimentos podem ser válidos somente para o Microsoft Windows, ou para o Macintosh, e assim por diante.

Verifique as informações específicas da plataforma sobre o procedimento.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Índice de matriz de propriedades inválido (Erro 381)

Um valor de propriedade pode consistir de uma matriz de valores. A causa e a solução desse erro são as seguintes:

•	A matriz de propriedades de um componente pode ter um limite inferior de zero e um limite superior igual ao número de elementos na matriz menos 1. Alternativamente, o limite inferior pode ser 1 e o limite superior pode ser igual ao número de elementos na matriz.

Verifique a documentação do componente para certificar-se de que o índice esteja dentro do intervalo válido para a propriedade especificada.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Uso inválido de Null (Erro 94)

Null é um subtipo de Variant usado para indicar que um item de dados não contém dados válidos. A causa e a solução desse erro são as seguintes:

•	Você está tentando obter o valor de uma variável Variant ou uma expressão que é Null. Por exemplo:

MyVar = Null

For Count = 1 To MyVar

. . .

Next Count

Certifique-se de que a variável contém um valor válido.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Argumento nomeado não encontrado (Erro 448)

Um argumento nomeado não pode ser usado em uma chamada de procedimento, a menos que apareça na definição de procedimento. A causa e a solução desse erro são as seguintes:

•	Você especificou um argumento nomeado, mas o procedimento não foi definido para aceitar um argumento por esse nome.

Verifique a ortografia do nome do argumento.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Índice de matriz de propriedades necessário (Erro 385)

Este valor de propriedade consiste de uma matriz em vez de um valor simples. A causa e a solução desse erro são as seguintes:

•	Você não especificou o índice para a matriz de propriedades que tentou acessar.

Verifique a documentação do componente para encontrar o intervalo dos índices apropriados para a matriz. Especifique um índice apropriado em sua instrução de acesso de propriedade.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


O objeto não suporta a definição de localidade atual (Erro 447)

Nem todos os objetos suportam todas as configurações de localidade. As causas e soluções desse erro são as seguintes:

•	Você tentou acessar um objeto que não suporta a definição de localidade para o projeto atual. Por exemplo, se o seu projeto atual tiver a definição de localidade Francês (Canadá), o objeto que você está tentando acessar deve suportar essa definição de localidade.

Verifique quais configurações de localidade são suportadas pelo objeto.

•	O objeto conta com o suporte de idioma nacional em uma biblioteca de vínculo dinâmico (DLL) ou recurso de código Macintosh, por exemplo, OLE2NLS.DLL, que pode estar desatualizado.

Obtenha uma versão mais recente do DLL, uma que suporte a localidade de projeto atual.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


O objeto não suporta argumentos nomeados (Erro 446)

Nem todos os objetos suportam argumentos nomeados. A causa e a solução desse erro são as seguintes:

•	Você tentou acessar um objeto cujos métodos não suportam argumentos nomeados.

Especifique argumentos com relação à posição quando executar métodos neste objeto. Consulte a documentação do objeto para obter mais informações sobre posições e tipos de argumentos.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


O objeto não suporta esta ação (Erro 445)

Nem todos os objetos suportam todas as ações. A causa e a solução desse erro são as seguintes:

•	Você fez referência a um método ou propriedade que não é suportada por este objeto.

Consulte a documentação do objeto para obter mais informações sobre o objeto e verifique a ortografia das propriedades e métodos.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


O procedimento da propriedade let não foi definido e o procedimento da propriedade get não retornou um objeto (Erro 451)

Certas propriedades, métodos e operações podem aplicar-se somente a objetos Collection. A causa e a solução desse erro são as seguintes:

•	Você especificou uma operação ou propriedade que é exclusiva para coleções, mas o objeto não é uma coleção.

Verifique a ortografia do nome do objeto ou da propriedade, ou verifique se o objeto é do tipo Collection. Consulte também o método Add usado para adicionar o objeto à coleção para certificar-se de que a sintaxe esteja correta e que os identificadores tenham a ortografia correta.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Objeto requerido (Erro 424)

Referências a propriedades e métodos muitas vezes requerem um qualificador explícito de objeto. As causas e soluções desse erro são as seguintes:

•	Você fez referência a uma propriedade ou método de objeto, mas não forneceu um qualificador de objeto válido.

Especifique um qualificador de objeto se não tiver fornecido algum. Por exemplo, embora seja possível omitir um qualificador de objeto ao fazer referência a uma propriedade de formulário dentro do próprio módulo do formulário, você deve especificar explicitamente o qualificador ao fazer referência à propriedade de um módulo padrão.

•	Você forneceu um qualificador de objeto, mas ele não é reconhecido como um objeto.

Verifique a ortografia do qualificador de objeto e certifique-se de que o objeto seja visível na parte do programa no qual você está fazendo referência a ele. No caso de objetos Collection, verifique quaisquer ocorrências do método Add para assegurar que a sintaxe e a ortorgrafia de todos os elementos estejam corretas.

•	Você forneceu um qualificador de objeto válido, mas alguma outra parte da chamada continha um erro.

Um caminho incorreto como um argumento para o comando Arquivo Abrir do aplicativo host poderia causar o erro. Verifique os argumentos.

•	Você não usou a instrução Set na atribuição de uma referência de objeto.

Se você atribuir o valor de retorno de uma chamada CreateObject a uma variável Variant, não ocorrerá necessariamente um erro se a instrução Set for omitida. No exemplo de código a seguir, uma ocorrência implícita do Microsoft Excel é criada e sua propriedade padrão (a seqüência de caracteres "Microsoft Excel") é retornada e atribuída à Variant RetVal. Uma tentativa subseqüente para usar RetVal como uma referência de objeto causa este erro:

Dim RetVal	' Implicitamente uma Variant.

' A propriedade padrão é atribuída a Type 8 Variant RetVal.

RetVal = CreateObject("Excel.Application")

RetVal.Visible = True	' O erro ocorre aqui.

Use a instrução Set quando atribuir uma referência de objeto.

•	Em casos raros, este erro ocorre quando você tem um objeto válido mas está tentando executar uma ação inválida no objeto. Por exemplo, este erro pode ocorrer ao tentar atribuir um valor a uma propriedade somente leitura.

Verifique a documentação do objeto e certifique-se de que a ação que você está tentando executar é válida.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Variável de objeto não definida (Erro 91)
Variável de objeto ou variável do bloco With não definida (Erro 91)

Há duas etapas para criar uma variável de objeto. Primeiramente, você deve declarar a variável de objeto. Depois, deve atribuir uma referência válida à variável de objeto usando a instrução Set. De modo semelhante, um bloco With...End With deve ser inicializado executando o ponto de entrada da instrução With. As causas e soluções desse erro são as seguintes:

•	Você tentou usar uma variável de objeto que já não faz referência a um objeto válido.

Especifique ou reespecifique uma referência para a variável de objeto. Por exemplo, se a instrução Set fosse omitida no código a seguir, um erro seria gerado na referência a MyObject:

Dim MyObject As Object	' Criar variável de objeto.

Set MyObject = Sheets(1)	' Criar referência de objeto válida.

MyCount = MyObject.Count	' Atribuir valor de Count para MyCount.

•	Você tentou usar uma variável de objeto que foi definida para Nothing.

Set MyObject = Nothing	' Liberar o objeto.

MyCount = MyObject.Count	' Fazer uma referência a um objeto liberado.

Especifique novamente uma referência para a variável de objeto. Por exemplo, use uma nova instrução Set para definir uma nova referência ao objeto.

•	O objeto é válido, mas não foi definido porque a biblioteca de objetos na qual ele está descrito não foi selecionada na caixa de diálogo Referências.

Selecione a biblioteca de objetos na caixa de diálogo Adicionar referências.

•	O destino de uma instrução GoTo está dentro de um bloco With.

Não salte para um bloco With. Certifique-se de que o bloco seja inicializado executando o ponto de entrada da instrução With.

•	Você especificou uma linha dentro de um bloco With quando escolheu o comando Definir próxima instrução.

O bloco With deve ser inicializado executando a instrução With.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Erro de automação (Erro 440)

Quando você acessa objetos de Automação, podem ocorrer tipos específicos de erros. A causa e a solução desse erro são as seguintes:

•	Ocorreu um erro ao executar um método , ao obter ou definir uma propriedade de uma variável de objeto. O erro foi relatado pelo aplicativo que criou o objeto.

Verifique as propriedades do objeto Err para determinar a fonte e a natureza do erro. Tente também usar a instrução On Error Resume Next imediatamente antes da instrução de acesso e, em seguida, verifique se há erros imediatamente após a instrução de acesso.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


O objeto não suporta esta propriedade ou método (Erro 438)

Nem todos os objetos suportam todas as propriedades e métodos. A causa e a solução desse erro são as seguintes:

•	Você especificou um método ou propriedade que não existe para este objeto de Automação.

Consulte a documentação do objeto para obter mais informações sobre o objeto e verifique a ortografia das propriedades e métodos.

•	Você especificou um procedimento Friend para ser chamado em ligação tardia.

O nome de um procedimento Friend deve ser conhecido no tempo de compilação. Ele não pode aparecer em uma chamada de ligação tardia.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Sem memória (Erro 7)

Foi requerida mais memória do que há disponível ou um limite de segmento de 64K foi encontrado. As causas e soluções desse erro são as seguintes:

•	Há aplicativos, documentos ou arquivos de origem abertos em excesso.

Feche os aplicativos, documentos ou arquivos de origem desnecessários que estiverem abertos.

•	Há um módulo ou procedimento que é muito grande.

Quebre módulos ou procedimentos grandes em partes menores. Isto não poupa memória, mas pode evitar que atinja limites de segmento de 64K.

•	Você está executando o Microsoft Windows no modo padrão.

Reinicie o Microsoft Windows no modo avançado.

•	Você está executando o Microsoft Windows no modo avançado, mas a memória virtual está esgotada.

Aumente a memória virtual liberando algum espaço em disco, ou pelo menos garanta que algum espaço esteja disponível.

•	Você tem programas residentes em execução.

Elimine os programas residentes.

•	Há vários drivers de dispositivo carregados.

Elimine os drivers de dispositivo desnecessários.

•	Espaço esgotado para variáveis Public.

Reduza o número de variáveis Public.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Sem espaço em pilha (Erro 28)

A pilha é uma área de trabalho de memória que é ampliada e reduzida dinamicamente de acordo com a demanda de seu programa em execução. As causas e soluções desse erro são as seguintes:

•	Há chamadas de procedimento Function, Sub ou Property ativas em excesso.

Verifique se os procedimentos não estão muito aninhados. Isto ocorre especialmente com procedimentos recursivos, ou seja, procedimentos que chamam a si mesmos. Certifique-se de que os procedimentos recursivos terminem adequadamente. Use a caixa de diálogo Chamadas para visualizar os procedimentos que estão ativos (na pilha).

•	Suas variáveis locais requerem mais espaço de variável local do que há disponível.

Tente declarar algumas variáveis no nível de modulo. Você também pode declarar todas as variáveis na estática do procedimento precedendo a palavra-chave Property, Sub ou Function com Static. Ou pode usar a instrução Static para declarar variáveis Static individuais dentro dos procedimentos.

•	Há seqüências de caracteres de comprimento fixo em excesso.

As seqüências de caracteres de comprimento fixo de um procedimento são acessadas mais rapidamente, mas usam mais espaço de pilha do que as de comprimento variável, porque os próprios dados da seqüência são colocados na pilha. Tente redefinir algumas das seqüências de caracteres de comprimento fixo como seqüências de caracteres de comprimento variável. Ao declarar seqüências de caracteres de comprimento variável de um procedimento, apenas o descritor de seqüência (não os dados em si) é colocado na pilha. Você também pode definir a seqüência de caracteres no nível de módulo onde não há necessidade de espaço de pilha. As variáveis declaradas no nível de módulo são Public por padrão, portanto a seqüência de caracteres fica visível para todos os procedimentos no módulo.

•	Você tem chamadas de função DoEvents aninhadas em excesso.

Use a caixa de diálogo Chamadas para visualizar os procedimentos que estão ativos na pilha.

•	Seu código disparou uma cascata de eventos.

Uma cascata de eventos é causada pelo disparo de um evento que chama um procedimento de evento que já está na pilha. Uma cascata de eventos é semelhante a uma chamada de procedimento recursiva não terminada, mas é menos óbvia, visto que a chamada é feita pelo Visual Basic e não por uma chamada explícita em seu código. Use a caixa de diálogo Chamadas para visualizar os procedimentos que estão ativos (na pilha).

Para exibir a caixa de diálogo Chamadas, selecione o botão Chamadas à direita da caixa Procedimento na janela Depurar ou escolha o comando Chamadas. Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Sem espaço para seqüência de caracteres (Erro 14)

O Visual Basic permite que você use seqüências de caracteres muito grandes. No entanto, os requisitos de outros programas e o modo como as seqüências são manipuladas podem causar este erro. As causas e soluções desse erro são as seguintes:

•	Expressões que requerem que as seqüências de caracteres temporárias sejam criadas para a avaliação podem causar este erro. Por exemplo, o seguinte código causa um erro Sem espaço para seqüência de caracteres em alguns sistemas operacionais:

MyString = "Olá"

For Conta = 1 To 100

MyString = MyString & MyString

Next Count

Atribua a seqüência de caracteres a uma variável com outro nome.

•	Seu sistema pode estar sem memória, o que impediu a alocação de uma seqüência de caracteres.

Remova os aplicativos desnecessários da memória para criar mais espaço.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Estouro (Erro 6)

Ocorre um estouro quando você tenta fazer uma atribuição que excede as limitações do seu destino. As causas e soluções desse erro são as seguintes:

•	O resultado de uma atribuição, cálculo ou conversão de tipo de dados é muito grande para ser representado dentro do intervalo de valores permitido para esse tipo de variável.

Atribua o valor a uma variável de um tipo que possa reter um intervalo maior de valores.

•	Uma atribuição a uma propriedade excede o valor máximo aceito pela propriedade.

Certifique-se de que a atribuição se encaixa no intervalo da propriedade para a qual foi criada.

•	Você tenta usar um número em um cálculo e esse número é convertido em um número inteiro, mas o resultado é maior que um inteiro. Por exemplo:

    Dim x As Long

    x = 2000 * 365   ' Erro: Estouro

Para resolver esta situação, digite o número, desta forma:

    Dim x As Long

    x = CLng(2000) * 365

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Caminho não encontrado (Erro 76)

O caminho para um arquivo inclui a especificação da unidade e os diretórios e subdiretórios que devem ser percorridos para localizar o arquivo. Um caminho pode ser relativo ou absoluto. A causa e a solução desse erro são as seguintes:

•	Durante uma operação de acesso ao arquivo ou acesso ao disco, por exemplo, Open, MkDir, ChDir ou RmDir, o sistema operacional não conseguiu localizar o caminho especificado.

Especifique novamente o caminho.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Erro de acesso ao caminho/arquivo (Erro 75)

Durante uma operação de acesso ao arquivo ou ao disco, por exemplo, Open, MkDir, ChDir ou RmDir, o sistema operacional não conseguiu fazer uma conexão entre o caminho e o nome do arquivo. As causas e soluções desse erro são as seguintes:

•	A especificação do arquivo não está formatada corretamente.

Um nome de arquivo pode conter um caminho completo (absoluto) ou relativo. Um caminho completo inicia-se com o nome da unidade (se o caminho estiver em outra unidade) e lista o caminho explícito do raiz para o arquivo. Qualquer caminho que não seja completo é relativo à unidade e ao diretório atuais.

•	Você tentou salvar um arquivo que substituiria um arquivo somente leitura existente.

Altere o atributo somente leitura do arquivo de destino ou salve o arquivo com um nome diferente.

•	Você tentou abrir um arquivo somente leitura no modo Output ou Append seqüencial.

Abra o arquivo no modo Input ou altere o atributo somente leitura do arquivo.

•	Você tentou alterar um projeto do Visual Basic dentro de um banco de dados ou documento.

Não é possível fazer alterações de estrutura no projeto.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Permissão negada (Erro 70)

Foi feita uma tentativa de gravar em um disco protegido contra gravação ou de acessar um arquivo bloqueado. As causas e soluções desse erro são as seguintes:

•	Você tentou abrir um arquivo protegido contra gravação para Output ou Append seqüencial.

Abra o arquivo para Input ou altere o atributo de proteção contra gravação do arquivo.

•	Você tentou abrir um arquivo em um disco que está protegido contra gravação para Output ou Append seqüencial.

Remova o dispositivo de proteção contra gravação do disco ou abra o arquivo para Input.

•	Você tentou gravar em um arquivo bloqueado por outro processo.

Aguarde até que outro processo libere o arquivo para poder abri-lo.

•	Você tentou acessar o Registro, mas suas permissões de usuário não incluem este tipo de acesso de Registro.

Em sistemas Microsoft Windows de 32 bits, um usuário deve ter as permissões corretas para o Registro do sistema. Altere suas permissões ou peça ao administrador do sistema para alterá-las.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Erro na impressora (Erro 482)

A causa e a solução desse erro são as seguintes:

•	Ocorreu um erro na impressora, mas nenhuma outra informação foi retornada para o computador que enviou o arquivo.

Você deve examinar fisicamente a impressora. Certifique-se de que todas as conexões entre o computador e a impressora sejam sólidas. A maioria das impressoras fornecem um visor para informações de erro do tipo "Sem papel," "Off-line" e outras.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


A propriedade Get não pode ser executada no tempo de execução (Erro 393)

Nem todas as propriedades retornam informações de tempo de execução. A causa e a solução desse erro são as seguintes:

•	A propriedade que você está tentando acessar é somente leitura no tempo de execução.

Termine a execução e visualize a propriedade no tempo de criação.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


A propriedade Get não pode ser executada na propriedade somente gravação (Erro 394)

Nem todas as propriedades retornam informações. A causa e a solução desse erro são as seguintes:

•	A propriedade que você está tentando acessar não retorna informações.

Você não pode determinar o estado da propriedade.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Propriedade ou método não encontrado (Erro 423)

A ortografia de um nome de objeto deve corresponder exatamente à definição em sua biblioteca de objetos. A causa e a solução desse erro são as seguintes:

•	Você fez referência a um object.method ou object.property, mas method ou property não está definido.

A ortografia do nome do object pode estar incorreta. Para ver quais propriedades e métodos estão definidos para um object, exiba o Pesquisador de objeto. Selecione a biblioteca de objetos apropriada para visualizar uma lista de propriedades e métodos disponíveis.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Propriedade não encontrada (Erro 422)

Nem todos os objetos suportam o mesmo conjunto de propriedades. A causa e a solução desse erro são as seguintes:

•	Este objeto não suporta a propriedade especificada.

Verifique a ortografia do nome da propriedade. Além disso, você pode estar tentando acessar uma propriedade do tipo "text" quando na verdade o objeto suporta um "caption" ou alguma propriedade nomeada de modo semelhante. Verifique a documentação do objeto.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


A propriedade Set não pode ser executada no tempo de execução (Erro 382)

Não pode ser possível obter uma referência a uma propriedade no tempo de execução. Este erro tem a seguinte causa e solução:

•	Você tentou obter uma referência para uma propriedade que é somente leitura ou somente gravação no tempo de execução.

Como você pode usar uma referência para leitura e gravação, a propriedade deve fornecer suporte de tempo de execução para ambas as operações para uma referência a ser obtida no tempo de execução.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


A propriedade Set não pode ser usada com a propriedade somente leitura (Erro 383)

Não pode ser possível obter uma referência a uma propriedade no tempo de execução. Este erro tem a seguinte causa e solução:

•	Você tentou obter uma referência para uma propriedade que é somente leitura no tempo de execução.

Como você pode usar uma referência para leitura e gravação, a propriedade deve fornecer suporte de tempo de execução para ambas as operações para uma referência a ser obtida no tempo de execução. Você só pode usar uma Property Get com esta propriedade.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


A propriedade Set não é permitida (Erro 387)

Nem todas as propriedades suportam o retorno de uma referência. A causa e a solução desse erro são as seguintes:

•	Você tentou obter uma referência para um propriedade que não retorna uma referência.

Restrinja seu acesso a esta propriedade para Property Let e Property Get.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Substituições longas demais (Erro 746)

Uma substituição não pode exceder um comprimento máximo especificado. A causa e a solução desse erro são as seguintes:

•	Você especificou uma substituição que excedeu o comprimento permitido.

Consulte a documentação do componente para obter informações sobre restrição de comprimento máximo.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Continuar sem erro (Erro 20)

Uma instrução Resume só pode aparecer dentro de um tratamento de erros e só pode ser executada em um tratamento de erros ativo. As causas e soluções desse erro são as seguintes:

•	Você colocou uma instrução Resume fora do código de tratamento de erros.

Mova a instrução para um tratamento de erros ou exclua-a.

•	Seu código saltou para um tratamento de erros embora não tenha havido um erro.

A ortografia de um rótulo de linha pode estar incorreta. Os saltos para rótulos não podem ocorrer através de procedimentos, portanto pesquise o procedimento para o rótulo que identifica o tratamento de erros. Se você localizar um rótulo duplicado especificado como o destino de uma instrução GoTo que não esteja em uma instrução On Error GoTo, altere o rótulo de linha para que corresponda a seu destino pretendido.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Retornar sem GoSub (Erro 3)

Uma instrução Return deve ter uma instrução GoSub correspondente. A causa e a solução desse erro são as seguintes:

•	Você tem uma instrução Return que não corresponde a uma instrução GoSub.

Certifique-se de que a instrução GoSub não foi excluída inadvertidamente.

Diferente de For...Next, While...Wend e Sub...End Sub, que têm correspondência no tempo de compilação, GoSub e Return têm correspondência no tempo de execução.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Função de DLL especificada não encontrada (Erro 453)

A biblioteca de vínculo dinâmico (DLL) em uma referência da biblioteca de usuários foi encontrada, mas a função de DLL especificada não foi encontrada dentro da DLL. As causas e soluções desse erro são as seguintes:

•	Você especificou um ordinal inválido na declaração de função.

Verifique o ordinal correto ou chame a função pelo nome.

•	O nome de DLL fornecido está correto, mas não está na versão que contém a função especificada.

Você pode ter a versão correta em sua máquina, mas se o diretório contendo a versão incorreta preceder o diretório contendo a versão correta em seu caminho, a DLL incorreta será acessada. Verifique sua máquina quanto a versões diferentes. Se você tiver uma versão anterior, entre em contato com o fornecedor para obter uma versão posterior.

•	Se você estiver trabalhando em uma plataforma Microsoft Windows de 32 bits, o nome e o alias (se usado) da DLL devem estar corretos.

Certifique-se de que o nome e o alias da DLL estejam corretos.

•	Algumas DLLs de 32 bits contêm funções com versões um pouco diferentes para acomodar as seqüências de caracteres Unicode e ANSI. Um "A" no final do nome da função especifica a versão de ANSI. Um "W" no final do nome da função especifica a versão de Unicode.

Se a função receber argumentos do tipo seqüência de caracteres, tente anexar um "A" ao nome da função.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Expressão muito complexa (Erro 16)

O número de subexpressões permitidas em uma expressão de ponto flutuante varia entre as plataformas. Por exemplo, em sistemas operacionais Microsoft Windows de 32 bits, o limite é de 8 níveis de expressões de ponto flutuante aninhadas. A causa e a solução desse erro são as seguintes:

•	Uma expressão de ponto flutuante contém subexpressões aninhadas em excesso.

Quebre a expressão em tantas partes separadas quantas forem necessárias para evitar a ocorrência do erro.

Observação   Em versões anteriores do Visual Basic, o Erro 16 era "Expressão de seqüência de caracteres muito complexa." Essa condição de erro não pode mais ocorrer. No entanto, se você tiver código anterior que intercepta e trata o erro, deve removê-lo para evitar confusão com este novo erro.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Texto de pesquisa não encontrado (Erro 744)

A causa e a solução desse erro são as seguintes:

•	O texto especificado não foi encontrado.

O texto não existe.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Sub, Function ou Property não definido (Erro 35)

Um procedimento Sub, Function ou Property deve ser definido para ser chamado. As causas e soluções desse erro são as seguintes:

•	A ortografia do nome de seu procedimento está incorreta.

Verifique a ortografia e corrija-a.

•	Você tentou chamar um procedimento de outro projeto sem adicionar explicitamente uma referência a esse projeto na caixa de diálogo Referências.

Para adicionar uma referência

1.	Exiba a caixa de diálogo Referências.

2.	Localize o nome do projeto que contém o procedimento que você deseja chamar. Se o nome do projeto não aparecer na caixa de diálogo Referências, clique no botão Procurar para procurá-lo.

3.	Clique na caixa de seleção à esquerda do nome do projeto.

4.	Clique em OK.

•	O procedimento especificado não é visível para o procedimento de chamada.

Os procedimentos declarados como Private em um módulo não podem ser chamados de procedimentos fora do módulo. Se Option Private Module estiver efetivado, os procedimentos do módulo não estarão disponíveis para outros projetos. Pesquise para localizar o procedimento.

•	Você declarou uma rotina de biblioteca de vínculo dinâmico (DLL) do Windows ou rotina de recurso de código do Macintosh, mas a rotina não está na biblioteca ou recurso de código especificado.

•	Verifique o ordinal (caso tenha usado algum) ou o nome da rotina. Certifique-se de que a sua versão da DLL ou o recurso de código do Macintosh estejam corretos. A rotina só pode existir em versões posteriores da DLL ou recurso de código do Macintosh. Se o diretório contendo a versão incorreta preceder o diretório que contém a versão correta em seu caminho, a DLL ou o recurso de código do Macintosh incorreto será acessado. O nome da DLL ou o recurso de código do Macintosh fornecido está correto, mas não está na versão que contém a função especificada.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Subscrito fora do intervalo (Erro 9)

Elementos de matrizes e membros de coleções só podem ser acessados dentro de seus intervalos definidos. As causas e soluções desse erro são as seguintes:

•	Você fez referência a um elemento de matriz inexistente.

O subscrito pode ser maior ou menor que o intervalo de subscritos possíveis ou a matriz pode não ter dimensões atribuídas neste ponto do aplicativo. Verifique a declaração da matriz para verificar seus limites superior e inferior. Use as funções UBound e LBound para limitar acessos da matriz se estiver trabalhando com matrizes que são redimensionadas. Se o índice for especificado como uma variável, verifique a ortografia do nome da variável.

•	Você declarou uma matriz, mas não especificou o número de elementos. Por exemplo, o seguinte código causa este erro:

Dim MyArray() As Integer

MyArray(8) = 234	' Causa o Erro 9.

O Visual Basic não dimensiona implicitamente intervalos de matriz não especificados como 0 – 10. Em vez disso, você deve usar Dim ou ReDim para especificar explicitamente o número de elementos de uma matriz.

•	Você fez referência a um membro de coleção inexistente.

Tente usar a construção For Each...Next em vez de especificar elementos de índice.

•	Você usou um formato de taquigrafia de subscrito que especificou implicitamente um elemento inválido.

Por exemplo, quando você usa o operador ! com uma coleção, ! especifica implicitamente uma chave. Por exemplo, object!keyname.value é equivalente a object.item(keyname).value. Neste caso, um erro é gerado se keyname representa uma chave inválida na coleção. Para corrigir o erro, use um nome ou índice de chave válido para a coleção.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Este componente não suporta este conjunto de eventos (Erro 459)

Nem todo componente suporta o depósito de eventos do cliente. A causa e a solução desse erro são as seguintes:

•	Você tentou usar uma variável WithEvents com um componente que não pode funcionar como uma fonte de eventos para o conjunto de eventos especificado. Por exemplo, você pode coletar eventos de um objeto, em seguida, criar outro objeto que implementa o primeiro objeto. Embora você possa considerar a coleta de eventos do objeto implementado, esse não é exatamente o caso. Implements apenas implementa uma interface para métodos e propriedades.

Não é possível coletar eventos para um componente que não origina eventos.

•	WithEvents não é suportado para Private UserControls, porque a informação do tipo necessária para causar o ObjectEvent não está disponível no tempo de execução.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Clientes de aplicativo da DLL em excesso
Clientes de aplicativo da DLL em excesso (Erro 47)

A biblioteca de vínculo dinâmico (DLL) para Visual Basic só pode acomodar o acesso de 50 aplicativos host por vez. A causa e a solução desse erro são as seguintes:

•	Seu aplicativo e outros aplicativos que são hosts do Visual Basic (alguns dos quais podem ser acessados por seu aplicativo) estão tentando acessar a DLL do Visual Basic ao mesmo tempo.

Reduza o número de aplicativos abertos acessando o Visual Basic.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Arquivos em excesso (Erro 67)

Há um limite para o número de arquivos em disco que podem ser abertos por vez. As causas e soluções desse erro são as seguintes:

•	Sistema operacional MS-DOS: Fora criados mais arquivos no diretório raiz do que é permitido pelo sistema operacional.

O sistema operacional MS-DOS limita o número de arquivos que podem existir no diretório raiz, geralmente 512. Se o seu programa estiver abrindo, fechando ou salvando arquivos no diretório raiz, altere o programa para que use um subdiretório.

•	Sistema operacional MS-DOS: Foram abertos mais arquivos do que o número especificado na definição files= em seu arquivo CONFIG.SYS.

Aumente o número especificado na definição files= em seu arquivo CONFIG.SYS e reinicialize o computador.

•	Macintosh: Seu programa tentou abrir mais de 40 arquivos.

No Macintosh, o limite padrão é 40 arquivos. Este limite pode ser alterado usando um utilitário para modificar o parâmetro MaxFiles do bloco de inicialização.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Tipos não coincidentes (Erro 13)

O Visual Basic pode converter e fazer a coerção de vários valores para efetuar as atribuições de tipo de dados que não foram possíveis em versões anteriores. No entanto, este erro ainda pode ocorrer e tem as seguintes causas e soluções:

•	A variável ou propriedade não é do tipo correto. Por exemplo, uma variável que requer um valor inteiro não pode aceitar um valor de seqüência de caracteres a menos que a seqüência inteira possa ser reconhecida como um inteiro.

Tente fazer atribuições apenas entre tipos de dados compatíveis. Por exemplo, um Integer pode ser sempre atribuído a um Long, um Single pode ser sempre atribuído a um Double e qualquer tipo (exceto um tipo definido pelo usuário) pode ser atribuído a um Variant.

•	Um objeto foi passado para um procedimento que está esperando uma propriedade ou valor simples.

Passe a propriedade simples adequada ou chame um método apropriado para o objeto.

•	Um nome de módulo ou projeto foi usado onde era esperada uma expressão, por exemplo:

Debug.Print MyModule

Especifique uma expressão que possa ser exibida.

•	Você tentou misturar o tratamento de erro tradicional do Basic com valores de Variant tendo o subtipo Error (10, vbError), por exemplo:

Error CVErr(n)

Para regenerar um erro, você deve mapeá-lo para um erro intrínsico do Visual Basic ou definido pelo usuário e, em seguida, gerar esse erro.

•	Um valor CVErr não pode ser convertido para Date. Por exemplo:

MyVar = CDate(CVErr(9))

Use uma instrução Select Case ou alguma construção similar para mapear o retorno de CVErr para tal valor.

•	No tempo de execução, este erro geralmente indica que um Variant usado em uma expressão tem um subtipo incorreto ou um Variant contendo uma matriz aparece em uma instrução Print #.

Para imprimir matrizes, crie um loop que exiba cada elemento individualmente.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Ocorreu uma interrupção do usuário (Erro 18)

O processo de interrupção de execução é útil, mas se não tratado, ele resulta no término do aplicativo. A causa e a solução desse erro são as seguintes:

•	Um usuário pressionou CTRL+BREAK ou outra tecla de interrupção.

No ambiente de desenvolvimento, continue a execução. Para precaver-se da ocorrência desta condição no tempo de execução, trate o erro de um modo apropriado.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


A variável usa um tipo não suportado no Visual Basic (Erro 458)

Nem toda variável que aparece em uma biblioteca de tipos ou biblioteca de objetos pode ser usada por toda linguagem de programação. A causa e a solução desse erro são as seguintes:

•	Você tentou usar uma variável definida em uma biblioteca de tipos ou biblioteca de objetos que tem um tipo de dados que não é suportado pelo Visual Basic.

Não é possível usar uma variável de um tipo não reconhecido pelo Visual Basic em um programa do Visual Basic.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Número incorreto de argumentos (Erro 450)
Número incorreto de argumentos ou atribuição de propriedade inválida (Erro 450)

O número de argumentos para um procedimento deve corresponder ao número de parâmetros da definição do procedimento. As causas e soluções desse erro são as seguintes:

•	O número de argumentos da chamada para o procedimento não era igual ao número de argumentos requeridos esperados pelo procedimento.

Verifique a lista de argumentos da chamada em relação à declaração ou definição do procedimento.

•	Você especificou um índice para um controle que não faz parte de uma matriz de controle.

A especificação do índice é interpretada como um argumento, mas não era esperado um índice ou argumento, ocorrendo portanto o erro. Remova a especificação do índice ou siga o procedimento para criar uma matriz de controle. Defina a propriedade Index para um valor diferente de zero na folha de propriedades ou janela de propriedades do controle no tempo de criação.

•	Você tentou atribuir um valor para uma propriedade somente leitura ou tentou atribuir um valor para uma propriedade para a qual não existe nenhum procedimento Property Let.

Atribuir um valor para uma propriedade é o mesmo que passar o valor como um argumento para o procedimento Property Let do objeto. Defina corretamente o procedimento Property Let; ele deve ter um argumento a mais do que o procedimento Property Get correspondente. Se a propriedade for somente leitura, não será possível atribuir um valor a ela.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


O componente ActiveX não pode criar objeto ou retornar referência para este objeto (Erro 429)

A criação de objetos requer que a classe do objeto seja registrada no Registro do sistema e que quaisquer bibliotecas de vínculo dinâmico (DLL) estejam disponíveis. As causas e soluções desse erro são as seguintes:

•	A classe não está registrada. Por exemplo, o Registro do sistema não menciona a classe ou a classe é mencionada, mas especifica um arquivo do tipo incorreto ou um arquivo que não pode ser encontrado.

Se possível, tente iniciar o aplicativo do objeto. Se as informações do Registro estiverem desatualizadas ou incorretas, o aplicativo deve verificar o Registro e corrigir as informações. Se iniciar o aplicativo não corrigir o problema, execute novamente o programa de instalação do aplicativo.

•	Uma DLL requerida pelo objeto não pode ser usada porque não foi encontrada ou foi encontrada, mas está corrompida.

Certifique-se de que todas as DLLs associadas estejam disponíveis. Por exemplo, o Data Access Object (DAO) requer o suporte de DLLs que variam entre as plataformas. Pode ser necessário executar novamente o programa de instalação para tal objeto, se for isto que estiver causando este erro.

•	O objeto está disponível na máquina, mas é um objeto de Automação licenciado e não pode verificar a disponibilidade da licença necessária para criar um exemplo do objeto.

Pode-se criar um exemplo de alguns objetos apenas após o componente localizar uma chave de licença, que verifica se o objeto está registrado para a criação de um exemplo na máquina atual. Quando é feita uma referência a um objeto através de uma biblioteca de tipos ou biblioteca de objetos adequadamente instalada, a chave correta é fornecida automaticamente.

Se a tentativa de criar um exemplo for o resultado de uma chamada CreateObject ou GetObject, o objeto deve localizar a chave. Neste caso, pode pesquisar o Registro do sistema ou procurar um arquivo especial que ele cria ao ser instalado, por exemplo, um com a extensão .lic. Se a chave não puder ser encontrada, não será possível criar um exemplo do objeto. Se um usuário final tiver configurado inadequadamente o aplicativo do objeto, excluído inadvertidamente um arquivo necessário ou alterado o Registro do sistema, o objeto poderá não conseguir localizar sua chave. Se a chave não puder ser encontrada, não será possível criar um exemplo do objeto. Neste caso, a criação do exemplo pode funcionar no sistema do desenvolvedor, mas não no sistema do usuário. O usuário pode precisar reinstalar o objeto licenciado.

•	Você está tentando usar a função GetObject para recuperar uma referência à classe criada com o Visual Basic.

GetObject não pode ser usado para obter uma referência a uma classe criada com o Visual Basic.

•	O acesso ao objeto foi negado explicitamente.

Por exemplo, você pode estar tentando acessar um objeto de dados que está atualmente sendo usado e está bloqueado para impedir situações de bloqueio. Se esse for o caso, você poderá acessar o objeto em outro momento.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Valor de propriedade inválido (Erro 380)

Muitas propriedades aceitam somente valores de um determinado tipo, dentro de um certo intervalo. A causa e a solução desse erro são as seguintes:

•	Um valor inadequado foi atribuído a uma propriedade.

Consulte o tópico da Ajuda da propriedade para determinar quais tipos e intervalo de valores são adequados para a propriedade.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Figura inválida (Erro 481)

Apenas uma figura pode ser atribuída à propriedade Picture ou objeto Picture. A causa e a solução desse erro são as seguintes:

•	Você tentou atribuir algo para uma propriedade Picture ou um objeto Picture que não é reconhecido como um ícone, bitmap ou metarquivo do Microsoft Windows.

Consulte os tópicos da Ajuda para o objeto Picture ou propriedade Picture do objeto que você está usando para determinar os tipos de figura aceitáveis.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Formato inválido no arquivo de recurso (Erro 325)

Ao acessar um arquivo de recurso, o recurso que você está tentando recuperar deve ter um formato válido. A causa e a solução desse erro são as seguintes:

•	O arquivo de recurso que você está tentando recuperar ou um recurso específico do arquivo tem um formato inválido.

Se o conteúdo do arquivo tiver sido danificado, reinstale o arquivo a partir de seu disco original. Se o erro continuar, entre em contato com o fornecedor do recurso para obter um novo arquivo ou uma versão do recurso com o formato esperado.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Esta chave já está associada a um elemento desta coleção (Erro 457)

Uma chave é uma seqüência de caracteres especificada no método Add que identifica exclusivamente um membro específico de uma coleção. A causa e a solução desse erro são as seguintes:

•	Você especificou uma chave para um membro da coleção que já identifica um outro membro da coleção.

Escolha uma chave diferente para este membro.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Esta matriz é fixa ou está temporariamente bloqueada (Erro 10)

Nem todas as matrizes podem ser redimensionadas. Mesmo as matrizes declaradas especificamente como dinâmicas e matrizes dentro de variáveis de Variant às vezes são bloqueadas temporariamente. As causas e soluções desse erro são as seguintes:

•	Você tentou usar ReDim para alterar o número de elementos de uma matriz de tamanho fixo. Por exemplo, no código a seguir, a matriz fixa FixedArr é recebida por SomeArr no procedimento NextOne e, em seguida, é feita uma tentativa para redimensionar SomeArr:

Sub FirstOne

Dim FixedArr(25) As Integer	' Criar uma matriz de tamanho fixo e

NextOne FixedArr()	' passá-la para outro procedimento.

End Sub

Sub NextOne(SomeArr() As Integer)

ReDim SomeArr(35)	' O erro 10 ocorre aqui.

. . .

End Sub

Crie a matriz original dinâmica em vez de fixa, declarando-a com ReDim (se a matriz for declarada dentro de um procedimento), ou declarando-a sem especificar o número de elementos (se a matriz for declarada no nível de módulo).

•	Você tentou redimensionar uma matriz dinâmica de nível de módulo, na qual um elemento foi passado como um argumento para um procedimento. Por exemplo, no código a seguir, ModArray é uma matriz dinâmica de nível de módulo cujo quadragésimo quinto elemento está sendo passado pela referência para o procedimento Test:

Dim ModArray () As Integer	' Criar uma matriz dinâmica de nível de módulo.

. . .

Sub AliasError()

ReDim ModArray (1 To 73) As Integer

Test ModArray (45)	' Passar um elemento da matriz de nível de módulo

' para o procedimento Test.

End Sub

Sub Test(SomeInt As Integer)

ReDim ModArray (1 To 40) As Integer  ' O erro ocorre aqui.

End Sub

Não há necessidade de passar um elemento da matriz de nível de módulo neste caso, porque é visível dentro de todos os procedimentos no módulo. No entanto, se um elemento for passado, a matriz será bloqueada para evitar a desalocação de memória para o parâmetro de referência dentro do procedimento, causando funcionamento imprevisível no retorno do procedimento.

•	Você tentou atribuir um valor para uma variável de Variant contendo uma matriz, mas Variant está atualmente bloqueado. Por exemplo, se seu código usa um loop For Each...Next para iterar sobre uma variante contendo uma matriz, a matriz é bloqueada na entrada para o loop e, em seguida, liberada no término do loop:

SomeArray = Array(9,8,7,6,5,4,3,2,1)

For Each X In SomeArray

SomeArray = 301	' Causa erro porque a matriz está bloqueada.

Next X

Use For...Next em vez de um loop For Each...Next para iterar. Quando uma matriz é o objeto de um loop For Each...Next, você pode ler a matriz, mas não pode gravar nela.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Nome do arquivo ou nome da classe não encontrado durante a operação de Automação (Erro 432)

A função GetObject requer um nome de arquivo válido com uma especificação de caminho ou o nome de uma classe que esteja registrado no sistema. A causa e a solução desse erro são as seguintes:

•	O nome especificado para o nome do arquivo ou classe em uma chamada para a função GetObject não pôde ser encontrado.

Verifique os nomes e tente novamente. Certifique-se de que o nome usado para o parâmetro class corresponda ao registrado no sistema.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


O objeto de Automação não tem um valor padrão (Erro 443)

Quando você especifica um nome de objeto sem uma propriedade ou método, o Visual Basic considera que está sendo feita referência ao membro padrão do objeto (propriedade ou método). No entanto, nem todos os objetos apresentam um membro padrão. A causa e a solução desse erro são as seguintes:

•	O Visual Basic não pode determinar o membro padrão para o objeto especificado.

Verifique a documentação do objeto e forneça uma especificação explícita para a propriedade ou método.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


A máquina do servidor remoto não existe ou não está disponível (Erro 462)

A função CreateObject requer um servidor válido. A causa e a solução desse erro são as seguintes:

•	Foi especificado um parâmetro de servidor, mas o servidor não foi alcançado ou encontrado.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Classe não registrada na máquina local (Erro 463)

A função CreateObject requer um servidor válido. A causa e a solução desse erro são as seguintes:

•	Foi especificado um parâmetro de servidor, mas o progid da classe especificado (o primeiro parâmetro da função CreateObject) não está registrado no sistema local.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Método ou membro de dados não encontrado (Erro 461)

A coleção, objeto ou tipo definido pelo usuário não contém o membro ao qual se fez referência. As causas e soluções desse erro são as seguintes:

•	A ortografia do nome do objeto ou membro está incorreta.

Verifique a ortografia dos nomes e verifique a instrução Type ou a documentação do objeto para determinar quais são os membros e a ortografia correta dos nomes do objeto ou membro.

•	Você especificou um índice de coleção que está fora do intervalo.

Verifique a propriedade Count para determinar se existe um membro da coleção. Observe que os índices de coleção começam em 1 em vez de zero, portanto a propriedade Count retorna o número de índice mais alto possível.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


<Item> não é um tipo de controle válido (Erro 720)

Apenas componentes ActiveX válidos podem ser atribuídos como controles nos formulários. A causa e a solução desse erro são as seguintes:

•	Você tentou atribuir um componente ActiveX como um controle em um formulário que não é reconhecido como um componente de controle válido.

Consulte os tópicos da Ajuda sobre criação de controles ActiveX para determinar o que constitui um controle aceitável.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Erro inesperado; encerrando

Ocorreu um erro inesperado e o Visual Basic não pôde continuar. Isso pode ser um problema de hardware ou efeito de outro software em seu sistema.


Valores válidos são números inteiros de 1 a 32

Você tentou definir TabStop Width além do intervalo permitido. Um número entre 1 e 32 (inclusive) é aceito para este campo.


Valores válidos são números inteiros de 2 60

Você tentou definir Grid Width ou Grid Height além do intervalo permitido. Um número entre 2 e 60 (inclusive) é aceito para este campo.


O item especificado é um formato binário e não pode ser carregado para o Visual Basic

Formatos binários criados com versões anteriores do Visual Basic não podem ser carregados para esta versão do Visual Basic. Apenas as versões 2.0 e 3.0 do Visual Basic suportam a conversão de formatos binários para ASCII. Se você tiver uma cópia do Visual Basic 2.0 ou 3.0, pode carregar o formato criado com a versão 1.0 e aquelas versões e salvá-lo como texto. Depois poderá importar o formulário no Visual Basic.


O arquivo de projeto é somente leitura

O arquivo de projeto não é gravável. Para alterá-lo, você deve salvá-lo com um nome diferente ou remover o atributo somente leitura.


O arquivo é somente leitura

O arquivo não é gravável. Para alterá-lo, você deve salvá-lo com um nome diferente ou remover o atributo somente leitura.


Já existe um procedimento com esse nome

Os nomes do procedimento dentro do mesmo escopo devem ser exclusivos. Altere o nome do procedimento.


The project file 'item1' contains invalid 'item2' key value. Valid range is 0 to 'item3'
O arquivo de projeto especificado contém um valor da chave inválido. O intervalo válido é 0 para 'item3'

O intervalo de valores da chave é restrito. Mantenha o valor da chave dentro do intervalo especificado.


O nome do projeto é muito longo e foi truncado

Se o nome de um projeto exceder o comprimento permitido, ele será truncado para o comprimento máximo permitido.


The project file 'item1' contains invalid key 'item2'. The project can't be loaded
O arquivo de projeto especificado contém uma chave inválida. O projeto não pode ser carregado

Você não pode carregar o projeto enquanto o arquivo de projeto tiver a chave inválida.


'item1' is an invalid key. The file 'item2' can't be loaded
O item especificado é uma chave inválida. O arquivo especificado não pode ser carregado

Você não pode carregar o arquivo enquanto tiver a chave inválida.


O arquivo de projeto especificado contém valor da chave inválido

O valor da chave especificado é inválido. Altere-o.


Memória insuficiente para execução; encerrando

O Visual Basic não conseguiu obter memória suficiente para execução. Feche outros aplicativos e tente novamente.


Versão incorreta do sistema operacional; requer Windows NT 3.51 (compilar 'item1' ou posterior) ou Windows 95 (compilar 'item2' ou posterior)
Versão incorreta do sistema operacional; requer compilação especificada do Windows NT 3.51 ou Windows 95

Para executar esta versão do Visual Basic, você deve estar executando a compilação especificada do Windows 95 ou Windows NT versão 3.51.


Ocorreu um erro do sistema especificado

O Visual Basic encontrou um erro que foi gerado pelo sistema ou um componente externo.


A versão atual do Visual Basic não dá suporte ao arquivo especificado e marcado, e não será carregado

Você tentou carregar um formulário do Visual Basic versão 1.0 ou um formulário de uma versão mais recente a esta do Visual Basic. Não há suporte para isso.


O arquivo de projeto especificado está corrompido e não pode ser carregado

O Visual Basic não pode ler o arquivo de projeto. Isto pode ocorrer se o arquivo foi modificado por um editor fora do Visual Basic. Para corrigir o problema, desfaça quaisquer alterações feitas no arquivo.


Não é possível gravar Arquivo de cache do criador especificado; serão usados apenas arquivos regulares no carregamento

O criador do ActiveX não conseguiu gravar informações para um arquivo de cache, portanto o carregamento será feito através de informações fora da cache.

Para melhorar o desempenho na próxima vez em que iniciar o Visual Basic, um criador do ActiveX gravará um arquivo de cache. O criador não pôde gravar no arquivo de cache devido a falta de espaço em disco ou permissões inválidas na unidade. Certifique-se de que tenha espaço em disco suficiente disponível e que tenha permissões de gravação para a unidade. Se o problema persistir, contate o fornecedor do criador do ActiveX.


Memória insuficiente para carregar arquivo

O Visual Basic não conseguiu obter memória suficiente para carregar o arquivo. Feche outros aplicativos e tente novamente.


Nome de procedimento duplicado

Você definiu (ou está tentando definir) mais de uma versão de um procedimento com o mesmo nome. Renomeie um dos procedimentos. Certifique-se de que as instruções Declare para o mesmo procedimento tenham a mesma cláusula Alias.


Não é possível exibir a ajuda

O aplicativo de Ajuda do Windows não está disponível. Se o visualizador de bibliotecas MSDN estiver em seu computador, certifique-se de que esteja em seu caminho. Se não estiver em seu computador, instale-o para poder visualizar a Ajuda.


Não é possível exibir informações do sistema

O Visual Basic não pode exibir informações do sistema quando você escolhe Informações do sistema na caixa de diálogo Sobre o Microsoft Visual Basic. Pode não haver memória suficiente no sistema ou um arquivo necessário pode estar corrompido ou não foi encontrado.


A descrição do aplicativo não pode conter mais de 2000 caracteres

Não pode haver uma descrição de aplicativo com mais de 2000 caracteres. Exclua alguns caracteres da descrição.


Deve-se especificar que item(ns) imprimir

Você não especificou o que deve ser impresso. Marque pelo menos uma das caixas de seleção Form ou Code na caixa de diálogo Print após escolher Print no menu Arquivo.


Not a legal object name: 'item
O nome especificado não é um nome legal do objeto

Nomes de formulário e de controle devem começar com uma letra e podem ter no máximo 40 caracteres — incluindo letras, números e sublinhados (_).

Observe que a propriedade Name de um formulário ou controle é diferente das propriedades Label — Caption, Text e Value — que nomeiam ou exibem o conteúdo de um controle em tempo de execução. Estas propriedades podem ser palavras-chave restritas, podem começar com um número e podem conter caracteres não-alfanuméricos.


Nome especificado conflitante com módulo, projeto ou biblioteca de objetos existente
Nome especificado conflitante com o módulo, projeto ou biblioteca de objetos existente

As causas desse erro são as seguintes:

•	Você carregou um formulário, Controle de usuário, Documento de usuário ou Página de propriedade que contém objetos com nomes conflitantes. Isso pode ocorrer se o arquivo foi editado fora do Visual Basic.

•	Este erro pode ocorrer ao renomear um formulário com o mesmo nome que o projeto, outro formulário ou um módulo. Também pode ocorrer quando você renomeia o projeto com o mesmo nome de um formulário ou módulo.


Não é possível definir o nome do projeto agora

O nome do projeto não pode ser definido agora.


O componente ActiveX especificado não foi registrado corretamente ou não foi encontrado

Um componente deve ser registrado no Registro do sistema. A causa e a solução desse erro são as seguintes:

•	As informações de Registro do componente estão incorretas; portanto, o componente não pode ser encontrado.

Corrija o registro. Reinstale o componente, se necessário.

•	O componente foi removido excluindo-o em vez de usar um programa de desinstalação.

Substitua os arquivos do componente no diretório especificado do registro.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Não é possível executar a operação porque o projeto está protegido

Quando um projeto está protegido, determinadas ações são proibidas. A causa e a solução desse erro são as seguintes:

•	O projeto foi protegido inadvertidamente.

Remova a proteção e, em seguida, tente a ação novamente.

•	O projeto foi protegido intencionalmente.

Não tente a ação até que a proteção seja removida pela pessoa que a aplicou em primeiro lugar.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Não é possível iniciar nova gravação até que a sessão atual seja encerrada

Você não pode "aninhar" gravações. A causa e a solução desse erro são as seguintes:

•	O gravador já está sendo executado.

Termine a gravação atual antes de iniciar outra.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Deseja exportar o objeto especificado antes de removê-lo?

Você pode exportar formulários e módulos e recarregá-los posteriormente. A causa e a solução desse erro são as seguintes:

•	Você está removendo um formulário ou um módulo do projecto.

Para preservar o módulo, exporte-o. Você poderá importá-lo posteriormente.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


O Visual Basic for Applications não dá suporte à classe de formulário contida no arquivo especificado. Não foi possível carregar o arquivo.

O Visual Basic for Applications aceita somente objetos do formulário UserForm. A causa e a solução desse erro são as seguintes:

•	Você está tentando carregar um formulário de uma versão anterior do Visual Basic ou de uma versão autônoma atual do Visual Basic.

Provavelmente é mais fácil recriar o formulário usando as ferramentas UserForm dentro do Visual Basic for Applications. Se você puder salvar o formulário no formato ASCII, poderá modificá-lo e importá-lo. Entretanto, você deverá compreender totalmente os formatos e limitações dos vários pacotes de formulários.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Não foi possível carregar o arquivo especificado.

Nem todos os arquivos podem ser carregados no Visual Basic for Applications. A causa e a solução desse erro são as seguintes:

•	O arquivo que você está tentando carregar tem um formato que o Visual Basic não consegue interpretar ou o arquivo está corrompido.

Não é possível carregar o arquivo.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Este comando irá parar o depurador.

Alguns comandos e ações fazem o Visual Basic parar a análise do código. A causa e a solução desse erro são as seguintes:

•	Algumas edições, como declarar uma variável Static, e alguns comandos, como a adição de um novo módulo ou formulário, fazem com que o código em execução ou suspenso pare.

Para não parar de executar o código, não adicione nem execute o comando.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Você deve salvar um projeto antes de poder se referir a ele.

Você não pode adicionar uma referência a um projeto não salvo. A causa e a solução desse erro são as seguintes:

•	Você tentou adicionar uma referência apesar de o projeto não estar salvo.

Salve o projeto antes de adicionar a referência.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Uso inválido de objeto (Erro 425)

A maioria dos objetos somente pode ser usada de maneiras específicas, normalmente ao tentar usar um objeto fora do escopo para o qual ele é relevante. Por exemplo, uma referência de objeto passada para um evento de arrastar-e-soltar provavelmente só pode ser usada no contexto desse evento.


Não é possível imprimir a imagem do formulário nesse tipo de impressora (Erro 486)

Você deve ter uma impressora com capacidade gráfica para imprimir uma imagem de formulário.


O objeto especificado não pode ser usado como um formulário de proprietário para Show() (Erro 371)

Você deve usar um objeto apropriado com o método Show.


O 'item' de controle ActiveX não foi encontrado (Erro 363)
O controle ActiveX especificado não foi encontrado (Erro 363)

O formulário que está sendo carregado contém um controle ActiveX que não faz parte do projeto atual. As causas e soluções desse erro são as seguintes:

•	Você pode ter editado manualmente o arquivo .vbp do projeto para adicionar um formulário que contém um controle ActiveX que ainda não faz parte do projeto.

Depois de carregar o projeto, use o comando Adicionar arquivo do menu Arquivo para adicionar o controle ActiveX ao projeto.

•	Você pode ter editado manualmente o arquivo .vbp do projeto para adicionar um formulário que contém um controle ActiveX de versão mais antiga do que o controle ActiveX que já faz parte do projeto.

Depois de carregar o projeto, exclua a versão mais antiga do formulário e coloque a versão mais recente do controle no formulário.


O componente ActiveX não foi registrado corretamente (Erro 336)

O componente ActiveX não foi registrado corretamente no Registro do sistema.


Valor de dados nomeado não encontrado (Erro 327)

O valor de dados não pôde ser encontrado.


Figura inválida (Erro 481)

Um formato gráfico inválido foi atribuído à propriedade Picture. A causa e a solução desse erro são as seguintes:

•	Você tentou atribuir um formato gráfico diferente de um bitmap, ícone ou metarquivo do Windows à propriedade Picture de um formulário ou controle.

Certifique-se de que o arquivo que você está tentando carregar na propriedade Picture seja um arquivo gráfico válido aceito pelo Visual Basic.


Erro na impressora (Erro 482)

Existe algum problema que impede a impressão. As causas e soluções desse erro são as seguintes:

•	Você não tem uma impressora instalada a partir do Painel de Controle do Windows.

Abra o Painel de Controle, clique duas vezes no ícone Impressoras e clique em Adicionar impressora para instalar uma impressora.

•	A sua impressora não está on-line.

Alterne fisicamente a impressora para on-line.

•	A sua impressora está emperrada ou sem papel.

Corrija fisicamente o problema.

•	Você tentou imprimir um formulário em uma impressora que pode aceitar somente texto.

Alterne para uma impressora instalada que possa imprimir gráficos.


A propriedade especificada não é suportada pelo driver da impressora (Erro 483)

O driver da impressora em uso não aceita essa propriedade do objeto Printer. A causa e a solução desse erro são as seguintes:

•	O efeito das propriedades do objeto Printer depende do driver fornecido pelo fabricante da impressora. Algumas definições de propriedade podem não ter efeito ou diversas definições de propriedade diferentes podem ter todas o mesmo efeito. As definições fora do intervalo aceito podem ou não produzir um erro.

Para obter maiores informações, consulte a documentação do fabricante do driver específico.


Problem getting printer information from the system; make sure the printer is set up correctly. (Error 484)
Problema ao obter do sistema informações sobre a impressora; certifique-se de que a impressora esteja configurada corretamente. (Erro 484)

Existe algum problema que impede a obtenção de informações sobre a impressora pelo sistema. As causas e soluções desse erro são as seguintes:

•	Você não tem uma impressora instalada a partir do Painel de Controle do Windows.

Abra o Painel de Controle, clique duas vezes no ícone Impressoras e clique em Adicionar impressora para instalar uma impressora.

•	A sua impressora não está on-line.

Alterne fisicamente a impressora para on-line.

•	A sua impressora está emperrada ou sem papel.

Corrija fisicamente o problema.


Tipo de figura inválido (Erro 485)

O formato da figura do arquivo de recurso que você tentou carregar não corresponde à propriedade especificada do objeto. As causas e soluções desse erro são as seguintes:

•	Você tentou usar o método LoadResPicture para carregar um recurso de bitmap como a propriedade Icon de um formulário.

Altere a propriedade para a propriedade Picture ou altere o argumento format de LoadResPicture para vbResIcon.

•	Você tentou usar o método LoadResPicture para carregar um recurso de cursor como alguma propriedade de um objeto ou controle diferente da propriedade MousePointer.

Altere a referência de propriedade para MousePointer.


Não é possível esvaziar a Área de transferência (Erro 520)

A Área de transferência foi aberta mas não pôde ser esvaziada. A causa e a solução desse erro são as seguintes:

•	Um outro aplicativo está usando a Área de transferência e não a liberará para o seu aplicativo.

Defina uma interceptação de erro para essa situação no seu código e forneça uma caixa de mensagem com os botões Repetir e Cancelar para permitir que o usuário tente novamente após uma pequena pausa.


Não é possível abrir a Área de transferência (Erro 521)

A Área de transferência já foi aberta por outro aplicativo. A causa e a solução desse erro são as seguintes:

•	Um outro aplicativo está usando a Área de transferência e não a liberará para o seu aplicativo.

Defina uma interceptação de erro para essa situação no seu código e forneça uma caixa de mensagem com os botões Repetir e Cancelar para permitir que o usuário tente novamente após uma pequena pausa.


O formato especificado não corresponde ao formato dos dados (Erro 461)

O formato especificado da Área de transferência é incompatível com o método que está sendo executado. As causas e soluções desse erro são as seguintes:

•	Você tentou usar o método GetText ou o método SetText com um formato de Área de transferência diferente de vbCFText ou vbCFLink.

Antes de usar esses métodos, use o método GetFormat para testar se o conteúdo atual da Área de transferência corresponde ao formato especificado.

•	Você tentou usar o método GetData ou o método SetData com um formato de Área de transferência diferente de vbCFBitmap, vbCFDIB ou vbCFMetafile.

Antes de usar esses métodos, use o método GetFormat para testar se o conteúdo atual da Área de transferência corresponde ao formato gráfico especificado.


Formato inválido da Área de transferência (Erro 460)

O formato especificado da Área de transferência é incompatível com o método que está sendo executado. As causas e soluções desse erro são as seguintes:

•	Você tentou usar o método GetText ou o método SetText com um formato de Área de transferência diferente de vbCFText ou vbCFLink.

Remova o formato inválido e especifique um dos dois formatos válidos.

•	Você tentou usar o método GetData ou SetData com um formato de Área de transferência diferente de vbCFBitmap, vbCFDIB ou vbCFMetafile.

Remova o formato inválido e especifique um dos três formatos gráficos válidos.


License information for this component not found. You don't have an appropriate license to use this functionality in the design environment (Error 429)
Informações de licença para este componente não foram encontradas. Você não possui uma licença apropriada para usar esta funcionalidade no ambiente de criação (Erro 429)

Você não é um usuário licenciado do controle ActiveX. A causa e a solução desse erro são as seguintes:

•	Você tentou colocar um controle ActiveX em um formulário em tempo de criação ou tentou adicionar um formulário a um projeto que contém um controle ActiveX, mas as informações associadas no Registro não puderam ser encontradas.

As informações do Registro podem ter sido excluídas ou foram corrompidas. Reinstale o controle ActiveX ou entre em contato com o fornecedor do controle.


O formulário já está sendo exibido; não é possível exibir de forma modal (Erro 400)

Você não pode usar o método Show para exibir um formulário visível como modal. A causa e a solução desse erro são as seguintes:

•	Você tentou usar Show, com o argumento style definido como 1 – vbModal, em um formulário já visível.

Use a instrução Unload ou o método Hide no formulário antes de tentar exibi-lo como um formulário modal.


É necessário primeiro fechar ou ocultar o formulário modal superior (Erro 402)

O formulário modal que você está tentando fechar ou ocultar não está no topo da ordem z. A causa e a solução desse erro são as seguintes:

•	Um outro formulário modal está mais para cima na ordem z do que o formulário modal que você tentou fechar ou ocultar.

Use primeiro a instrução Unload ou o método Hide em qualquer formulário modal mais para cima na ordem z. Um formulário modal é um formulário exibido pelo método Show, com o argumento style definido como 1 – vbModal.


Não é possível carregar ou descarregar este objeto (Erro 361)

Uma instrução Load ou uma instrução Unload fez referência a um objeto ou controle inválido. As causas e soluções desse erro são as seguintes:

•	Você tentou carregar ou descarregar um objeto que não é um objeto carregável, como Tela, Impressora ou Área de transferência.

Exclua a instrução incorreta do seu código.

•	Você tentou carregar ou descarregar um controle existente que não faz parte de uma matriz de controle. Por exemplo, supondo que existe uma TextBox com a propriedade Name Text1, Load Text1 provocará este erro.

Exclua a instrução incorreta do seu código ou altere a referência a um controle em uma matriz de controle.

•	Você tentou descarregar um controle Menu no evento Click do seu menu pai.

Descarregue o controle Menu com algum outro procedimento.

•	Você tentou descarregar o último menu visível de um controle Menu.

Verifique a definição da propriedade Visible em relação aos outros itens de menu na matriz de controle antes de tentar descarregar um item de menu ou de excluir a instrução incorreta do seu código.


Objeto já carregado (Erro 360)

O controle na matriz de controle já foi carregado. A causa e a solução desse erro são as seguintes:

•	Você tentou adicionar um controle a uma matriz de controle em tempo de execução com a instrução Load, mas o valor de índice a que você se referiu já existe.

Altere a referência de índice para um novo valor ou verifique se o seu código está executando a mesma instrução Load com a mesma referência de valor de índice mais de uma vez.


Formulário não encontrado (Erro 424)

O formulário não foi encontrado. A causa e a solução desse erro são as seguintes:

Você tentou adicionar um formulário à coleção UserForms usando o método Add, mas não há classe de formulário com esse nome. Por exemplo, UserForms.Add "MeuFormulário", onde MeuFormulário não existe.

Observação   Certifique-se de que o nome da classe está disponível para o seu projeto.


Não é possível descarregar neste contexto (Erro 365)

Em algumas situações, não é permitido que você descarregue um formulário ou um controle em um formulário. As causas e soluções desse erro são as seguintes:

•	Existe uma instrução Unload no evento Paint relativa ao formulário ou a um controle no formulário que tem o evento Paint.

Remova a instrução Unload do evento Paint.

•	Existe uma instrução Unload nos eventos Change, Click ou DropDown de uma ComboBox.

Remova a instrução Unload do evento.

•	Existe uma instrução Unload no evento Scroll de um controle HScrollBar ou VScrollBar.

Remova a instrução Unload do evento.

•	Existe uma instrução Unload no evento Resize de um controle Data, Form, MDIForm ou PictureBox.

Remova a instrução Unload do evento.

•	Existe uma instrução Unload no evento Resize de um MDIForm que está tentando descarregar um formulário filho MDI.

Remova a instrução Unload do evento.

•	Existe uma instrução Unload no evento RePosition ou no evento Validate de um controle Data.

Remova a instrução Unload do evento.

•	Existe uma instrução Unload no evento ObjectMove de um controle OLE Container.

Remova a instrução Unload do evento.


A DLL do sistema 'dll' especificada não pôde ser carregada (Erro 298)
A DLL do sistema especificada não pôde ser carregada (Erro 298)

Um arquivo .dll fornecido pelo sistema operacional, por exemplo, DDEML.DLL, VERSION.DLL ou WINSPOOL.DRV, não pôde ser encontrado. As causas e soluções desse erro são as seguintes:

•	O arquivo não está no caminho adequado.

Certifique-se de que a DLL esteja no caminho do Sistema do Windows.

•	A DLL está corrompida ou foi excluída.

Recarregue a DLL.

•	Não há memória suficiente ou espaço de troca.

Tente liberar alguma memória fechando outros aplicativos.


Can't use character device names in file names: 'item' (Error 320)
Não é possível usar nomes de dispositivo de caracteres em nomes de arquivos (Erro 320)

De dentro do Visual Basic, você não pode fornecer a um arquivo o mesmo nome de um driver de dispositivo de caracteres. A causa e a solução desse erro são as seguintes:

•	Você tentou usar um nome de arquivo como AUX, CON, COM1, COM2, LPT1, LPT2, LPT3, LPT4 ou NUL.

Forneça outro nome ao arquivo.


Formato de arquivo inválido (Erro 321)

Um arquivo de formulário do Visual Basic está danificado. As causas e soluções desse erro são as seguintes:

•	O formulário tem um controle ActiveX danificado.

Tente substituir o controle ActiveX do formulário.

•	O número de propriedades da versão atual do controle ActiveX não corresponde ao número de propriedades esperado.

Tente substituir o controle ActiveX por uma versão anterior ou posterior.


Illegal parameter. Can't write arrays (Error 328)
Parâmetro inválido. Não é possível gravar matrizes (Erro 328)

Foi passado ao método um parâmetro inválido. A causa e a solução desse erro são as seguintes:

•	No evento WriteProperties do seu Controle de usuário, você tentou fazer um PropBag.WriteProperty X, onde X é uma matriz. Isso não é suportado.

Você deve gravar cada elemento da matriz individualmente.


Não foi possível acessar o Registro do sistema (Erro 335)

Uma tentativa de leitura ou gravação no Registro do sistema falhou.


Servidor de objeto não encontrado (Erro 337)
Componente ActiveX não encontrado (Erro 337)

O arquivo obrigatório .exe ou .dll não pode ser encontrado.


O componente ActiveX não foi executado corretamente (Erro 338)

O arquivo .exe do componente ActiveX não pôde ser executado corretamente. Deve haver algum problema com as informações do Registro.


O objeto foi descarregado (Erro 364)

Um formulário foi descarregado do seu próprio procedimento _Load. A causa e a solução desse erro são as seguintes:

•	Um formulário com uma instrução Unload no seu procedimento _Load foi carregado implicitamente. Por exemplo, o que vem a seguir carregará implicitamente YourForm se ainda não estiver carregado:

MyForm.BackColor = YourForm.BackColor.

Remova a instrução Unload do procedimento Form_Load.


The file 'item' is out of date. This program requires a later version (Error 368)
O arquivo especificado está desatualizado. Este programa requer uma versão mais recente (Erro 368)

Foi encontrado um controle ActiveX desatualizado. A causa e a solução desse erro são as seguintes:

•	O número de propriedades na versão atual do controle ActiveX não corresponde ao número esperado de propriedades.

Substitua o controle ActiveX por uma versão mais recente.


Valor de propriedade inválido (Erro 380)

Um valor inadequado foi atribuído a uma propriedade. A causa e a solução desse erro são as seguintes:

•	Você tentou definir uma das propriedades de um objeto ou controle como um valor fora do seu intervalo permitido.

Altere o valor da propriedade para uma definição válida. Por exemplo, a propriedade MousePointer deve ser definida como um inteiro entre 0 e 15 ou 99.


A propriedade 'Item' não pode ser definida em tempo de execução (Erro 382)
A propriedade especificada não pode ser definida em tempo de execução (Erro 382)

A propriedade é somente leitura em tempo de execução. A causa e a solução desse erro são as seguintes:

•	Você tentou definir ou alterar uma propriedade cujo valor somente pode ser definido em tempo de criação.

Remova a referência à propriedade do seu código ou altere a referência para somente retornar o valor da propriedade em tempo de execução.


A propriedade 'Item' é somente leitura (Erro 383)
A propriedade especificada é somente leitura (Erro 383)

A propriedade é somente leitura tanto em tempo de criação quanto em tempo de execução. A causa e a solução desse erro são as seguintes:

•	Você tentou definir ou alterar uma propriedade cujo valor só pode ser lido.

Remova a referência à propriedade do seu código ou altere a referência para somente retornar o valor da propriedade em tempo de execução.


A propriedade 'Item' não pode ser lida em tempo de execução (Erro 393)
A propriedade especificada não pode ser lida em tempo de execução (Erro 393)

A propriedade está disponível somente em tempo de criação. A causa e a solução desse erro são as seguintes:

•	Você tentou ler uma propriedade em tempo de execução que está acessível somente em tempo de criação.

Altere o seu código e remova a referência à propriedade.


A propriedade 'Item' é somente gravação (Erro 394)
A propriedade especificada é somente gravação (Erro 394)

A propriedade não pode ser lida. A causa e a solução desse erro são as seguintes:

•	Uma propriedade não pode ser lida; por exemplo, ctl.property = 3 pode ser válida, mas "Print ctl.property" geraria este erro.

Altere o seu código e remova a referência à propriedade.


A permissão para usar o objeto foi negada (Erro 419)

Você não tem as permissões necessárias para o objeto especificado. A causa e a solução desse erro são as seguintes:

•	Atualmente você não tem autoridade para acessar esse objeto.

Para alterar as suas atribuições de permissão, consulte o seu administrador de sistema ou o autor do objeto.


Não é possível criar uma imagem AutoRedraw (Erro 480)

O Visual Basic não pode criar um bitmap persistente para redesenho automático do formulário ou figura. A causa e a solução desse erro são as seguintes:

•	Não há memória disponível suficiente para que a propriedade AutoRedraw seja definida como True.

Defina a propriedade AutoRedraw como False e execute o seu próprio redesenho no procedimento do evento Paint ou torne o controle PictureBox ou o objeto Form menor e tente a operação novamente com AutoRedraw definido como True.


Sem memória (Erro 31001)

O seu sistema não conseguiu alocar ou acessar memória suficiente ou espaço em disco para a operação especificada.


Nenhum objeto (Erro 31004)

Você tentou executar uma ação em um objeto que não existe.


A classe não está definida (Erro 31018)

Se você não especificar um documento de origem (propriedade SourceDoc) ao definir Action = 0 (método CreateEmbed), a propriedade Class deverá ser definida com o nome de uma classe disponível no seu sistema.

Para exibir uma lista dos nomes de classe disponíveis em tempo de criação, clique no controle de recipiente OLE com o botão direito do mouse e escolha o comando Inserir objeto.


Não foi possível ativar o objeto (Erro 31027)

O documento de origem do objeto não pode ser carregado ou o aplicativo que criou o objeto não está disponível.

Esse erro ocorre quando você tenta ativar um objeto vinculado (define Action = 7) e o arquivo especificado na propriedade SourceDoc foi excluído ou não existe mais.

Ocorre também quando você ativa um objeto (define Action = 7) e a ação especificada pela propriedade Verb não é válida. Alguns aplicativos que fornecem objetos podem suportar diferentes verbos, dependendo do estado do aplicativo. Todos os verbos suportados por um aplicativo são relacionados na lista de propriedades ObjectVerbs. Entretanto, alguns verbos podem não ser válidos para o estado atual do aplicativo.


Não foi possível criar o objeto incorporado (Erro 31032)

O aplicativo que está criando o objeto não pode criar o objeto conforme está especificado na propriedade SourceDoc.

Por exemplo, esse erro ocorrerá se você tentar incorporar um objeto de planilha e SourceDoc especificar uma planilha que é grande demais para ser carregada pelo aplicativo de planilha.


Erro ao salvar no arquivo (Erro 31036)

O Visual Basic não pode gravar o objeto no arquivo especificado (definiu Action = 11 ou 18). Causas possíveis:

•	A propriedade FileNumber é inválida.

•	O arquivo especificado não foi aberto no modo Binary.

•	Não há espaço suficiente no disco.


Erro ao carregar do arquivo (Erro 31037)

Ocorreu um erro ao tentar ler o arquivo especificado (definiu Action = 12). Causas possíveis:

•	A propriedade FileNumber é inválida.

•	O arquivo não foi aberto no modo Binário.

•	O arquivo não foi salvo corretamente (definiu Action = 11).

•	O arquivo está corrompido.

•	A posição do arquivo não é no início de um objeto OLE válido.


Na linha especificada: O nome de Form especificado não é válido; não é possível carregar esse formulário.
Na linha especificada: O nome de Form especificado não é válido; não é possível carregar esse formulário

O arquivo ASCII contém um nome de formulário que não é uma seqüência de caracteres válida no Visual Basic. O formulário não é carregado.


Na linha especificada: Não é possível criar o objeto incorporado especificado

Um objeto incorporado não pôde ser criado durante o carregamento de um formulário, Controle de usuário, Documento de usuário ou Página de propriedade a partir de um arquivo de texto. Por exemplo, este erro ocorreria se você tivesse inserido anteriormente um documento do Microsoft Word no formulário e, em seguida, removido o Microsoft Word do seu sistema. Essa mensagem é gravada no arquivo de log de erros.


Na linha especificada: Não é possível criar o objeto incorporado especificado; licença não encontrada

Um objeto incorporado não pôde ser criado durante o carregamento de um formulário, Controle de usuário, Documento de usuário ou Página de propriedade a partir de um arquivo de texto, porque o arquivo de licença não foi encontrado. Você deve ter uma licença para usar este objeto. Consulte o fornecedor do objeto para obter maiores informações. Essa mensagem é gravada no arquivo de log de erros.


Na linha especificada: O nível máximo de aninhamento para controles excedeu o item especificado.
Na linha especificada: O nível máximo de aninhamento para controles excedeu o item especificado

O arquivo ASCII contém controles aninhados com mais de 7 níveis.


Na linha especificada: Todos os controles devem preceder menus; não é possível carregar o controle especificado.
Na linha especificada: Todos os controles devem preceder menus; não é possível carregar o controle especificado

Apareceu um controle em um local incorreto no arquivo de formulário ASCII. Todos os controles devem ser carregados antes dos menus.


Na linha especificada: O menu pai especificado não pode ser carregado como um separador

O arquivo ASCII contém um controle Menu cujo menu pai ou de nível superior é definido como um separador de menu. Os menus de nível superior não podem ser separadores de menus. O separador não será definido.


Na linha especificada: Não é possível definir a propriedade marcada no menu especificado. O menu pai não pode ser marcado.
Na linha especificada: Não é possível definir a propriedade marcada no menu especificado. O menu pai não pode ser marcado

Um controle Menu de nível superior apareceu no arquivo de formulário ASCII com a sua propriedade Checked definida como True. Os menus de nível superior não podem ser marcados. O controle Menu será carregado, mas a sua propriedade Checked não será definida.


Na linha especificada: Não é possível definir a propriedade Shortcut no menu especificado. O menu pai não pode ter uma tecla de atalho.
Na linha especificada: Não é possível definir a propriedade Shortcut no menu especificado. O menu pai não pode ter uma tecla de atalho

Um controle Menu de nível superior apareceu no arquivo de formulário ASCII com uma tecla de atalho definida. Os menus de nível superior não podem ter uma tecla de atalho. O controle Menu será carregado, mas a sua propriedade Shortcut não será definida.


Na linha especificada: O nome de formulário especificado já está sendo usado; não é possível carregar esse formulário

O arquivo ASCII contém um formulário com um nome que já está em uso no aplicativo. O formulário não é carregado.


Foram encontrados atributos conflitantes no item especificado. Serão usados os padrões.
Foram encontrados atributos conflitantes no item especificado. Serão usados os padrões

Algumas das instruções de atributo em um formulário, Controle de usuário, Página de propriedade, Documento de usuário ou Módulo de classe conflitam com as definições obrigatórias para o tipo delas. Por exemplo, os formulários devem ter sempre o atributo VB_PredeclaredId igual a True. Esse erro pode ocorrer se o arquivo foi modificado por um editor diferente do Visual Basic.


O item especificado é um arquivo somente leitura

Você pediu o salvamento de um arquivo que é somente leitura. Os arquivos somente leitura são mostrados no Project Explorer como [image]. Você não pode salvar arquivos somente leitura. Em vez disso, use Salvar como.


Na linha especificada: Não foi possível criar a referência especificada

A referência indicada na linha especificada não pôde ser criada.


Na linha especificada: O arquivo especificado não pôde ser carregado.
Na linha especificada: O arquivo especificado não pôde ser carregado

Erros de sintaxe estão impedindo o Visual Basic de analisar e carregar um arquivo ou conflitos de nome de formulário impedem o carregamento de um formulário ASCII. O formulário não será carregado e o nome do formulário não será exibido no Explorer do projeto.

Certifique-se de que o arquivo que esteja provocando esse erro seja um formulário ASCII válido no formato correto e que não existam conflitos entre os diferentes formulários do projeto.


Ocorreram erros durante o carregamento

Verifique o log de erros para obter informações mais descritivas.


O item especificado não pôde ser carregado. Removê-lo da lista de suplementos disponíveis?

O Visual Basic não pôde carregar o suplemento que você tentou selecionar na lista Suplementos disponíveis na caixa de diálogo Gerenciador de suplementos. Clique em Sim para removê-lo da lista ou em Não para deixá-lo na lista. Em qualquer um dos casos, você não poderá carregá-lo.


O Visual Basic não pode carregar o item especificado porque ele não está no Registro do sistema. Certifique-se de que todos os suplementos foram instalados corretamente.
O Visual Basic não pode carregar o item especificado porque ele não está no Registro do sistema. Certifique-se de que todos os suplementos foram instalados corretamente

O Visual Basic não pôde carregar o suplemento que você tentou selecionar na lista Suplementos disponíveis na caixa de diálogo Gerenciador de suplementos, pois ele não estava devidamente registrado ou não está mais registrado no Registro do sistema.


Exibir mais erros que carregamento?
Exibir mais erros de carregamento?

Clique em OK para ver mais erros; caso contrário, clique em Cancelar.


O item especificado não pôde ser carregado

Erros de sintaxe estão impedindo o Visual Basic de analisar e carregar um arquivo ou conflitos de nome de formulário impedem o carregamento de um formulário ASCII. O formulário não será carregado e o nome do formulário não será exibido no Project Explorer.

Certifique-se de que o arquivo que esteja provocando esse erro seja um formulário ASCII válido no formato correto e que não existam conflitos entre os diferentes formulários do projeto.


Número de versão ausente ou inválido

A assinatura da versão não foi encontrada ou a versão especificada não é reconhecida. Certifique-se de que a primeira linha que não esteja em branco ou que um comentário no formulário ASCII especifique a versão correta.


O item especificado faz referência ao projeto especificado e este não pode ser atualizado

Mais de um projeto refere-se ao controle especificado. Sua atualização para um projeto pode invalidá-lo para outro.


Não é possível remover o controle ou a referência; em uso

O controle ActiveX ou a referência que você tentou remover está sendo usado por um dos formulários no projeto. Primeiro exclua o controle ou objeto referido do formulário e, em seguida, cancele a seleção na lista.


Não é possível encerrar agora

Você não pode encerrar o Windows enquanto o Visual Basic estiver em modo de execução ou em modo interromper. Também não pode encerrar o Windows enquanto uma caixa de diálogo ou caixa de mensagem estiver sendo exibida.


Erro ao carregar o item especificado. Foi encontrado um erro ao carregar uma propriedade. Continuar?

Você pode ter tentado carregar um formulário com controles cujos nomes conflitam com formulários já existentes no projeto. Por exemplo, carregar Form2 que contém um controle Form1 dispara esse erro.


Erro ao carregar o item especificado. Um controle não pôde ser carregado devido ao erro de carregamento. Continuar?

Esta mensagem de erro aparece após um outro erro ter ocorrido. Após você ter tomado a ação apropriada para aquele erro, verá essa mensagem de erro. Para carregar o controle de qualquer maneira, clique em Sim; para cancelar o carregamento, clique em Não.


O item especificado tem um formato de arquivo antigo. Quando for salvo, será em um formato de arquivo mais recente.
O item especificado tem um formato de arquivo antigo. Quando for salvo, será em um formato de arquivo mais recente

Esse arquivo foi criado com uma versão mais antiga do Visual Basic. Quando você salvá-lo, ele será salvo no formato de arquivo da versão atual.


O item especificado já existe no projeto

O arquivo que você especificou já faz parte do projeto. Você não pode adicionar o mesmo arquivo a um projeto mais de uma vez. Você não pode salvar um arquivo com o mesmo nome de outro arquivo do projeto.


Erros durante o carregamento. Consulte o item especificado para obter detalhes

Algo inesperado apareceu no arquivo de formato ASCII. O Visual Basic criou um arquivo de log para fornecer mais detalhes sobre os erros. Você deve examinar o arquivo de log para determinar a gravidade do problema. Algumas vezes você pode ignorar com segurança os erros (por exemplo, Número de versão ausente ou inválido...). Outras vezes, entretanto, os erros poderiam fazer o formulário não ser executado como esperado (por exemplo, Classe MyClass no controle MyControl não era uma classe de controle carregada).


Valor de seqüência de caracteres muito longo para ser processado; carregamento do formulário anulado

Uma seqüência de caracteres incorporada no formulário que estava sendo carregado era muito longa para ser processada.


Um ou mais arquivos do projeto foram alterados. Deseja salvar as alterações agora?

Uma das definições de propriedade ou uma instrução de código foi alterada em um ou mais arquivos no projeto e as alterações ainda não foram salvas. Esta é a sua última chance de salvar as alterações antes de carregar outro projeto.


Item' não pôde ser registrado
O item especificado não pôde ser registrado

O arquivo especificado não pôde ser registrado no Registro do sistema. O erro está relacionado com as bibliotecas de tipos usadas por componentes do ambiente de desenvolvimento do Visual Basic e indica que a entrada do arquivo especificado no Registro do sistema está corrompida ou que a própria DLL está ausente ou corrompida.


Outros aplicativos estão acessando um objeto de seu programa atualmente. Terminar o programa agora poderia causar erros nesses programas. Terminar o programa agora?

Um objeto de automação no programa do Visual Basic que você está executando atualmente está sendo acessado pelo menos por um outro aplicativo. Terminar o seu programa causaria um erro no outro aplicativo. Clique em Sim para encerrar o seu programa ou clique em Não para continuá-lo.


Uma ou mais propriedades do item especificado eram inválidas. Algumas ou todas as propriedades podem não ter sido definidas corretamente.
Uma ou mais propriedades do item especificado eram inválidas. Algumas ou todas as propriedades podem não ter sido definidas corretamente

O arquivo de projeto especificado tem uma ou mais definições de propriedade inválidas. Esse erro ocorre somente em relação a um arquivo de projeto.


Foram encontrados nomes conflitantes no item especificado. O nome especificado será usado.
Foram encontrados nomes conflitantes no item especificado. O nome especificado será usado

O nome de um formulário ocorre duas vezes no arquivo de origem de um formulário, Controle de usuário, Página de propriedade ou Documento de usuário. Esse erro pode ocorrer se o arquivo foi modificado por um editor diferente do Visual Basic.


Na linha especificada: O nome de controle especificado é inválido.
Na linha especificada: O nome de controle especificado é inválido

O arquivo ASCII contém um nome de controle que não é uma seqüência de caracteres válida no Visual Basic. O controle não é carregado.


Na linha especificada: O nome de propriedade especificado é inválido.
Na linha especificada: O nome de propriedade especificado é inválido

O arquivo ASCII contém um nome de propriedade que não é uma propriedade válida para esse controle.


O item na linha especificada tem uma seqüência de caracteres delimitada por aspas onde deveria estar o nome da propriedade.
O item na linha especificada tem uma seqüência de caracteres delimitada por aspas onde deveria estar o nome da propriedade

Apareceu uma seqüência de caracteres delimitada por aspas no arquivo de formulário ASCII onde era esperado o nome da propriedade. Os nomes de propriedade não são colocados entre aspas (" ").


Na linha especificada: A propriedade especificada tinha um índice de propriedade inválido.
Na linha especificada: A propriedade especificada tinha um índice de propriedade inválido

O arquivo ASCII contém um nome de propriedade com um índice de propriedade maior que 255.


Na linha especificada: A propriedade especificada não pôde ser carregada.
Na linha especificada: A propriedade especificada não pôde ser carregada

O arquivo ASCII contém uma propriedade desconhecida. A propriedade será ignorada ao carregar o formulário.


Na linha especificada: A propriedade especificada deve ser uma seqüência de caracteres delimitada por aspas.
Na linha especificada: A propriedade especificada deve ser uma seqüência de caracteres delimitada por aspas

O arquivo ASCII contém uma propriedade que deveria aparecer entre aspas (" "), mas as aspas estão ausentes. Essa linha na descrição do formulário é ignorada.


Na linha especificada: A propriedade especificada tinha um valor inválido.
Na linha especificada: A propriedade especificada tinha um valor inválido

O arquivo ASCII contém uma propriedade com um valor que não está correto para este controle. A propriedade é definida com o seu valor padrão.


Na linha especificada: A propriedade especificada tinha uma referência de arquivo inválida.
Na linha especificada: A propriedade especificada tinha uma referência de arquivo inválida

O arquivo ASCII contém uma referência a um arquivo que o Visual Basic não pôde encontrar no diretório especificado.


Na linha especificada: A propriedade especificada não pôde ser definida.
Na linha especificada: A propriedade especificada não pôde ser definida

O Visual Basic não pode definir a propriedade do controle especificado conforme indicado pela descrição do formulário no arquivo ASCII.


Na linha especificada:  A classe especificada do controle especificado não era uma classe de controle carregada.
Na linha especificada:  A classe especificada do controle especificado não era uma classe de controle carregada

O arquivo ASCII contém uma classe de controle que o Visual Basic não reconhece. Adicione o controle personalizado com essa classe ao seu projeto.


Na linha especificada: Não foi encontrada uma propriedade de índice e o controle especificado já existe.
Na linha especificada: Não foi encontrada uma propriedade de índice e o controle especificado já existe

O controle não pode ser carregado porque não há índice e ele possui o mesmo nome do controle carregado anteriormente.


Na linha especificada: Nome de controle muito longo; truncado como especificado.
Na linha especificada: Nome de controle muito longo; truncado como especificado

O arquivo ASCII contém um nome de controle com mais de 40 caracteres. O controle será carregado com o nome truncado para 40 caracteres.


Na linha especificada: Nome de classe muito longo; truncado como especificado.
Na linha especificada: Nome de classe muito longo; truncado como especificado

O arquivo ASCII contém um nome de classe com mais de 40 caracteres. A classe será carregada com o nome truncado para 40 caracteres.


Na linha especificada: Erro de sintaxe: na propriedade especificada estava faltando um sinal de igual (=).
Na linha especificada: Erro de sintaxe: na propriedade especificada estava faltando um sinal de igual (=)

O arquivo ASCII contém um nome e um valor de propriedade sem um sinal de igual (=) entre eles. A propriedade não é carregada.


Na linha especificada: Não é possível carregar o controle especificado; o controle recipiente não é um recipiente válido.
Na linha especificada: Não é possível carregar o controle especificado; o controle recipiente não é um recipiente válido

Você tentou carregar um controle em um controle que não é um recipiente válido.


Na linha especificada: Não é possível carregar o controle especificado; o nome já está sendo usado.
Na linha especificada: Não é possível carregar o controle especificado; o nome já está sendo usado

O controle nomeado no arquivo de texto ASCII não pôde ser carregado porque o seu nome já está sendo usado no aplicativo.


Na linha especificada: Classe de controle ausente ou inválida no arquivo especificado.
Na linha especificada: Classe de controle ausente ou inválida no arquivo especificado

O arquivo ASCII contém uma classe de controle desconhecida na descrição do formulário ou o nome da classe não é uma seqüência de caracteres válida no Visual Basic.


Na linha especificada: Nome de controle ausente ou inválido no arquivo especificado.
Na linha especificada: Nome de controle ausente ou inválido no arquivo especificado

O arquivo ASCII contém um nome de controle desconhecido na descrição do formulário ou o nome do controle não é uma seqüência de caracteres válida no Visual Basic.


Na linha especificada: Não é possível carregar o controle especificado; licença não encontrada.
Na linha especificada: Não é possível carregar o controle especificado; licença não encontrada

Um controle AciveX não pôde ser criado durante o carregamento de um formulário, Controle de usuário, Documento de usuário ou Página de propriedade a partir de um arquivo de texto. O controle pode estar ausente ou corrompido. Reinstale o controle e tente novamente. Essa mensagem é gravada no arquivo de log de erros.


Na linha especificada: O CLSID especificado é inválido.
Na linha especificada: O CLSID especificado é inválido

Um objeto não pôde ser carregado durante o carregamento de um Formulário, Controle de usuário, Documento de usuário ou Página de propriedade a partir de um arquivo de texto. O CLSID especificado no arquivo não é válido. Aplica-se somente aos objetos que são propriedades, como o objeto Font. Essa mensagem é gravada no arquivo de log de erros.


Não foi possível criar referência ao item especificado

Houve um erro ao estabelecer uma referência enquanto o arquivo era carregado; portanto, a referência não foi adicionada.


O item especificado não será carregado. O nome já está sendo usado

Você não pode ter dois itens do tipo especificado carregados ao mesmo tempo.


Exemplo da instrução ChDir

Este exemplo usa a instrução ChDir para alterar o diretório ou pasta atual.  No Macintosh, o nome da unidade padrão é “HD” e as partes do nome do caminho são separadas por dois pontos em vez de barras invertidas. De modo semelhante, você especificaria as pastas Macintosh no lugar de \Windows. Finalmente, os caracteres curinga não têm significado especial no Macintosh e são tratados simplesmente como caracteres.

' Alterar o diretório ou pasta atual para "MEUDIR".

ChDir "MEUDIR"

' Assumir "C:" como a unidade atual. A instrução a seguir altera

' o diretório padrão na unidade "D:". "C:" permanece a unidade atual.

ChDir "D:\WINDOWS\SYSTEM"


Exemplo da instrução ChDrive

Este exemplo usa a instrução ChDrive para alterar a unidade atual. No Macintosh, “HD:” é o nome da unidade padrão e ChDrive altera a pasta atual para a pasta raiz da unidade especificada. O exemplo a seguir assume que a máquina realmente tem uma unidade nomeada D.

ChDrive "D"	' Tornar "D" a unidade atual.


Exemplo da função CurDir

Este exemplo usa a função CurDir para retornar o caminho atual.  No Macintosh, as especificações da unidade fornecidas para CurDir são ignoradas. O nome da unidade padrão é “HD” e as partes do nome do caminho são separadas por dois pontos em vez de barras invertidas. De modo semelhante, você especificaria as pastas Macintosh em vez de \Windows.

' Assumir que o caminho atual na unidade C é "C:\WINDOWS\SYSTEM" (no Microsoft Windows).

' Assumir que o caminho atual na unidade D é "D:\EXCEL".

' Assumir C como a unidade atual.

Dim MyPath

MyPath = CurDir	' Retorna "C:\WINDOWS\SYSTEM".

MyPath = CurDir("C")	' Retorna "C:\WINDOWS\SYSTEM".

MyPath = CurDir("D")	' Retorna "D:\EXCEL".


Exemplo da função Dir

Este exemplo usa a função Dir para verificar se determinados arquivos e diretórios existem. No Macintosh, “HD:” é o nome da unidade padrão e as partes do nome do caminho são separadas por dois pontos em vez de barras invertidas. Além disso, os caracteres curinga do Microsoft Windows são tratados como caracteres de nome de arquivo válidos no Mac. No entanto, você pode usar a função MacID para especificar os grupos de arquivos.

Dim MyFile, MyPath, MyName

' Retorna "WIN.INI" (no Microsoft Windows) se existir.

MyFile = Dir("C:\WINDOWS\WIN.INI")

' Retorna o nome do arquivo com a extensão especificada. Se existir mais de um arquivo *.ini,

' o primeiro arquivo encontrado será retornado.

MyFile = Dir("C:\WINDOWS\*.INI")

' Chamar Dir novamente sem argumentos para retornar o próximo arquivo *.INI no

' mesmo diretório.

MyFile = Dir

' Retornar primeiro arquivo *.TXT com um atributo oculto definido.

MyFile = Dir("*.TXT", vbHidden)

' Exibir os nomes em C:\ que representam diretórios.

MyPath = "c:\"	' Definir o caminho.

MyName = Dir(MyPath, vbDirectory)	' Recuperar a primeira entrada.

Executar While MyName <> ""	' Iniciar o loop.

' Ignorar o diretório atual e o diretório abrangente.

If MyName <> "." And MyName <> ".." Então

' Usar a comparação bit a bit para se certificar de que MyName é um diretório.

If (GetAttr(MyPath & MyName) And vbDirectory) = vbDirectory Then

Debug.Print MyName	' Exibir a entrada somente se

End If	' representar um diretório.

End If

MyName = Dir	' Obter próxima entrada.

Loop


Exemplo da função Environ

Este exemplo usa a função Environ para fornecer o número de entrada e comprimento de instrução PATH da tabela de seqüências de caracteres de ambiente. Não disponível no Macintosh.

Dim EnvString, Indx, Msg, PathLen	' Declara as variáveis.

Indx = 1	' Inicializar o índice como 1.

Do

EnvString = Environ(Indx)	' Obter a variável

' de ambiente.

If Left(EnvString, 5) = "PATH=" Then	' Verificar a entrada PATH.

PathLen = Len(Environ("PATH"))	' Obter o comprimento.

Msg = "entrada PATH = " & Indx & " e comprimento = " & PathLen

Exit Do

Else

Indx = Indx + 1	' Não há entrada PATH,

End If	' então incrementar.

Loop Until EnvString = ""

If PathLen > 0 Then

MsgBox Msg	' Exibe a mensagem.

Else

MsgBox "Não existe a variável de ambiente PATH."

End If


Exemplo da instrução FileCopy

Este exemplo usa a instrução FileCopy para copiar um arquivo em outro. Para este exemplo, pressuponha que ARQORIG é um arquivo que contém alguns dados.

Dim SourceFile, DestinationFile

SourceFile = "ARQORIG"	' Definir o nome do arquivo de origem.

DestinationFile = "ARQDEST"	' Definir o nome do arquivo de destino.

FileCopy SourceFile, DestinationFile	' Copiar a origem no destino.


Exemplo da função FileDateTime

Este exemplo usa a função FileDateTime para determinar a data e a hora em que um arquivo foi criado ou modificado pela última vez. O formato da data e hora exibido é baseado nas definições de localidade do seu sistema.

Dim MyStamp

' Assumir que ARQTESTE foi modificado pela última vez em 12 de fevereiro de 1993, às 4:35:47 PM.

' Assumir as definições de localidade Inglês/EUA.

MyStamp = FileDateTime("ARQTESTE")	' Retorna "2/12/93 4:35:47 PM".


Exemplo da função FileLen

Este exemplo usa a função FileLen para retornar o comprimento de um arquivo em bytes. Para este exemplo, suponha que ARQTESTE é um arquivo que contém alguns dados.

Dim MySize

MySize = FileLen("ARQTESTE")	' Retorna o comprimento do arquivo (bytes).


Exemplo da função GetAttr

Este exemplo usa a função GetAttr para determinar os atributos de um arquivo e diretório ou pasta. No Macintosh, apenas as constantes vbNormal, vbReadOnly, vbHidden e vbAlias estão disponíveis.

Dim MyAttr

' Assumir que o arquivo ARQTESTE tem o atributo oculto definido.

MyAttr = GetAttr("ARQTESTE")	' Retorna 2.

' Retorna um valor diferente de zero se o atributo oculto for definido em ARQTESTE.

Debug.Print MyAttr And vbHidden

' Assumir que o arquivo ARQTESTE tem os atributos oculto e somente leitura definidos.

MyAttr = GetAttr("ARQTESTE")	' Retorna 3.

' Retorna um valor diferente de zero se o atributo oculto for definido em ARQTESTE.

Debug.Print MyAttr And (vbHidden + vbReadOnly)

' Assumir que MEUDIR é um diretório ou pasta.

MyAttr = GetAttr("MEUDIR")	' Retorna 16.


Exemplo da instrução Kill

Este exemplo usa a instrução Kill para excluir um arquivo de um disco.

' Assumir que ARQTESTE é um arquivo que contém alguns dados.

Kill "ArqTeste"	' Excluir o arquivo.

' Excluir todos os arquivos *.TXT do diretório atual.

Kill "*.TXT"


Exemplo da instrução MkDir

Este exemplo usa a instrução MkDir para criar um diretório ou pasta. Se a unidade de disco não for especificada, o novo diretório ou pasta será criado na unidade atual.

MkDir "MEUDIR"	' Criar novo diretório ou pasta.


Exemplo da instrução Name

Este exemplo usa a instrução Name para renomear um arquivo. Para este exemplo, suponha que os diretórios ou pastas especificados já existem.  No Macintosh, “HD:” é o nome da unidade padrão e as partes do nome do caminho são separadas por dois pontos em vez de barras invertidas.

Dim OldName, NewName

OldName = "ARQANT": NewName = "NOVOARQ"	' Definir nomes de arquivos.

Name OldName As NewName	' Renomear arquivo.

OldName = "C:\MEUDIR\ARQANT": NewName = "C:\SEUDIR\NOVOARQ"

Name OldName As NewName	' Mover e renomear arquivo.


Exemplo da função QBColor

Este exemplo usa a função QBColor para alterar a propriedade BackColor do formulário passado como MyForm para a cor indicada por ColorCode. QBColor aceita valores inteiros entre 0 e 15.

Sub ChangeBackColor (ColorCode As Integer, MyForm As Form)

MyForm.BackColor = QBColor(ColorCode)

End Sub


Exemplo da função RGB

Este exemplo mostra como a função RGB é usada para retornar um número inteiro que representa um valor de cor RGB. Ela é usada em métodos e propriedades de aplicativo que aceitam uma especificação de cor. O objeto MyObject e a sua propriedade são usados somente com finalidades ilustrativas. Se MyObject não existir, ou se não tiver uma propriedade Color, ocorrerá um erro.

Dim RED, I, RGBValue, MyObject

Red = RGB(255, 0, 0)	' Retornar o valor para Red.

I = 75	' Inicializar o deslocamento.

RGBValue = RGB(I, 64 + I, 128 + I) 	' Igual a RGB(75, 139, 203).

MyObject.Color = RGB(255, 0, 0)	' Definir a propriedade Color de

' MyObject como Red.


Exemplo da instrução RmDir

Este exemplo usa a instrução RmDir para remover um diretório ou pasta existente.

' Assumir que MEUDIR é um diretório ou pasta vazia.

RmDir "MEUDIR"	' Remover MEUDIR.


Exemplo da instrução SetAttr

Este exemplo usa a instrução SetAttr para definir atributos para um arquivo. No Macintosh, apenas as constantes vbNormal, vbReadOnly, vbHidden e vbAlias estão disponíveis.

SetAttr "ARQTESTE", vbHidden	' Definir atributo oculto.

SetAttr "ARQTESTE", vbHidden + vbReadOnly	' Definir atributos

' oculto e somente leitura.


Instrução ChDir

Altera o diretório ou pasta atual.

Sintaxe

ChDir path

O argumento path obrigatório é uma expressão de seqüência que identifica qual diretório ou pasta se torna o novo diretório ou pasta padrão. O path pode incluir a unidade. Se nenhuma unidade for especificada, ChDir altera o diretório ou pasta padrão na unidade atual.

Comentários

A instrução ChDir altera o diretório padrão, mas não a unidade padrão. Por exemplo, se a unidade padrão for C, a instrução a seguir altera o diretório padrão na unidade D, mas C permanece como unidade padrão:

ChDir "D:\TMP"

No Power Macintosh, a unidade padrão sempre é alterada para a unidade especificada em path. As especificações completas de caminho começam com o nome do volume e os caminhos relativos começam com dois-pontos (:). ChDir resolve qualquer alias especificado no caminho:

ChDir "MacDrive:Tmp"	' No Macintosh.

Observe que, ao fazer alterações de diretório relativas, são usados símbolos diferentes no Microsoft Windows e no Macintosh:

ChDir ".."	' Move um diretório para cima no Microsoft Windows.

ChDir "::"	' Move um diretório para cima no Macintosh.


Instrução ChDrive

Altera a unidade atual.

Sintaxe

ChDrive drive

O argumento drive obrigatório é uma expressão de seqüência que especifica uma unidade existente. Se você fornecer uma seqüência de comprimento zero (""), a unidade atual não será alterada. Se o argumento drive for uma seqüência de múltiplos caracteres, CdDrive usará somente a primeira letra.

No Macintosh, ChDrive altera a pasta atual para a pasta raiz da unidade especificada.


Função CurDir

Retorna um Variant (String) representando o caminho atual.

Sintaxe

CurDir[(drive)]

O argumento drive opcional é uma expressão de seqüência que especifica uma unidade existente. Se não for especificada uma unidade ou se drive for uma seqüência de comprimento zero (""), CurDir retorna o caminho para a unidade atual. No Macintosh, CurDir ignora qualquer drive especificada e simplesmente retorna o caminho da unidade atual.


Função Dir

Retorna uma String que representa o nome de um arquivo, diretório ou pasta que corresponde a um padrão ou atributo de arquivo especificado ou o rótulo de volume de uma unidade.

Sintaxe

Dir[(pathname[, attributes])]

A sintaxe da função Dir possui as partes a seguir:

Parte	Descrição
pathname	Opcional. Expressão de seqüência que especifica um nome de arquivo – pode incluir o diretório ou a pasta e a unidade. Retorna uma seqüência de comprimento zero ("") se pathname não for encontrado.
attributes	Opcional. Constante ou expressão numérica, cuja soma especifica atributos de arquivo. Se omitido, retorna arquivos que correspondem ao pathname mas não possuem atributos.
Definições

As configurações do argumento attributes são:

Constante	Valor	Descrição
vbNormal	0	(Padrão) Especifica os arquivos que não possuem atributos.
vbReadOnly	1	Especifica arquivos somente leitura além dos arquivos que não possuem atributos.
vbHidden	2	Especifica arquivos ocultos além dos arquivos que não possuem atributos.
VbSystem	4	Especifica arquivos do sistema além dos arquivos que não possuem atributos. Não disponível no Macintosh.
vbVolume	8	Especifica rótulo de volume; se qualquer outro atributo for especificado, vbVolume será ignorado. Não disponível no Macintosh.
vbDirectory	16	Especifica diretórios ou pastas além dos arquivos que não possuem atributos.
vbAlias	64	O nome do arquivo especificado é um alias. Disponível somente no Macintosh.
Observação   Estas constantes são especificadas pelo Visual Basic for Applications e podem ser usadas em qualquer parte do seu código no lugar dos valores reais.

Comentários

No Microsoft Windows, Dir aceita o uso de curingas de múltiplos caracteres (*) e de um único caractere (?) para a especificação de múltiplos arquivos.  No Macintosh, esses caracteres são tratados como caracteres de nomes de arquivo válidos e não podem ser usados como curingas para especificar múltiplos arquivos.

Como o Macintosh não aceita os curingas, use o tipo de arquivo para identificar grupos de arquivos. Você pode usar a função MacID para especificar o tipo de arquivo em vez de usar os nomes de arquivo. Por exemplo, a instrução a seguir retorna o nome do primeiro arquivo TEXT da pasta atual:

Dir("AlgumCaminho", MacID("TEXT"))

Para iterar todos os arquivos em uma pasta, especifique uma seqüência de caracteres vazia:

Dir("")

Se você usar a função MacID com Dir no Microsoft Windows, ocorrerá um erro.

Qualquer valor de attribute maior que 256 é considerado um valor MacID.

Você deve especificar pathname na primeira vez que chamar a função Dir ou um erro será gerado. Se especificar também atributos de arquivo, será necessário incluir pathname.

Dir retorna o primeiro nome de arquivo que corresponda a pathname. Para obter qualquer nome de arquivo adicional que corresponda a pathname, chame Dir novamente sem argumentos. Quando não houver mais nenhum nome de arquivo correspondente, Dir retornará uma seqüência de comprimento zero (""). Uma vez que essa seqüência seja retornada, você deverá especificar pathname em chamadas subseqüentes ou um erro será gerado. Você pode mudar para um novo pathname sem recuperar todos os nomes de arquivo que correspondam ao pathname atual. Entretanto, você não pode chamar a função Dir recorrentemente. Chamar Dir com o atributo vbDirectory não retorna subdiretórios continuamente.

Dica   Em razão de os nomes de arquivo serem recuperados sem nenhuma ordem em particular, pode ser que você deseje armazenar nomes de arquivo retornados em uma matriz e, em seguida, classificá-la.


Função Environ

Retorna a String associada a uma variável de ambiente do sistema operacional. Não disponível no Macintosh.

Sintaxe

Environ({envstring | number})

A sintaxe da função Environ tem os seguintes argumentos nomeados:

Parte	Descrição
envstring	Opcional. Expressão de seqüência de caracteres que contém o nome de uma variável de ambiente.
number	Opcional. Expressão numérica que corresponde à ordem numérica da seqüência de caracteres de ambiente na tabela de seqüência de caracteres de ambiente. O argumento number pode ser qualquer expressão numérica, mas será arredondado para um número inteiro antes de ser avaliado.
Comentários

Se envstring não puder ser encontrado na tabela de seqüência de caracteres de ambiente, uma seqüência de comprimento zero ("") será retornada. Caso contrário, Environ retornará o texto atribuído ao envstring especificado, isto é, o texto subseqüente ao sinal de igual (=) na tabela de seqüência de caracteres de ambiente daquela variável de ambiente.

Se você especificar number, a seqüência de caracteres que ocupa aquela posição numérica na tabela de seqüência de caracteres de ambiente será retornada. Neste caso, Environ retornará todo o texto, incluindo envstring. Se não houver seqüência de caracteres de ambiente na posição especificada, Environ retornará uma seqüência de comprimento zero.


Instrução FileCopy

Copia um arquivo.

Sintaxe

FileCopy source, destination

A sintaxe da instrução FileCopy tem os seguintes argumentos nomeados:

Parte	Descrição
source	Obrigatória. Expressão de seqüência de caracteres que especifica o nome do arquivo a ser copiado. A parte source pode incluir diretório ou pasta e unidade de disco.
destination	Obrigatória. Expressão de seqüência de caracteres que especifica o nome do arquivo de destino. O destination pode incluir diretório ou pasta e unidade de disco.
Comentários

Se você tentar usar a instrução FileCopy em um arquivo atualmente aberto, um erro será gerado.


Função FileDateTime

Retorna uma Variant (Date) que indica a data e hora em que um arquivo foi criado ou modificado pela última vez.

Sintaxe

FileDateTime(pathname)

O argumento pathname obrigatório é uma expressão de seqüência de caracteres que especifica um nome de arquivo. O pathname pode incluir o diretório ou pasta e a unidade.


Função FileLen

Retorna um Long que especifica o comprimento de um arquivo em bytes.

Sintaxe

FileLen(pathname)

O argumento pathname obrigatório é uma expressão de seqüência de caracteres que especifica um arquivo. O pathname pode incluir o diretório ou pasta e a unidade.

Comentários

Se o arquivo especificado estiver aberto quando a função FileLen for chamada, o valor retornado representa o tamanho do arquivo imediatamente antes de ele ser aberto.

Observação   Para obter o comprimento de um arquivo aberto, use a função LOF.


Função GetAttr

Retorna um Integer que representa os atributos de um arquivo, diretório ou pasta.

Sintaxe

GetAttr(pathname)

O argumento pathname obrigatório é uma expressão de seqüência de caracteres que especifica um nome de arquivo. O pathname pode incluir o diretório ou pasta e a unidade.

Valores retornados

O valor retornado por GetAttr é a soma dos valores de atributos a seguir:

Constante	Valor	Descrição
vbNormal	0	Normal.
vbReadOnly	1	Somente leitura.
vbHidden	2	Oculto.
vbSystem	4	Arquivo do sistema. Não disponível no Macintosh.
vbDirectory	16	Diretório ou pasta.
vbArchive	32	O arquivo foi alterado após o último backup. Não disponível no Macintosh.
vbAlias	64	O nome do arquivo especificado é um alias. Disponível somente no Macintosh.
Observação   Essas constantes são especificadas pelo Visual Basic for Applications. Os nomes podem ser utilizados em qualquer parte do seu código no lugar dos valores reais.

Comentários

Para determinar quais atributos estão definidos, use o operador And para efetuar uma comparação bit a bit do valor retornado pela função GetAttr e do valor do atributo individual de arquivo que você deseja. Se o resultado não for zero, o atributo será definido para o arquivo nomeado. Por exemplo, o valor de retorno da expressão And a seguir será zero se o atributo Archive não estiver definido:

Result = GetAttr(FName) And vbArchive

Um valor diferente de zero será retornado se o atributo Archive estiver definido.


Instrução Kill

Exclui arquivos de um disco.

Sintaxe

Kill pathname

O argumento pathname é uma expressão de seqüência de caracteres que especifica um ou mais nomes de arquivo a serem excluídos. O pathname pode incluir o diretório ou pasta e a unidade.

Comentários

No Microsoft Windows, Kill aceita o uso de curingas de múltiplos caracteres (*) e de um único caractere (?) para especificar múltiplos arquivos. Entretanto, no Macintosh, esses caracteres são tratados como caracteres de nomes de arquivo válidos e não podem ser usados como curingas para especificar múltiplos arquivos.

Como o Macintosh não aceita os curingas, use o tipo de arquivo para identificar grupos de arquivos a excluir. Você pode usar a função MacID para especificar o tipo de arquivo em vez de repetir o comando com nomes de arquivo separados. Por exemplo, a instrução a seguir exclui todos os arquivos TEXT da pasta atual.

Kill MacID("TEXT")

Se você usar a função MacID com Kill no Microsoft Windows, ocorrerá um erro.

Se você tentar usar Kill para excluir um arquivo aberto, ocorrerá um erro.

Observação   Para excluir diretórios, use a instrução RmDir.


Instrução MkDir

Cria um novo diretório ou pasta.

Sintaxe

MkDir path

O argumento path obrigatório é uma expressão de seqüência de caracteres que identifica o diretório ou pasta a ser criado. O path pode incluir a unidade. Se uma unidade não for especificada, MkDir cria o novo diretório ou pasta na unidade atual.


Instrução Name

Renomeia um arquivo, diretório ou pasta em disco.

Sintaxe

Name oldpathname As newpathname

A sintaxe da instrução Name possui as partes a seguir:

Parte	Descrição
oldpathname	Obrigatória. Expressão de seqüência de caracteres que especifica o nome e localização de arquivo existente – pode incluir o diretório ou a pasta e a unidade.
newpathname	Obrigatória. Expressão de seqüência de caracteres que especifica o novo nome de arquivo e sua localização – pode incluir diretório ou pasta e unidade. O nome de arquivo especificado por newpathname não pode já existir.
Comentários

A instrução Name renomeia um arquivo e o move para um diretório ou pasta diferente, se necessário. Name pode mover um arquivo através de unidades, mas somente pode renomear um diretório ou pasta existente quando newpathname e oldpathname estiverem localizados na mesma unidade. Name não pode criar um novo arquivo, diretório ou pasta.

O uso de Name em um arquivo aberto gera um erro. Você deve fechar um arquivo que esteja aberto antes de renomeá-lo. Os argumentos de Name não podem conter curingas de múltiplos caracteres (*) nem de caractere único (?).


Função QBColor

Retorna um Long que representa o código de cores RGB correspondente ao número de cor especificado.

Sintaxe

QBColor(color)

O argumento color obrigatório é um número inteiro no intervalo de 0 a 15.

Definições

O argumento color tem as seguintes configurações:

Número	Cor	Número	Cor
0	Preto	8	Cinza
1	Azul	9	Azul-claro
2	Verde	10	Verde-claro
3	Ciano	11	Ciano-claro
4	Vermelho	12	Vermelho-claro
5	Magenta	13	Magenta-claro
6	Amarelo	14	Amarelo-claro
7	Branco	15	Branco-brilhante
Comentários

O argumento color representa valores de cor usados por versões anteriores do Basic (como o Microsoft Visual Basic para MS-DOS e o Basic Compiler). Começando pelo byte menos significativo, o valor retornado especifica os valores de vermelho, verde e azul usados para definir a cor apropriada no sistema RGB usado pelo Visual Basic for Applications.


Função RGB

Retorna um número inteiro Long que representa um valor de cor RGB.

Sintaxe

RGB(red, green, blue)

A sintaxe da função RGB tem os seguintes argumentos nomeados:

Parte	Descrição
red	Obrigatória; Variant (Integer). Número no intervalo de 0 a 255, inclusive, que representa o componente vermelho da cor.
green	Obrigatória; Variant (Integer). Número no intervalo de 0 a 255, inclusive, que representa o componente verde da cor.
blue	Obrigatória; Variant (Integer). Número no intervalo de 0 a 255, inclusive, que representa o componente azul da cor.
Comentários

Os métodos e propriedades do aplicativo que aceitam uma especificação de cor esperam que essa especificação seja um número que represente um valor de cor RGB. Este valor especifica a intensidade relativa de vermelho, verde e azul que causa a exibição de uma cor específica.

O valor de qualquer argumento para RGB que exceda 255 é assumido como sendo 255.

A tabela a seguir lista algumas cores padrão e os valores de vermelho, verde, e azul que elas contêm:

Cor	Valor do vermelho	Valor do verde	Valor do azul
Preto	0	0	0
Azul	0	0	255
Verde	0	255	0
Ciano	0	255	255
Vermelho	255	0	0
Magenta	255	0	255
Amarelo	255	255	0
Branco	255	255	255
Os valores de cor RGB retornados por essa função são incompatíveis com os usados no sistema operacional do Macintosh. Eles podem ser usados dentro do contexto de aplicativos Microsoft para o Macintosh, mas não devem ser usados ao comunicar alterações de cor diretamente para o sistema operacional do Macintosh.


Instrução RmDir

Remove um diretório ou pasta existente.

Sintaxe

RmDir path

O argumento path obrigatório é uma expressão de seqüência de caracteres que identifica o diretório ou pasta a ser removida. O path pode incluir a unidade. Se uma unidade não for especificada, RmDir remove o diretório ou pasta da unidade atual.

Comentários

Se você tentar usar RmDir em um diretório ou pasta que contém arquivos, um erro será gerado. Use a instrução Kill para excluir todos os arquivos antes de tentar a remoção de um diretório ou pasta.


Instrução SetAttr

Define as informações de atributo de um arquivo.

Sintaxe

SetAttr pathname, attributes

A sintaxe da instrução SetAttr tem os seguintes argumentos nomeados:

Parte	Descrição
pathname	Obrigatória. Expressão de seqüência que especifica um nome de arquivo – pode incluir o diretório ou a pasta e a unidade.
attributes	Obrigatória. Constante ou expressão numérica, cuja soma especifica atributos de arquivo.
Definições

As configurações do argumento attributes são:

Constante	Valor	Descrição
vbNormal	0	Normal (padrão).
vbReadOnly	1	Somente leitura.
vbHidden	2	Oculto.
vbSystem	4	Arquivo do sistema. Não disponível no Macintosh.
vbArchive	32	O arquivo foi alterado após o último backup.
vbAlias	64	O nome do arquivo especificado é um alias. Disponível somente no Macintosh.
Observação   Estas constantes são especificadas pelo Visual Basic for Applications. Os nomes podem ser utilizados em qualquer parte do seu código no lugar dos valores reais.

Comentários

Um erro de tempo de execução ocorrerá se você tentar definir os atributos de um arquivo que esteja aberto.


Exemplo da instrução Close

Este exemplo utiliza a instrução Close para fechar os três arquivos abertos para Output.

Dim I, FileName

For I = 1 To 3	' Fazer o loop 3 vezes.

FileName = "TEST" & I	' Cria o nome de arquivo.

Open FileName For Output As #I	' Abre o arquivo.

Print #I, "Isto é um teste."	' Grava a seqüência de caracteres no arquivo.

Next I

Close	' Fecha todos os 3 arquivos abertos.


Exemplo da função EOF

Este exemplo utiliza a função EOF para detectar o final de um arquivo. Este exemplo pressupõe que MYFILE é um arquivo de texto com algumas linhas de texto.

Dim InputData

Open "MYFILE" For Input As #1	' Abre o arquivo para entrada.

Do While Not EOF(1)	' Procura o fim do arquivo.

Line Input #1, InputData	' Lê a linha de dados.

Debug.Print InputData	' Imprima na janela Immediate.

Loop

Close #1	' Fecha o arquivo.


Exemplo da função FileAttr

Este exemplo utiliza a função FileAttr para retornar o modo de arquivo e o identificador de arquivo de um arquivo aberto. O identificador de arquivo é retornado apenas em sistemas de 16 bits; em sistemas de 32 bits, a passagem de 2 como um segundo argumento gera um erro.

Dim FileNum, Mode, Handle

FileNum = 1	' Atribui o número de arquivo.

Open "TESTFILE" For Append As FileNum	' Abre o arquivo.

Mode = FileAttr(FileNum, 1)	' Retorna 8 (modo de acréscimo de arquivo).

Handle = FileAttr(FileNum, 2)	' Retorna o identificador de arquivo.

Close FileNum	' Fecha o arquivo.


Exemplo da função FreeFile

Este exemplo utiliza a função FreeFile para retornar o próximo número de arquivo disponível. Cinco arquivos são abertos para saída dentro do loop e alguns dados de exemplo são gravados em cada um.

Dim MyIndex, FileNumber

For MyIndex = 1 To 5	' Fazer o loop 5 vezes.

FileNumber = FreeFile	' Obtém o número de arquivo

' usuário.

Open "TEST" & MyIndex For Output As #FileNumber	' Cria o nome de arquivo.

Write #FileNumber, "Este é um exemplo."	' Gera texto.

Close #FileNumber	' Fecha o arquivo.

Next MyIndex


Exemplo da instrução Get

Este exemplo utiliza a instrução Get para ler dados de um arquivo para uma variável. Este exemplo pressupõe que TESTFILE é um arquivo que contém cinco registros do tipo Record definido pelo usuário.

Type Record	' Define o tipo definido pelo usuário.

ID As Integer

Name As String * 20

End Type

Dim MyRecord As Record, Position	' Declara as variáveis.

' Abre o arquivo de exemplo para acesso aleatório.

Open "TESTFILE" For Random As #1 Len = Len(MyRecord)

' Lê o arquivo de exemplo usando a instrução Get.

Position = 3	' Define o número do registro.

Get #1, Position, MyRecord	' Lê o terceiro registro.

Close #1	' Fecha o arquivo.


Exemplo da instrução Input #

Este exemplo utiliza a instrução Input # para ler dados de um arquivo para duas variáveis. Este exemplo pressupõe que TESTFILE é um arquivo com algumas linhas de dados gravadas nele usando a instrução Write #, ou seja, cada linha contém uma seqüência de caracteres entre aspas e um número separado por uma vírgula; por exemplo, ("Alô", 234).

Dim MyString, MyNumber

Open "TESTFILE" For Input As #1	' Abre o arquivo para entrada.

Do While Not EOF(1)	' Faz o loop até o fim do arquivo.

Input #1, MyString, MyNumber	' Lê os dados para duas variáveis.

Debug.Print MyString, MyNumber	' Imprime dados para a janela Imediata.

Loop

Close #1	' Fecha o arquivo.


Exemplo da função Input

Este exemplo utiliza a função Input para ler um caractere por vez de um arquivo e imprimir o mesmo para a janela Imediata. Este exemplo pressupõe que TESTFILE é um arquivo de texto com algumas linhas de dados de exemplo.

Dim MyChar

Open "TESTFILE" For Input As #1	' Abre o arquivo.

Do While Not EOF(1)	' Faz o loop até o fim do arquivo.

MyChar = Input(1, #1)	' Obtém um caractere.

Debug.Print MyChar	' Imprima na janela Immediate.

Loop

Close #1	' Fecha o arquivo.


Exemplo da instrução Line Input #

Este exemplo utiliza a instrução Line Input # para ler uma linha de um arquivo seqüencial e atribuir a mesma a uma variável. Este exemplo pressupõe que TESTFILE é um arquivo de texto com algumas linhas de dados de exemplo.

Dim TextLine

Open "TESTFILE" For Input As #1	' Abre o arquivo.

Do While Not EOF(1)	' Faz o loop até o fim do arquivo.

Line Input #1, TextLine	' Lê a linha para a variável.

Debug.Print TextLine	' Imprima na janela Immediate.

Loop

Close #1	' Fecha o arquivo.


Exemplo da função Loc

Este exemplo utiliza a função Loc para retornar a posição atual de leitura/gravação dentro de um arquivo aberto. Este exemplo pressupõe que TESTFILE é um arquivo de texto com algumas linhas de dados de exemplo.

Dim MyLocation, MyLine

Open "TESTFILE" For Binary As #1	' Abre o arquivo recém-criado.

Do While MyLocation < LOF(1)	' Faz o loop até o fim do arquivo.

MyLine = MyLine & Input(1, #1)	' Lê o caractere para a variável.

MyLocation = Loc(1)	' Obtém a posição atual dentro do arquivo.

' Imprima na janela Immediate.

Debug.Print MyLine; Tab; MyLocation

Loop

Close #1	' Fecha o arquivo.


Exemplo das instruções Lock e Unlock

Este exemplo ilustra o uso das instruções Lock e Unlock. Enquanto um registro está sendo modificado, o acesso por outros processos é negado. Este exemplo pressupõe que TESTFILE é um arquivo que contém cinco registros do tipo Record definido pelo usuário.

Type Record	' Define o tipo definido pelo usuário.

ID As Integer

Name As String * 20

End Type

Dim MyRecord As Record, RecordNumber	' Declara as variáveis.

' Abre o arquivo de exemplo para acesso aleatório.

Open "TESTFILE" For Random Shared As #1 Len = Len(MyRecord)

RecordNumber = 4	' Define o número do registro.

Lock #1, RecordNumber	' Bloqueia o registro.

Get #1, RecordNumber, MyRecord	' Lê o registro.

MyRecord.ID = 234	' Modifica o registro.

MyRecord.Name = "John Smith"

Put #1, RecordNumber, MyRecord	' Grava o arquivo modificado.

Unlock #1, RecordNumber	' Desbloqueia o registro atual.

Close #1	' Fecha o arquivo.


Exemplo da função LOF

Este exemplo utiliza a função LOF para determinar o tamanho de um arquivo aberto. Este exemplo pressupõe que TESTFILE é um arquivo de texto que contém dados de exemplo.

Dim FileLength

Open "TESTFILE" For Input As #1	' Abre o arquivo.

FileLength = LOF(1)	' Obtém o comprimento do arquivo.

Close #1	' Fecha o arquivo.


Exemplo da instrução Open

Este exemplo ilustra vários usos da instrução Open para permitir a entrada e saída em um arquivo.

O código a seguir abre o arquivo TESTFILE no modo de entrada seqüencial.

Open "TESTFILE" For Input As #1

' Fecha antes de reabrir em outro modo.

Close #1

Este exemplo abre o arquivo no modo Binary somente para operações de gravação.

Open "TESTFILE" For Binary Access Write As #1

' Fecha antes de reabrir em outro modo.

Close #1

O exemplo a seguir abre o arquivo no modo Random. O arquivo contém registros do tipo Record definido pelo usuário.

Type Record	' Define o tipo definido pelo usuário.

ID As Integer

Name As String * 20

End Type

Dim MyRecord As Record	' Declara a variável.

Open "TESTFILE" For Random As #1 Len = Len(MyRecord)

' Fecha antes de reabrir em outro modo.

Close #1

Este exemplo de código abre o arquivo para saída seqüencial; qualquer processo pode ler ou gravar no arquivo.

Open "TESTFILE" For Output Shared As #1

' Fecha antes de reabrir em outro modo.

Close #1

Este exemplo de código abre o arquivo no modo Binary para leitura; outros processos não conseguem ler o arquivo.

Open "TESTFILE" For Binary Access Read Lock Read As #1


Exemplo da instrução Print #

Este exemplo utiliza a instrução Print # para gravar dados em um arquivo.

Open "ARQTESTE" For Output As #1	' Abra o arquivo para saída.

Print #1, "Este é um teste"	' Imprime o texto para o arquivo.

Print #1,	' Imprime uma linha em branco para o arquivo.

Print #1, "Zona 1"; Tab ; "Zona 2"	' Imprime em duas zonas de impressão.

Print #1, "Alô" ; " " ; "Mundo"	' Separa as seqüências de caracteres com espaço.

Print #1, Spc(5) ; "5 espaços à esquerda "	' Imprime cinco espaços à esquerda.

Print #1, Tab(10) ; "Alô"	' Imprime a palavra na coluna 10.

' Atribui valores Boolean, Date, Null e Error.

Dim MyBool, MyDate, MyNull, MyError

MyBool = False : MyDate = #12 de fevereiro de 1969# : MyNull = Null

MyError = CVErr(32767)

' True, False, Null e Error são traduzidos usando as definições de local do

' seu sistema. Os literais de data são gravados usando o formato padrão de data

' abreviada.

Print #1, MyBool ; " é um valor booleano"

Print #1, MyDate ; " é uma data"

Print #1, MyNull ; " é um valor nulo"

Print #1, MyError ; " é um valor de erro"

Close #1	' Fecha o arquivo.


Exemplo da instrução Put

Este exemplo utiliza a instrução Put para gravar dados em um arquivo. Cinco registros do tipo Record definido pelo usuário são gravados no arquivo.

Type Record	' Define o tipo definido pelo usuário.

ID As Integer

Name As String * 20

End Type

Dim MyRecord As Record, RecordNumber	' Declara as variáveis.

' Abre o arquivo para acesso aleatório.

Open "TESTFILE" For Random As #1 Len = Len(MyRecord)

For RecordNumber = 1 To 5	' Fazer o loop 5 vezes.

MyRecord.ID = RecordNumber	' Define a identificação.

MyRecord.Name = "Meu Nome" & RecordNumber	' Cria uma seqüência de caracteres.

Put #1, RecordNumber, MyRecord	' Grava o registro no arquivo.

Next RecordNumber

Close #1	' Fecha o arquivo.


Exemplo da instrução Reset

Este exemplo utiliza a instrução Reset para fechar todos os arquivos abertos e gravar o conteúdo de todos os buffers de arquivo em disco. Observe o uso da variável Variant FileNumber como uma seqüência de caracteres e como um número.

Dim FileNumber

For FileNumber = 1 To 5	' Fazer o loop 5 vezes.

' Abra o arquivo para saída. FileNumber é concatenado na seqüência de caracteres

' TEST para o nome do arquivo, mas é um número subseqüente a #.

Open "TEST" & FileNumber For Output As #FileNumber

Write #FileNumber, "Alô Mundo"	' Grava os dados no arquivo.

Next FileNumber

Reset	' Fecha os arquivos e grava o conteúdo

' em disco.


Exemplo da função Seek

Este exemplo utiliza a função Seek para retornar a posição de arquivo atual. O exemplo pressupõe que TESTFILE é um arquivo que contém registros do tipo Record definido pelo usuário.

Type Record	' Define o tipo definido pelo usuário.

ID As Integer

Name As String * 20

End Type

Para arquivos abertos no modo Random, Seek retorna o número do próximo registro.

Dim MyRecord As Record	' Declara a variável.

Open "TESTFILE" For Random As #1 Len = Len(MyRecord)

Do While Not EOF(1)	' Faz o loop até o fim do arquivo.

Get #1, , MyRecord	' Lê o próximo registro.

Debug.Print Seek(1)	' Imprime o número do registro para a

' janela Imediata.

Loop

Close #1	' Fecha o arquivo.

Para arquivos abertos em modos diferentes do modo Random, Seek retorna a posição do byte em que ocorre a próxima operação. Suponha que TESTFILE é um arquivo que contém algumas linhas de texto.

Dim MyChar

Open "TESTFILE" For Input As #1	' Abre o arquivo para leitura.

Do While Not EOF(1)	' Faz o loop até o fim do arquivo.

MyChar = Input(1, #1)	' Lê o próximo caractere de dados.

Debug.Print Seek(1)	' Imprime a posição do byte para a

' janela Imediata.

Loop

Close #1	' Fecha o arquivo.


Exemplo da instrução Seek

Este exemplo utiliza a instrução Seek para definir a posição da próxima leitura ou gravação dentro de um arquivo. Este exemplo pressupõe que TESTFILE é um arquivo que contém registros do tipo Record definido pelo usuário.

Type Record	' Define o tipo definido pelo usuário.

ID As Integer

Name As String * 20

End Type

Para arquivos abertos no modo Random, Seek define o próximo registro.

Dim MyRecord As Record, MaxSize, RecordNumber	' Declara as variáveis.

' Abre o arquivo no modo de arquivo aleatório.

Open "TESTFILE" For Random As #1 Len = Len(MyRecord)

MaxSize = LOF(1) \ Len(MyRecord)	' Obtém o número de registros no arquivo.

' O loop lê todos os registros a começar do último.

For RecordNumber = MaxSize To 1 Step - 1

Seek #1, RecordNumber	' Define a posição.

Get #1, , MyRecord	' Lê o registro.

Next RecordNumber

Close #1	' Fecha o arquivo.

Para arquivos abertos em modos diferentes do modo Random, Seek define a posição do byte em que a próxima operação ocorre. Suponha que TESTFILE é um arquivo que contém algumas linhas de texto.

Dim MaxSize, NextChar, MyChar

Open "TESTFILE" For Input As #1	' Abre o arquivo para entrada.

MaxSize = LOF(1)	' Obtém o tamanho do arquivo em bytes.

' O loop lê todos os caracteres a começar do último.

For NextChar = MaxSize To 1 Step -1

Seek #1, NextChar	' Define a posição.

MyChar = Input(1, #1)	' Lê o caractere.

Next NextChar

Close #1	' Fecha o arquivo.


Exemplo da função Spc

Este exemplo utiliza a função Spc para posicionar a saída em um arquivo e na janela Imediata.

' A função Spc pode ser usada com a instrução Print #.

Open "ARQTESTE" For Output As #1	' Abra o arquivo para saída.

Print #1, "10 espaços entre aqui"; Spc(10); "e aqui."

Close #1	' Fecha o arquivo.

A instrução a seguir faz com que o texto seja impresso na janela Imediata (usando o método Print), precedido por 30 espaços.

Debug.Print Spc(30); "Trinta espaços mais tarde..."


Exemplo da função Tab

Este exemplo utiliza a função Tab para posicionar a saída em um arquivo e na janela Imediata.

' A função Tab pode ser utilizada com a instrução Print #.

Open "ARQTESTE" For Output As #1	' Abra o arquivo para saída.

' A segunda palavra é impressa na coluna 20.

Print #1, "Alô"; Tab(20); "Mundo."

' Se o argumento for omitido, o cursor será movido para a próxima zona de impressão.

Print #1, "Alô"; Tab; "Mundo"

Close #1	' Fecha o arquivo.

A função Tab também pode ser utilizada com o método Print. A instrução a seguir imprime o texto a partir da coluna 10.

Debug.Print Tab(10); "10 colunas a partir do início."


Exemplo da instrução Width #

Este exemplo utiliza a instrução Width # para definir a largura da linha de saída de um arquivo.

Dim I

Open "ARQTESTE" For Output As #1	' Abra o arquivo para saída.

VBA.Width 1, 5	' Define a largura da linha de saída como 5.

For I = 0 To 9	' Fazer o loop 10 vezes.

Print #1, Chr(48 + I);	' Imprime cinco caracteres por linha.

Next I

Close #1	' Fecha o arquivo.


Exemplo da instrução Write #

Este exemplo utiliza a instrução Write # para gravar dados não processados em um arquivo seqüencial.

Open "ARQTESTE" For Output As #1	' Abra o arquivo para saída.

Write #1, "Alô Mundo", 234	' Grava os dados separados por vírgula.

Write #1,	' Grava uma linha em branco.

Dim MyBool, MyDate, MyNull, MyError

' Atribui os valores Boolean, Date, Null e Error.

MyBool = False : MyDate = #12 de fevereiro de 1969# : MyNull = Null

MyError = CVErr(32767)

' Os dados Boolean são gravados como #TRUE# ou #FALSE#. Os literais de data são

' gravados em formato de data universal; por exemplo, #1994-07-13#

 'representa 13 de julho de 1994. Os dados Null são gravados como #NULL#.

' Os dados Error são gravados como #ERROR errorcode#.

Write #1, MyBool ; " é um valor booleano"

Write #1, MyDate ; " é uma data"

Write #1, MyNull ; " é um valor nulo"

Write #1, MyError ; " é um valor de erro"

Close #1	' Fecha o arquivo.


Instrução Close

Conclui a entrada/saída (E/S) para um arquivo aberto usando a instrução Open.

Sintaxe

Close [filenumberlist]

O argumento opcional filenumberlist pode ser um ou mais números de arquivo que usam a sintaxe a seguir, onde filenumber é qualquer número de arquivo válido:

[[#]filenumber] [, [#]filenumber] . . .

Comentários

Se você omitir filenumberlist, todos os arquivos ativos abertos pela instrução Open serão fechados.

Quando você fechar os arquivos que foram abertos para Output ou Append, o buffer final de saída será gravado no buffer do sistema operacional referente ao arquivo. Todo o espaço de buffer associado ao arquivo fechado é liberado.

Quando a instrução Close é executada, encerra-se a associação de um arquivo com o seu número de arquivo.


Função EOF

Retorna um Integer que contém o valor Boolean True quando se chega ao final de um arquivo aberto para Input seqüencial ou Random.

Sintaxe

EOF(filenumber)

O argumento obrigatório filenumber é um Integer que contém qualquer número de arquivo válido.

Comentários

Use EOF para evitar o erro gerado pela tentativa de obter entrada depois do final de um arquivo.

A função EOF retornará False enquanto o final do arquivo não for alcançado. Com os arquivos abertos para o acesso Random ou Binary, EOF retornará False até que a última instrução Get executada não possa ler um registro inteiro.

Com os arquivos abertos para acesso Binary, uma tentativa de ler o arquivo usando a função Input até que EOF retorne True irá gerar um erro. Use as funções LOF e Loc em vez de EOF quando estiver lendo arquivos binários com Input ou use Get quando usar a função EOF. Com os arquivos abertos para Output, EOF sempre retornará True.


Função FileAttr

Retorna um Long que representa o modo de arquivo para arquivos abertos com a instrução Open.

Sintaxe

FileAttr(filenumber, returntype)

A sintaxe da função FileAttr tem os seguintes argumentos nomeados:

Parte	Descrição
filenumber	Obrigatório; Integer. Qualquer número de arquivo válido.
returntype	Obrigatória; Integer. Número que indica o tipo de informação a ser retornado. Especifique 1 para retornar um valor que indica o modo de arquivo. Somente em sistemas de 16 bits, especifique 2 para recuperar um identificador de arquivo de sistema operacional. Não há suporte para Returntype 2 em sistemas de 32 bits e um erro é gerado.
Valores retornados

Quando o argumento returntype é 1, os valores retornados a seguir indicam o modo de acesso ao arquivo:

Modo	Valor
Input	1
Output	2
Random	4
Append	8
Binary	32


Função FreeFile

Retorna um Integer que representa o próximo número de arquivo disponível para uso pela instrução Open.

Sintaxe

FreeFile[(rangenumber)]

O argumento opcional rangenumber é uma Variant que especifica o intervalo a partir do qual o próximo número de arquivo disponível deve ser retornado. Especifique 0 (padrão) para retornar um número de arquivo no intervalo de 1 a 255, inclusive. Especifique 1 para retornar um número de arquivo no intervalo de 256 a 511.

Comentários

Use FreeFile para fornecer um número de arquivo que não esteja sendo usado.


Instrução Get

Lê os dados a partir de um arquivo de disco aberto e os insere em uma variável.

Sintaxe

Get [#]filenumber, [recnumber], varname

A sintaxe da instrução Get tem as seguintes partes:

Parte	Descrição
filenumber	Obrigatória. Qualquer número de arquivo válido.
recnumber	Opcional. Variant (Long). Número de registro (arquivos no modo Random) ou número de byte (arquivos no modo Binary) no qual é iniciada a leitura.
varname	Obrigatória. Nome de variável válido no qual os dados são lidos.
Comentários

A leitura de dados com Get é normalmente gravada em um arquivo com Put.

O primeiro registro ou byte em um arquivo encontra-se na posição 1, o segundo registro ou byte na posição 2 e assim por diante. Se você omitir recnumber, o próximo registro ou byte após a última instrução Get ou Put (ou apontado pela última função Seek) será lido. Você deve incluir as vírgulas de delimitação, por exemplo:

Get #4,,FileBuffer

Para os arquivos abertos no modo Random, são aplicadas as regras a seguir:

•	Se o comprimento dos dados que estiverem sendo lidos for menor que o comprimento especificado na cláusula Len da instrução Open, Get lerá os registros subseqüentes nos limites de comprimento do registro. O espaço entre o final de um registro e o início do registro seguinte é preenchido com o conteúdo existente do buffer de arquivo. Como a quantidade de dados de preenchimento não pode ser determinada com segurança, é aconselhável fazer com que o comprimento do registro corresponda ao comprimento dos dados que estão sendo lidos.

•	Se a variável que estiver sendo lida for uma seqüência de caracteres de comprimento variável, Get lerá um descritor de 2 bytes que contém o comprimento da seqüência de caracteres e, em seguida, lerá os dados da variável. Portanto, o comprimento do registro especificado pela cláusula Len na instrução Open deve ser pelo menos 2 bytes maior do que o comprimento real da seqüência de caracteres.

•	Se a variável que estiver sendo lida for uma Variant de tipo numérico, Get lerá 2 bytes que identificam o VarType de Variant e, em seguida, os dados da variável. Por exemplo, ao ler uma Variant de VarType 3, Get lerá 6 bytes: 2 bytes que identificam a Variant como VarType 3 (Long) e 4 bytes que contêm os dados Long. O comprimento do registro especificado pela cláusula Len na instrução Open deve ser pelo menos 2 bytes maior do que o número real de bytes necessários para armazenar a variável.

Observação   Você pode usar a instrução Get para ler uma matriz Variant a partir do disco, mas não pode usar Get para ler uma Variant escalar que contém uma matriz. Você também não pode usar Get para ler os objetos do disco.

•	Se a variável que estiver sendo lida for uma Variant de VarType 8 (String), Get lerá 2 bytes que identificam o VarType, 2 bytes que indicam o comprimento da seqüência de caracteres e, em seguida, lerá os dados da seqüência de caracteres. O comprimento do registro especificado pela cláusula Len na instrução Open deve ser pelo menos 4 bytes maior do que o comprimento real da seqüência de caracteres.

•	Se a variável que estiver sendo lida for uma matriz dinâmica, Get lerá um descritor cujo comprimento é igual a 2 mais 8 vezes o número de dimensões, ou seja, 2 + 8 * NumberOfDimensions. O comprimento do registro especificado pela cláusula Len na instrução Open deve ser maior ou igual à soma de todos os bytes necessários para ler os dados e o descritor da matriz. Por exemplo, a declaração da matriz a seguir exige 118 bytes quando a matriz é gravada em disco.

Dim MyArray (1 To 5,1 To 10) As Integer

Os 118 bytes são distribuídos da seguinte forma: 18 bytes para o descritor (2 + 8 * 2) e 100 bytes para os dados (5 * 10 * 2).

•	Se a variável que estiver sendo lida for uma matriz de tamanho fixo, Get lerá somente os dados. Nenhum descritor será lido.

•	Se a variável que estiver sendo lida for qualquer outro tipo de variável (diferente de uma seqüência de caracteres de comprimento variável ou uma Variant), Get lerá somente os dados da variável. O comprimento do registro especificado pela cláusula Len na instrução Open deve ser maior ou igual ao comprimento dos dados que estão sendo lidos.

•	 Get lê os elementos dos tipos definidos pelo usuário como se cada um estivesse sendo lido individualmente, com a exceção de que não há preenchimento algum entre os elementos. No disco, uma matriz dinâmica de um tipo definido pelo usuário (gravado com Put) é prefixada por um descritor cujo comprimento é igual a 2 mais 8 vezes o número de dimensões, ou seja, 2 + 8 * NumberOfDimensions. O comprimento do registro especificado pela cláusula Len na instrução Open deve ser maior ou igual à soma de todos os bytes necessários para ler os elementos individuais, incluindo as matrizes e seus descritores.

Para os arquivos abertos no modo Binary, são aplicadas todas as regras de Random, exceto:

•	A cláusula Len na instrução Open não tem qualquer efeito. Get lê todas as variáveis do disco de forma contígua, ou seja, sem preenchimento entre os registros.

•	Para qualquer matriz diferente de uma matriz de um tipo definido pelo usuário, Get lê somente os dados. Nenhum descritor será lido.

•	 Get lê as seqüências de caracteres de comprimento variável que não sejam elementos de tipos definidos pelo usuário sem esperar pelo descritor de comprimento de 2 bytes. O número de bytes lidos é igual ao número de caracteres que já se encontram na seqüência de caracteres. Por exemplo, as instruções a seguir lêem 10 bytes do número de arquivo 1:

VarString = String(10," ")

Get #1,,VarString


Instrução Input #

Lê os dados de um arquivo seqüencial aberto e atribui os dados a variáveis.

Sintaxe

Input #filenumber, varlist

A sintaxe da instrução Input # tem as seguintes partes:

Parte	Descrição
filenumber	Obrigatória. Qualquer número de arquivo válido.
varlist	Obrigatória. A lista de variáveis separadas por vírgulas que são valores atribuídos lidos do arquivo — não pode ser uma matriz ou variável de objeto. No entanto, as variáveis que descrevem um elemento de uma matriz ou tipo definido pelo usuário podem ser usadas.
Comentários

Os dados lidos com Input # são geralmente gravados em um arquivo com Write #. Use essa instrução somente com arquivos abertos no modo Input ou Binary.

Quando lidos, dados numéricos ou seqüências de caracteres padrão são atribuídos às variáveis sem modificação. A tabela a seguir ilustra como outros dados de entrada são tratados:

Dados	Valor atribuído à variável
Vírgula de delimitação ou linha em branco	Empty
#NULL#	Null
#TRUE# ou #FALSE#	True ou False
#aaaa-mm-dd hh:mm:ss#	A data e/ou hora representada pela expressão
#ERROR errornumber#	errornumber (variável é uma Variant marcada como um erro)
As aspas duplas (" ") dentro dos dados de entrada são ignoradas.

Observação   Você não deve gravar seqüências de caracteres que contêm aspas incorporadas, por exemplo, "1,2""X" para serem usadas na instrução Input #: Input # analisa esta seqüência de caracteres como duas seqüências de caracteres completas e separadas.

Os itens de dados em um arquivo devem aparecer na mesma ordem que as variáveis em varlist e coincidir variáveis do mesmo tipo de dados. Se uma variável for numérica e os dados não forem numéricos, será atribuído um valor zero à variável.

Se o fim do arquivo for atingido enquanto um item de dado estiver sendo inserido, a entrada será finalizada e ocorrerá um erro.

Observação   Para possibilitar a leitura correta dos dados de um arquivo para variáveis com Input #, use a instrução Write # em vez da instrução Print # para gravar os dados nos arquivos. O uso de Write # garante que cada campo de dados separado seja delimitado de forma apropriada.


Função Input

Retorna a String que contém os caracteres de um arquivo aberto no modo Input ou Binary.

Sintaxe

Input(number, [#]filenumber)

A sintaxe da função Input tem as seguintes partes:

Parte	Descrição
number	Obrigatória. Qualquer expressão numérica válida que especifica o número de caracteres a serem retornados.
filenumber	Obrigatória. Qualquer número de arquivo válido.
Comentários

Os dados lidos com a função Input são normalmente gravados em um arquivo com Print # ou Put. Use essa função apenas com arquivos abertos no modo Input ou Binary.

Diferentemente da instrução Input #, a função Input retorna todos os caracteres que lê, incluindo vírgulas, retornos de carro, alimentações de linha, aspas e espaços à esquerda.

Com os arquivos abertos para acesso Binary, uma tentativa de ler o arquivo usando a função Input até que EOF retorne True irá gerar um erro. Use as funções LOF e Loc em vez de EOF quando estiver lendo arquivos binários com Input ou use Get quando usar a função EOF.

Observação   Use a função InputB para dados de bytes contidos em arquivos de texto. Com InputB, number especifica o número de bytes a serem retornados em vez do número de caracteres a serem retornados.


Instrução Line Input #

Lê uma única linha de um arquivo seqüencial aberto e a atribui a uma variável String.

Sintaxe

Line Input #filenumber, varname

A sintaxe da instrução Line Input # tem as seguintes partes:

Parte	Descrição
filenumber	Obrigatória. Qualquer número de arquivo válido.
varname	Obrigatória. Nome de variável String ou Variant válido.
Comentários

Os dados lidos com Line Input # são geralmente gravados a partir de um arquivo com Print #.

A instrução Line Input # lê um caractere do arquivo de cada vez, até encontrar um retorno de carro (Chr(13)) ou uma seqüência de retorno de carro–alimentação de linha (Chr(13) + Chr(10)). As seqüências de retorno de carro–alimentação de linha são ignoradas em vez de serem acrescentadas à seqüência de caracteres.


Função Loc

Retorna um Long que especifica a posição de leitura/gravação atual dentro de um arquivo aberto.

Sintaxe

Loc(filenumber)

O argumento obrigatório filenumber é qualquer número de arquivo Integer válido.

Comentários

A tabela abaixo descreve o valor retornado para cada modo de acesso a arquivo:

Modo	Valor retornado
Random	Número do último registro lido ou gravado no arquivo.
Sequential	Posição atual do byte no arquivo dividido por 128. No entanto, as informações retornadas por Loc  para os arquivos seqüenciais não são usadas nem exigidas.
Binary	Posição do último byte lido ou gravado.


Instruções Lock e Unlock

Controla o acesso de outros processos a todo ou a parte de um arquivo aberto com a instrução Open.

Sintaxe

Lock [#]filenumber[, recordrange]
. . .

Unlock [#]filenumber[, recordrange]

A sintaxe das instruções Lock e Unlock tem as seguintes partes:

Parte	Descrição
filenumber	Obrigatória. Qualquer número de arquivo válido.
recordrange	Opcional. O intervalo de registros a serem bloqueados ou desbloqueados.
Definições

As definições do argumento recordrange são as seguintes:

recnumber | [start] To end

Definição	Descrição
recnumber	Número de registro (arquivos no modo Random) ou número de byte (arquivos no modo Binary) no qual o bloqueio ou desbloqueio é iniciado.
start	Número do primeiro registro ou byte a ser bloqueado ou desbloqueado.
end	Número do último registro ou byte a ser bloqueado ou desbloqueado.
Comentários

As instruções Lock e Unlock são usadas em ambientes onde vários processos podem precisar ter acesso ao mesmo arquivo.

As instruções Lock e Unlock são sempre usadas aos pares. Os argumentos de Lock e Unlock devem ter correspondência exata.

O primeiro registro ou byte em um arquivo encontra-se na posição 1, o segundo registro ou byte na posição 2 e assim por diante. Se você especificar apenas um registro, somente esse registro será bloqueado ou desbloqueado. Se você especificar um intervalo de registros e omitir um registro inicial (start), todos os registros do primeiro até o último (end) do intervalo serão bloqueados ou desbloqueados. O uso de Lock sem recnumber bloqueia todo o arquivo; o uso de Unlock sem recnumber desbloqueia todo o arquivo.

Se o arquivo tiver sido aberto para entrada ou saída seqüencial, Lock e Unlock afetarão todo o arquivo, independentemente do intervalo especificado por start e end.

Cuidado   Certifique-se de remover todos os bloqueios com uma instrução Unlock antes de fechar um arquivo ou sair de seu programa. Erros na remoção de bloqueios produz resultados imprevisíveis.


Função LOF

Retorna um Long que representa o tamanho, em bytes, de um arquivo aberto com a instrução Open.

Sintaxe

LOF(filenumber)

O argumento obrigatório filenumber é um Integer que contém um número de arquivo válido.

Observação   Use a função FileLen para obter o comprimento de um arquivo que não está aberto.


Instrução Open

Possibilita a entrada/saída (E/S) para um arquivo.

Sintaxe

Open pathname For mode [Access access] [lock] As [#]filenumber [Len=reclength]

A sintaxe da instrução Open tem as seguintes partes:

Parte	Descrição
pathname	Obrigatória. Expressão de seqüência que especifica um nome de arquivo – pode incluir o diretório ou a pasta e a unidade.
mode	Obrigatória. Palavra-chave que especifica o modo de arquivo: Append, Binary, Input, Output ou Random. Se não for especificada, o arquivo será aberto para acesso Random.
access	Opcional. Palavra-chave que especifica as operações permitidas no arquivo aberto: Read, Write ou Read Write.
lock	Opcional. Palavra-chave que especifica as operações restritas no arquivo aberto por outros processos: Shared, Lock Read, Lock Write e Lock Read Write.
filenumber	Obrigatória. Um número de arquivo válido no intervalo de 1 a 511, inclusive. Use a função FreeFile para obter o próximo número de arquivo disponível.
reclength	Opcional. Número menor ou igual a 32.767 (bytes). Para arquivos abertos para acesso aleatório, esse valor é o comprimento do registro. Para arquivos seqüenciais, esse valor é o número de caracteres armazenados em buffer.
Comentários

Você deve abrir um arquivo antes de executar qualquer operação de E/S no mesmo. Open aloca um buffer para E/S ao arquivo e determina o modo de acesso a ser usado com o buffer.

Se o arquivo especificado por pathname não existir, ele será criado quando um arquivo for aberto para os modos Append, Binary, Output ou Random.

Se o arquivo já tiver sido aberto por outro processo e o tipo de acesso especificado não for permitido, a operação Open falhará e ocorrerá um erro.

A cláusula Len será ignorada se mode for Binary.

Importante   Nos modos Binary, Input e Random você pode abrir um arquivo usando um número de arquivo diferente sem primeiramente fechar o arquivo. Nos modos Append e Output você deve fechar um arquivo antes de abri-lo com um número de arquivo diferente.


Instrução Print #

Grava os dados formatados para exibição em um arquivo seqüencial.

Sintaxe

Print #filenumber, [outputlist]

A sintaxe da instrução Print # tem as seguintes partes:

Parte	Descrição
filenumber	Obrigatória. Qualquer número de arquivo válido.
outputlist	Opcional. Expressão ou lista de expressões a ser impressa.
Definições

As definições do argumento outputlist são as seguintes:

[{Spc(n) | Tab[(n)]}] [expression] [charpos]

Definição	Descrição
Spc(n)	Usado para inserir caracteres espaço na saída, onde n é o número de caracteres espaço a ser inserido.
Tab(n)	Usada para posicionar o ponto de inserção em um número absoluto de coluna, onde n é o número da coluna. Use Tab sem argumentos para posicionar o ponto de inserção no início da próxima zona de impressão.
expression	Expressões numéricas ou expressões de seqüência de caracteres a serem impressas.
charpos	Especifica o ponto de inserção para o próximo caractere. Use ponto-e-vírgula para posicionar o ponto de inserção imediatamente após o último caractere exibido. Use Tab(n) para posicionar o ponto de inserção em um número absoluto de coluna. Use Tab sem argumento para posicionar o ponto de inserção no início da próxima zona de impressão. Se charpos for omitido, o próximo caractere será impresso na próxima linha.
Comentários

Os dados gravados com Print # são geralmente lidos de um arquivo com Line Input # ou Input.

Se você omitir outputlist e incluir apenas um separador de lista após filenumber, uma linha em branco será impressa no arquivo. Várias expressões podem ser separadas com um espaço ou um ponto-e-vírgula. Um espaço possui o mesmo efeito que um ponto-e-vírgula.

Para dados Boolean, é impresso True ou False. As palavras-chave True e False não são traduzidas, independentemente do local.

Os dados Date são gravados no arquivo usando o formato padrão de data abreviada reconhecido pelo seu sistema. Quando o componente de data ou hora estiver ausente ou for igual a zero, somente a parte fornecida será gravada no arquivo.

Se os dados de outputlist forem Empty, nada será gravado no arquivo. No entanto, se outputlist for Null, Null será gravado no arquivo.

Para os dados Error, a saída aparece como Error errorcode. A palavra-chave Error não é traduzida, independentemente do local.

Todos os dados gravados no arquivo com Print # são reconhecidos internacionalmente, ou seja, os dados são formatados de forma correta com o separador decimal apropriado.

Como Print # grava uma imagem dos dados no arquivo, você deve delimitar os dados para que eles sejam impressos corretamente. Se você usar Tab sem argumentos para mover a posição de impressão para a próxima zona de impressão, Print # também gravará os espaços entre os campos de impressão no arquivo.

Observação   Se, no futuro, você desejar ler os dados de um arquivo usando a instrução Input #, use a instrução Write # em vez da instrução Print # para gravar os dados no arquivo. O uso de Write # garante a integridade de cada campo de dados individual, delimitando-os do modo adequado, para que possam ser lidos novamente usando Input #. O uso de Write # também garante que os dados possam ser lidos corretamente em qualquer local.


Instrução Put

Grava os dados de uma variável em um arquivo de disco.

Sintaxe

Put [#]filenumber, [recnumber], varname

A sintaxe da instrução Put tem as seguintes partes:

Parte	Descrição
filenumber	Obrigatória. Qualquer número de arquivo válido.
recnumber	Opcional. Variant (Long). Número de registro (arquivos no modo Random) ou número de byte (arquivos no modo Binary) no qual a gravação é iniciada.
varname	Obrigatória. Nome da variável que contém os dados a serem gravados no disco.
Comentários

Os dados gravados com Put são geralmente lidos de um arquivo com Get.

O primeiro registro ou byte em um arquivo encontra-se na posição 1, o segundo registro ou byte na posição 2 e assim por diante. Se você omitir recnumber, o próximo registro ou byte após a última instrução Get ou Put ou apontado pela última função Seek será gravado. Você deve incluir as vírgulas de delimitação, por exemplo:

Put #4,,FileBuffer

Para os arquivos abertos no modo Random, são aplicadas as regras a seguir:

•	Se o comprimento dos dados que estiverem sendo gravados for menor que o comprimento especificado na cláusula Len da instrução Open, Put gravará os registros subseqüentes nos limites do comprimento do registro. O espaço entre o final de um registro e o início do registro seguinte é preenchido com o conteúdo existente do buffer de arquivo. Como a quantidade de dados de preenchimento não pode ser determinada com segurança, é aconselhável fazer com que o comprimento do registro corresponda ao comprimento dos dados que estão sendo gravados. Se o comprimento dos dados que estiverem sendo gravados for maior que o comprimento especificado na cláusula Len da instrução Open, ocorrerá um erro.

•	Se a variável que estiver sendo gravada for uma seqüência de caracteres de comprimento variável, Put gravará um descritor de 2 bytes que contém o comprimento da seqüência e, em seguida, gravará a variável. O comprimento do registro especificado pela cláusula Len na instrução Open deve ser pelo menos 2 bytes maior do que o comprimento real da seqüência de caracteres.

•	Se a variável que estiver sendo gravada for uma Variant de um tipo numérico, Put gravará 2 bytes que identificam o VarType de Variant e, em seguida, gravará a variável. Por exemplo, ao gravar uma Variant de VarType 3, Put gravará 6 bytes: 2 bytes que identificam a Variant como VarType 3 (Long) e 4 bytes que contêm os dados Long. O comprimento do registro especificado pela cláusula Len na instrução Open deve ser pelo menos 2 bytes maior do que o número real de bytes necessários para armazenar a variável.

Observação   Você pode usar a instrução Put para gravar uma matriz Variant em disco, mas não pode usar Put para gravar em disco uma Variant escalar que contém uma matriz. Put também não pode ser usado para gravar objetos em disco.

•	Se a variável que estiver sendo gravada for uma Variant de VarType 8 (String), Put gravará 2 bytes que identificam VarType, 2 bytes que indicam o comprimento da seqüência de caracteres e, em seguida, os dados da seqüência de caracteres. O comprimento do registro especificado pela cláusula Len na instrução Open deve ser pelo menos 4 bytes maior do que o comprimento real da seqüência de caracteres.

•	Se a variável que estiver sendo gravada for uma matriz dinâmica, Put gravará um descritor cujo comprimento é igual a 2 mais 8 vezes o número de dimensões, ou seja, 2 + 8 * NumberOfDimensions. O comprimento do registro especificado pela cláusula Len na instrução Open deve ser maior ou igual à soma de todos os bytes necessários para gravar os dados e o descritor da matriz. Por exemplo, a declaração da matriz a seguir exige 118 bytes quando a matriz é gravada em disco.

Dim MyArray (1 To 5,1 To 10) As Integer

•	Os 118 bytes são distribuídos da seguinte forma: 18 bytes para o descritor (2 + 8 * 2) e 100 bytes para os dados (5 * 10 * 2).

•	Se a variável que estiver sendo gravada for uma matriz de tamanho fixo, Put gravará somente os dados. Nenhum descritor será gravado no disco.

•	Se a variável que estiver sendo gravada for qualquer outro tipo de variável (diferente de uma seqüência de caracteres de comprimento variável ou uma Variant), Put gravará somente os dados da variável. O comprimento do registro especificado pela cláusula Len na instrução Open deve ser maior ou igual ao comprimento dos dados que estão sendo gravados.

•	 Put grava os elementos dos tipos definidos pelo usuário como se cada um fosse gravado individualmente, com a exceção de que não há preenchimento entre os elementos. No disco, uma matriz dinâmica de um tipo definido pelo usuário gravada com Put é prefixada por um descritor cujo comprimento é igual a 2 mais 8 vezes o número de dimensões, ou seja, 2 + 8 * NumberOfDimensions. O comprimento do registro especificado pela cláusula Len na instrução Open deve ser maior ou igual à soma de todos os bytes necessários para gravar os elementos individuais, incluindo as matrizes e seus descritores.

Para os arquivos abertos no modo Binary, são aplicadas todas as regras de Random, exceto:

•	A cláusula Len na instrução Open não tem qualquer efeito. Put grava todas as variáveis no disco de forma contígua, ou seja, sem preenchimento entre os registros.

•	Para qualquer outra matriz diferente de uma matriz de um tipo definido pelo usuário, Put grava somente os dados. Nenhum descritor é gravado.

•	 Put grava as seqüências de caracteres de comprimento variável que não sejam elementos dos tipos definidos pelo usuário sem o descritor de comprimento de 2 bytes. O número de bytes gravados é igual ao número de caracteres da seqüência. Por exemplo, as instruções a seguir gravam 10 bytes em um arquivo de número 1:

VarString$ = String$(10," ")

Put #1,,VarString$


Instrução Reset

Fecha todos os arquivos de disco abertos com a instrução Open.

Sintaxe

Redefinir

Comentários

A instrução Reset fecha todos os arquivos ativos abertos pela instrução Open e grava em disco o conteúdo de todos os buffers de arquivo.


Função Seek

Retorna um Long que especifica a posição atual de leitura/gravação dentro de um arquivo aberto com a instrução Open.

Sintaxe

Seek(filenumber)

O argumento obrigatório filenumber é um Integer que contém um número de arquivo válido.

Comentários

Seek retorna um valor entre 1 e 2.147.483.647 (equivalente a 2^31 – 1), inclusive.

A tabela a seguir descreve os valores retornados para cada modo de acesso a arquivo.

Modo	Valor retornado
Random	Número do próximo registro lido ou gravado
Binary, Output, Append, Input	Posição do byte na qual ocorre a próxima operação. O primeiro byte em um arquivo encontra-se na posição 1, o segundo byte na posição 2 e assim por diante.


Instrução Seek

Define a posição da próxima operação de leitura/gravação dentro de um arquivo aberto com a instrução Open.

Sintaxe

Seek [#]filenumber, position

A sintaxe da instrução Seek tem as seguintes partes:

Parte	Descrição
filenumber	Obrigatória. Qualquer número de arquivo válido.
position	Obrigatória. Número no intervalo de 1 a 2.147.483.647, inclusive, que indica onde a próxima operação de leitura/gravação deve ocorrer.
Comentários

Os números de registro especificados nas instruções Get e Put substituem o posicionamento de arquivo efetuado por Seek.

A realização de uma operação de gravação de arquivo depois de uma operação Seek após o final de um arquivo faz com que o mesmo aumente de tamanho. Se você tentar uma operação Seek em uma posição negativa ou zero, ocorrerá um erro.


Função Spc

Usada com a instrução Print # ou o método Print para posicionar a saída.

Sintaxe

Spc(n)

O argumento obrigatório n é o número de espaços a serem inseridos antes da exibição ou impressão da próxima expressão em uma lista.

Comentários

Se n for menor que a largura da linha de saída, a próxima posição de impressão seguirá imediatamente o número de espaços impressos. Se n for maior que a largura da linha de saída, Spc calculará a próxima posição de impressão usando a fórmula:

currentprintposition + (n Mod width)

Por exemplo, se a posição atual de impressão for 24, a largura da linha de saída for 80 e você especificar Spc(90), a próxima impressão começará na posição 34 (a posição atual de impressão + o resto de 90/80). Se a diferença entre a posição atual de impressão e a largura da linha de saída for menor que n (ou n Mod width), a função Spc passará para o início da linha seguinte e gerará espaços iguais a n – (width – currentprintposition).

Observação   Certifique-se de que suas colunas tabulares sejam largas o suficiente para acomodar letras largas.

Quando você usa o método Print com uma fonte com espaçamento proporcional, a largura dos caracteres de espaço impressos com a função Spc é sempre uma média da largura de todos os caracteres no tamanho em ponto da fonte escolhida. No entanto, não há correlação entre o número de caracteres impressos e o número de colunas de largura fixa que esses caracteres ocupam. Por exemplo, a letra maiúscula W ocupa mais de uma coluna de largura fixa e a letra minúscula i ocupa menos.


Função Tab

Usada com a instrução Print # ou o método Print para posicionar a saída.

Sintaxe

Tab[(n)]

O argumento opcional n representa o número de coluna para o qual se move antes da exibição ou impressão da próxima expressão em uma lista. Se for omitido, Tab moverá o ponto de inserção para o início da próxima zona de impressão. Isto permite que Tab seja usado em vez de uma vírgula em locais onde a vírgula é usada como um separador decimal.

Comentários

Se a posição atual de impressão na linha atual for maior que n, Tab saltará para a coluna de número n na linha de saída seguinte. Se n for menor que 1, Tab moverá a posição de impressão para a coluna 1. Se n for maior que a largura da linha de saída, Tab calculará a próxima posição de impressão usando a fórmula:

n Mod width

Por exemplo, se width for 80 e você especificar Tab(90), a próxima impressão começará na coluna 10 (o resto de 90/80). Se n for menor que a posição atual de impressão, a impressão começará na próxima linha na posição de impressão calculada. Se a posição de impressão calculada for maior que a posição atual de impressão, a impressão começará na posição de impressão calculada na mesma linha.

A posição de impressão mais à esquerda em uma linha de saída é sempre 1. Quando você usa a instrução Print # para imprimir em arquivos, a posição de impressão mais à direita é a largura atual da linha de saída, que pode ser definida com a instrução Width #.

Observação   Certifique-se de que suas colunas tabulares sejam largas o suficiente para acomodar letras largas.

Quando você usa a função Tab com o método Print, a superfície de impressão é dividida em colunas de largura fixa e uniformes. A largura de cada coluna é uma média da largura de todos os caracteres no tamanho em ponto da fonte escolhida. No entanto, não há correlação entre o número de caracteres impressos e o número de colunas de largura fixa que esses caracteres ocupam. Por exemplo, a letra maiúscula W ocupa mais de uma coluna de largura fixa e a letra minúscula i ocupa menos.


Instrução Width #

Atribui uma largura de linha de saída a um arquivo aberto com a instrução Open.

Sintaxe

Width #filenumber, width

A sintaxe da instrução Width # tem as seguintes partes:

Parte	Descrição
filenumber	Obrigatória. Qualquer número de arquivo válido.
width	Obrigatória. Expressão numérica no intervalo de 0 a 255, inclusive, que indica a quantidade de caracteres que aparece em uma linha antes que uma nova linha seja iniciada. Se width for igual a 0, não haverá limite para o comprimento de uma linha. O valor padrão de width é 0.


Instrução Write #

Grava os dados em um arquivo seqüencial.

Sintaxe

Write #filenumber, [outputlist]

A sintaxe da instrução Write # tem as seguintes partes:

Parte	Descrição
filenumber	Obrigatória. Qualquer número de arquivo válido.
outputlist	Opcional. Uma ou mais expressões numéricas ou expressões de seqüência de caracteres separadas por vírgula a serem gravadas em um arquivo.
Comentários

Os dados gravados com Write # são geralmente lidos de um arquivo com Input #.

Se você omitir outputlist e incluir uma vírgula após filenumber, uma linha em branco será impressa no arquivo. Várias expressões podem ser separadas com um espaço, um ponto-e-vírgula ou uma vírgula. Um espaço possui o mesmo efeito que um ponto-e-vírgula.

Quando Write # é usada para gravar dados em um arquivo, são feitos vários pressupostos universais para que os dados possam ser sempre lidos e interpretados corretamente usando Input #, independentemente do local:

•	Os dados numéricos são sempre gravados usando o ponto como separador decimal.

•	Para dados Boolean, é impresso #TRUE# ou #FALSE#. As palavras-chave True e False não são traduzidas, independentemente do local.

•	Os dados Date são gravados no arquivo usando o formato da data universal. Quando o componente de data ou hora estiver ausente ou for igual a zero, somente a parte fornecida será gravada no arquivo.

•	Se os dados de outputlist forem Empty, nada será gravado no arquivo. No entanto, para dados Null, #NULL# será gravado.

•	Se os dados de outputlist forem dados Null, #NULL# será gravado no arquivo.

•	Para dados Error, a saída aparece como #ERROR errorcode#. A palavra-chave Error não é traduzida, independentemente do local.

Diferentemente da instrução Print #, a instrução Write # insere vírgulas entre itens e aspas ao redor de seqüências de caracteres à medida que são gravadas no arquivo. Você não precisa inserir delimitadores explícitos na lista. Write # insere um caractere de linha nova, ou seja, um retorno de carro–alimentação de linha (Chr(13) + Chr(10)), após ter gravado o último caractere de outputlist no arquivo.

Observação   Você não deve gravar seqüências de caracteres que contêm aspas incorporadas, por exemplo, "1,2""X" para serem usadas na instrução Input #: Input # analisa esta seqüência de caracteres como duas seqüências de caracteres completas e separadas.


Exemplo da função DDB

Este exemplo utiliza a função DDB para retornar a depreciação de um ativo por um período especificado dado o custo inicial (InitCost), o valor do salvado ao final da vida útil do ativo (SalvageVal), a vida total do ativo em anos (LifeTime) e o período em anos para o qual a depreciação é calculada (Depr).

Dim Fmt, InitCost, SalvageVal, MonthLife, LifeTime, DepYear, Depr

Const YRMOS = 12	' Número de meses em um ano.

Fmt = "###,##0.00"

InitCost = InputBox("Qual é o custo inicial do ativo?")

SalvageVal = InputBox("Insira o valor do ativo ao final da sua vida".)

MonthLife = InputBox("Qual é a vida útil do ativo em meses?")

Do While MonthLife < YRMOS	' Certifica-se de que o período é >= 1 ano.

MsgBox "A vida do ativo deve ser de um ano ou mais."

MonthLife = InputBox("Qual é a vida útil do ativo em meses?")

Loop

LifeTime = MonthLife / YRMOS	' Converte meses em anos.

If LifeTime <> Int(MonthLife / YRMOS) Then

LifeTime = Int(LifeTime + 1)	' Arredonda para o ano mais próximo.

End If

DepYear = CInt(InputBox("Insira o ano para o cálculo da depreciação".))

Do While DepYear < 1 Or DepYear > LifeTime

MsgBox "Você deve inserir no mínimo 1 mas não mais de " & LifeTime

DepYear = InputBox("Insira o ano para o cálculo da depreciação".)

Loop

Depr = DDB(InitCost, SalvageVal, LifeTime, DepYear)

MsgBox "A depreciação por ano " & DepYear & " é " & _

Format(Depr, Fmt) & "."


Exemplo da função FV

Este exemplo utiliza a função FV para retornar o valor futuro de um investimento dada a taxa percentual que se acumula por período (APR / 12), o número total de pagamentos (TotPmts), o pagamento (Payment), o valor atual do investimento (PVal) e um número que indica se o pagamento é feito no início ou no fim do período de pagamento (PayType). Observe que, como Pagamento representa dinheiro pago, é um número negativo.

Dim Fmt, Payment, APR, TotPmts, PayType, PVal, FVal

Const ENDPERIOD = 0, BEGINPERIOD = 1	' Quando os pagamentos são feitos.

Fmt = "###,###,##0.00"	' Define o formato monetário.

Payment = InputBox("Quanto você pretende economizar por mês?")

APR = InputBox("Insira a taxa de porcentagem anual de juros esperados.")

If APR > 1 Then APR = APR / 100	' Certifica-se de que se trata do

' formulário apropriado.

TotPmts = InputBox("Durante quantos meses espera fazer economia?")

TipoPag = MsgBox("Você faz os pagamentos no fim do mês?", vbYesNo)

If PayType = vbNo Then PayType = BEGINPERIOD Else PayType = ENDPERIOD

PVal = InputBox("Quanto há na conta de poupança agora?")

FVal = FV(APR / 12, TotPmts, -Payment, -PVal, PayType)

MsgBox "Suas economias terão o valor de " & Format(FVal, Fmt) & "."


Exemplo da função IPmt

Este exemplo utiliza a função IPmt para calcular quanto de um pagamento são juros quando todos os pagamentos têm valor igual. São fornecidos a taxa percentual dos juros por período (APR / 12), o período de pagamento para o qual se deseja a parte dos juros (Period), o número total de pagamentos (TotPmts), o valor presente ou principal do empréstimo (PVal), o valor futuro do empréstimo (FVal) e um número que indica se o pagamento vence no início ou no final do período de pagamento (PayType).

Dim FVal, Fmt, PVal, APR, TotPmts, PayType, Period, IntPmt, TotInt, Msg

Const ENDPERIOD = 0, BEGINPERIOD = 1	' Quando os pagamentos são feitos.

FVal = 0	' Normalmente 0 para um empréstimo.

Fmt = "###,###,##0.00"	' Define o formato monetário.

PVal = InputBox("Quanto você quer pegar emprestado?")

APR = InputBox("Qual é a taxa de porcentagem anual do seu empréstimo?")

If APR > 1 Then APR = APR / 100	' Certifica-se de que se trata do

' formulário apropriado.

TotPmts = InputBox("Quantos pagamentos mensais?")

PayType = MsgBox("Você faz os pagamentos no fim do mês?", vbYesNo)

If PayType = vbNo Then PayType = BEGINPERIOD Else PayType = ENDPERIOD

For Period = 1 To TotPmts	' Totaliza os juros.

IntPmt = IPmt(APR / 12, Period, TotPmts, -PVal, FVal, PayType)

TotInt = TotInt + IntPmt

Next Period

Msg = "Você vai pagar um total de " & Format(TotInt, Fmt)

Msg = Msg & " em juros por este empréstimo."

MsgBox Msg	' Exibe os resultados.


Exemplo da função IRR

Neste exemplo, a função IRR retorna a taxa interna de retorno para uma série de 5 fluxos de caixa contidos na matriz Values(). O primeiro elemento da matriz é um fluxo de caixa negativo que representa os custos iniciais do negócio. Os 4 fluxos de caixa restantes representam fluxos de caixas positivos para os quatro anos subseqüentes. Guess é a taxa interna de retorno estimada.

Dim Guess, Fmt, RetRate, Msg

Static Values(5) As Double	' Define a matriz.

Guess = .1	' Inicia a estimativa em 10 por cento.

Fmt = "#0.00"	' Define o formato percentual.

Values(0) = -70.000	' Custo inicial do negócio.

' Fluxo de caixa positivo refletindo a receita por quatro anos

' sucessivos.

Values(1) = 22.000 : Valores(2) = 25.000

Values(3) = 28.000 : Valores(4) = 31.000

RetRate = IRR(Values(), Guess) * 100	' Calcula a taxa interna.

Msg = "A taxa interna de retorno para estes cinco fluxos de caixa é"

Msg = Msg & Format(RetRate, Fmt) & " por cento."

MsgBox Msg	' Exibe a taxa interna de retorno.


Exemplo da função MIRR

Este exemplo utiliza a função MIRR para retornar a taxa interna de retorno modificada de uma série de fluxos de caixa contidos na matriz Values(). LoanAPR representa os juros financeiros e InvAPR representa a taxa de juros recebida no reinvestimento.

Dim LoanAPR, InvAPR, Fmt, RetRate, Msg

Static Values(5) As Double	' Define a matriz.

LoanAPR = .1	' Taxa de empréstimo.

InvAPR = .12	' Taxa de reinvestimento.

Fmt = "#0.00"	' Define o formato monetário.

Values(0) = -70.000	' Custo inicial do negócio.

' Fluxo de caixa positivo refletindo a receita por quatro anos

' sucessivos.

Values(1) = 22.000 : Values(2) = 25.000

Values(3) = 28.000 : Values(4) = 31.000

RetRate = MIRR(Values(), LoanAPR, InvAPR)	' Calcula a taxa interna.

Msg = "A taxa interna de retorno modificada para estes cinco fluxos de caixa é"

Msg = Msg & Format(Abs(RetRate) * 100, Fmt) & "%."

MsgBox Msg	' Exibe a taxa de retorno

' interna.


Exemplo da função NPer

Este exemplo utiliza a função NPer para retornar o número de períodos durante os quais os pagamentos devem ser feitos para liquidar um empréstimo cujo valor está contido em PVal. Também são fornecidos a taxa percentual de juros por período (APR / 12), o pagamento (Payment), o valor futuro do empréstimo (FVal) e o número que indica se o pagamento vence no início ou no final do período de pagamento (PayType).

Dim FVal, PVal, APR, Payment, PayType, TotPmts

Const ENDPERIOD = 0, BEGINPERIOD = 1	' Quando os pagamentos são feitos.

FVal = 0	' Normalmente 0 para um empréstimo.

PVal = InputBox("Quanto você quer pegar emprestado?")

APR = InputBox("Qual é a taxa de porcentagem anual do seu empréstimo?")

If APR > 1 Then APR = APR / 100	' Certifica-se de que se trata do

' formulário apropriado.

Payment = InputBox("Quanto você deseja pagar por mês?")

PayType = MsgBox("Você faz os pagamentos no fim do mês?", vbYesNo)

If PayType = vbNo Then PayType = BEGINPERIOD Else PayType = ENDPERIOD

TotPmts = NPer(APR / 12, -Payment, PVal, FVal, PayType)

If Int(TotPmts) <> TotPmts Then TotPmts = Int(TotPmts) + 1

MsgBox "Você levará " & TotPmts & " meses para liquidar o seu empréstimo."


Exemplo da função NPV

Este exemplo utiliza a função NPV para retornar o valor presente líquido de uma série de fluxos de caixa contidos na matriz Values(). TaxaRet representa a taxa interna fixa de retorno.

Dim Fmt, Guess, RetRate, NetPVal, Msg

Static Values(5) As Double	' Define a matriz.

Fmt = "###,##0.00"	' Define o formato monetário.

Guess = .1	' Inicia a estimativa em 10 por cento.

RetRate = .0625	' Define a taxa interna fixa.

Values(0) = -70.000	' Custo inicial do negócio.

' Fluxo de caixa positivo refletindo a receita por quatro anos

' sucessivos.

Values(1) = 22.000 : Values(2) = 25.000

Values(3) = 28.000 : Values(4) = 31.000

NetPVal = NPV(RetRate, Values())	' Calcula o valor presente líquido.

Msg = "O valor presente líquido destes fluxos de caixa é "

Msg = Msg & Format(NetPVal, Fmt) & "."

MsgBox Msg	' Exibe o valor presente líquido.


Exemplo da função Pmt

Este exemplo utiliza a função Pmt para retornar o pagamento mensal de um empréstimo durante um período fixo. São fornecidos a taxa percentual de juros por período (APR / 12), o número total de pagamentos (TotPmts), o valor presente ou principal do empréstimo (PVal), o valor futuro do empréstimo (FVal) e um número que indica se o pagamento vence no início ou final do período de pagamento (PayType).

Dim Fmt, FVal, PVal, APR, TotPmts, PayType, Payment

Const ENDPERIOD = 0, BEGINPERIOD = 1	' Quando os pagamentos são feitos.

Fmt = "###,###,##0.00"	' Define o formato monetário.

FVal = 0	' Normalmente 0 para um empréstimo.

PVal = InputBox("Quanto você quer pegar emprestado?")

APR = InputBox("Qual é a taxa de porcentagem anual do seu empréstimo?")

If APR > 1 Then APR = APR / 100	' Certifica-se de que se trata do

' formulário apropriado.

TotPmts = InputBox("Quantos pagamentos mensais você vai fazer?")

PayType = MsgBox("Você faz os pagamentos no fim do mês?", vbYesNo)

If PayType = vbNo Then PayType = BEGINPERIOD Else PayType = ENDPERIOD

Payment = Pmt(APR / 12, TotPmts, -PVal, FVal, PayType)

MsgBox "O seu pagamento será " & Format(Payment, Fmt) & " por mês."


Exemplo da função PPmt

Este exemplo utiliza a função PPmt para calcular quanto de um pagamento por um período específico é principal quando todos os pagamentos são de igual valor. São fornecidos a taxa percentual de juros por período (APR / 12), o período de pagamento para o qual se deseja a parte principal (Period), o número total de pagamentos (TotPmts), o valor presente ou principal do empréstimo (PVal), o valor futuro do empréstimo (FVal) e um número que indica se o pagamento vence no início ou no final do período de pagamento (PayType).

Dim NL, TB, Fmt, FVal, PVal, APR, TotPmts, PayType, Payment, Msg, MakeChart, Period, P, I

Const ENDPERIOD = 0, BEGINPERIOD = 1	' Quando os pagamentos são feitos.

NL = Chr(13) & Chr(10)	' Define a nova linha.

TB = Chr(9)	' Define a tabulação.

Fmt = "###,###,##0.00"	' Define o formato monetário.

FVal = 0	' Normalmente 0 para um empréstimo.

PVal = InputBox("Quanto você quer pegar emprestado?")

APR = InputBox("Qual é a taxa de porcentagem anual do seu empréstimo?")

If APR > 1 Then APR = APR / 100	' Certifica-se de que se trata do

' formulário apropriado.

TotPmts = InputBox("Quantos pagamentos mensais você precisa fazer?")

PayType = MsgBox("Você faz os pagamentos no fim do mês?", vbYesNo)

If PayType = vbNo Then PayType = BEGINPERIOD Else PayType = ENDPERIOD

Payment = Abs(-Pmt(APR / 12, TotPmts, PVal, FVal, PayType))

Msg = "O seu pagamento mensal é " & Format(Payment, Fmt) & ". "

Msg = Msg & "Você gostaria de desdobrar o seu principal e

Msg = Msg & "os juros por período?"

MakeChart = MsgBox(Msg, vbYesNo)	' Verifica se você deseja um gráfico.

If MakeChart <> vbNo Then

If TotPmts > 12 Then MsgBox "Somente o primeiro ano será mostrado."

Msg = "Mês  Pagamento  Principal  Juros" & NL

For Period = 1 To TotPmts

If Period > 12 Then Exit For	' Mostra somente os primeiros 12.

P = PPmt(APR / 12, Period, TotPmts, -PVal, FVal, PayType)

P = (Int((P + .005) * 100) / 100)	' Arredonda o principal.

I = Payment - P

I = (Int((I + .005) * 100) / 100)	' Arredonda os juros

Msg = Msg & Period & TB & Format(Payment, Fmt)

Msg = Msg & TB & Format(P, Fmt) & TB & Format(I, Fmt) & NL

Next Period

MsgBox Msg	' Exibe a tabela de amortização.

End If


Exemplo da função PV

Neste exemplo, a função PV retorna o valor presente de uma anuidade de R$ 1.000.000 que fornecerá R$ 50.000 por ano nos próximos 20 anos. São fornecidos a taxa de porcentagem anual esperada (APR), o número total de pagamentos (TotPmts), o valor de cada pagamento (YrIncome), o valor total do investimento (FVal) e o número que indica se cada pagamento é feito no início ou no final do período de pagamento (PayType). Observe que YrIncome é um número negativo porque representa o dinheiro pago da anuidade a cada ano.

Dim Fmt, APR, TotPmts, YrIncome, FVal, PayType, PVal

Const ENDPERIOD = 0, BEGINPERIOD = 1	' Quando os pagamentos são feitos.

Fmt = "###,##0.00"	' Define o formato monetário.

APR = .0825	' Taxa de porcentagem anual.

TotPmts = 20	' Número total de pagamentos.

YrIncome = 50.000	' Receita anual.

FVal = 1000000	' Valor futuro.

PayType = BEGINPERIOD	' Pagamento no início do mês.

PVal = PV(APR, TotPmts, -YrIncome, FVal, PayType)

MsgBox "O valor presente é " & Format(PVal, Fmt) & "."


Exemplo da função Rate

Este exemplo utiliza a função Rate para calcular a taxa de juros de um empréstimo, fornecidos o número total de pagamentos (TotPmts), o valor de pagamento do empréstimo (Payment), o valor presente ou principal do empréstimo (PVal), o valor futuro do empréstimo (FVal), um número que indica se o pagamento vence no início ou no final do período de pagamento (PayType) e uma estimativa da taxa de juros esperada (Guess).

Dim Fmt, FVal, Guess, PVal, Payment, TotPmts, PayType, APR

Const ENDPERIOD = 0, BEGINPERIOD = 1	' Quando os pagamentos são feitos.

Fmt = "##0.00"	' Define o formato percentual.

FVal = 0	' Normalmente 0 para um empréstimo.

Guess = .1	' Estimativa de 10 por cento.

PVal = InputBox("Quanto você pegou emprestado?")

Payment = InputBox("Qual é o seu pagamento mensal?")

TotPmts = InputBox("Quantos pagamentos mensais você precisa fazer?")

PayType = MsgBox("Você faz os pagamentos no fim do mês?", _

vbYesNo)

If PayType = vbNo Then PayType = BEGINPERIOD Else PayType = ENDPERIOD

TPA = (Rate(TotPmts, -Payment, PVal, FVal, PayType, Guess) * 12) * 100

MsgBox "Sua taxa de juros é de " & Format(CInt(APR), Fmt) & " por cento."


Exemplo da função SLN

Este exemplo utiliza a função SLN para retornar a depreciação linear de um ativo por um único período, fornecido o custo inicial do ativo (InitCost), o valor do salvado ao final da vida útil do ativo (SalvageVal) e a vida total do ativo em anos (LifeTime).

Dim Fmt, InitCost, SalvageVal, MonthLife, LifeTime, PDepr

Const YEARMONTHS = 12	' Número de meses em um ano.

Fmt = "###,##0.00"	' Define o formato monetário.

InitCost = InputBox("Qual é o custo inicial do ativo?")

SalvageVal = InputBox("Qual é o valor do ativo ao final da sua vida útil?")

MonthLife = InputBox("Qual é a vida útil do ativo em meses?")

Do While MonthLife < YEARMONTHS	' Certifica-se de que o período é >= 1

' ano.

MsgBox "A vida do ativo deve ser de um ano ou mais."

MonthLife = InputBox("Qual é a vida útil do ativo em meses?")

Loop

LifeTime = MonthLife / YEARMONTHS	' Converte meses em anos.

If LifeTime <> Int(MonthLife / YEARMONTHS) Then

LifeTime = Int(LifeTime + 1)	' Arredonda para o ano mais próximo.

End If

DeprP = SLN(InitCost, SalvageVal, LifeTime)

MsgBox "A depreciação é " & Format(DeprP, Fmt) & " por ano."


Exemplo da função SYD

Este exemplo utiliza a função SYD para retornar a depreciação de um ativo por um período especificado, fornecidos o custo inicial do ativo (CustoInicial), o valor do salvado ao final da vida útil do ativo (ValorDoSalvado) e a vida total do ativo em anos (VidaÚtil). O período em anos pelo qual a depreciação é calculada é DeprP.

Dim Fmt, InitCost, SalvageVal, MonthLife, LifeTime, DepYear, PDepr

Const YEARMONTHS = 12	' Número de meses em um ano.

Fmt = "###,##0.00"	' Define o formato monetário.

InitCost = InputBox("Qual é o custo inicial do ativo?")

SalvageVal = InputBox("Qual é o valor do ativo ao final da sua vida?")

MonthLife = InputBox("Qual é a vida útil do ativo em meses?")

Do While MonthLife < ANOMESES	' Certifica-se de que o período é >= 1 ano.

MsgBox "A vida do ativo deve ser de um ano ou mais."

MonthLife = InputBox("Qual é a vida útil do ativo em meses?")

Loop

LifeTime = MonthLife / YEARMONTHS	' Converte meses em anos.

If LifeTime <> Int(MonthLife / YEARMONTHS) Then

LifeTime = Int(LifeTime + 1)	' Arredonda para o ano mais próximo.

End If

DepYear = CInt(InputBox("Para qual ano você deseja a depreciação?"))

Do While DepYear < 1 Or DepYear > LifeTime

MsgBox "Você deve inserir no mínimo 1 mas não mais de " & LifeTime

DepYear = CInt(InputBox("Para qual ano você deseja a depreciação?"))

Loop

DeprP = SYD(InitCost, SalvageVal, LifeTime, DepYear)

MsgBox "A depreciação por ano " & DepYear & " é " & Format(DeprP, Fmt) & "."


Função DDB

Retorna um Double que especifica a depreciação de um ativo para um período de tempo específico utilizando o método de saldo de declínio duplo ou algum outro método que você especificar.

Sintaxe

DDB(cost, salvage, life, period[,factor])

A função DDB tem estes argumentos nomeados:

Parte	Descrição
cost	Obrigatória. Double que especifica o custo inicial do ativo.
salvage	Obrigatória. Double que especifica o valor do ativo no final de sua vida útil.
life	Obrigatória. Double que especifica a duração da vida útil do ativo.
period	Obrigatória. Double que especifica o período para o qual a depreciação do ativo é calculada.
factor	Opcional. Variant que especifica a taxa de declínio do saldo. Se for omitido, será adotado 2 (método de declínio duplo).
Comentários

O método de saldo de declínio duplo calcula a depreciação a uma taxa acelerada. A depreciação é maior no primeiro período e diminui nos períodos sucessivos.

Os argumentos life e period devem ser expressos nas mesmas unidades. Por exemplo, se life for fornecido em meses, period também deve ser fornecido em meses. Todos os argumentos devem ser números positivos.

A função DDB utiliza a seguinte fórmula para calcular a depreciação para um período fornecido:

Depreciação / period = ((cost – salvage) * factor) / life


Função FV

Retorna um Double que especifica o valor futuro de uma anuidade com base em pagamentos fixos periódicos e uma taxa de juros fixa.

Sintaxe

FV(rate, nper, pmt[, pv[, type]])

A função FV tem estes argumentos nomeados:

Parte	Descrição
rate	Obrigatória. Double que especifica a taxa de juros por período. Por exemplo, se você obtiver um financiamento para um carro com uma taxa de porcentagem anual (TPA) de 10 por cento e efetuar pagamentos mensais, a taxa por período será de 0,1/12, ou 0,0083.
nper	Obrigatória. Integer que especifica o número total de períodos de pagamento na anuidade. Por exemplo, se você pagar prestações mensais de um financiamento de quatro anos para um carro, seu empréstimo terá um total de 4 * 12 (ou 48) períodos de pagamento.
pmt	Obrigatória. Double que especifica o pagamento a ser efetuado em cada período. Os pagamentos geralmente contêm o principal e a taxa de juros que não se altera durante a duração da anuidade.
pv	Opcional. Variant que especifica o valor presente (ou quantia global) de uma série de pagamentos futuros. Por exemplo, quando você obtém um financiamento para comprar um carro, a quantia do empréstimo é o valor presente para a financiadora dos pagamentos mensais do carro que você efetuará. Se for omitido, será assumido o valor 0.
type	Opcional. Variant que especifica quando vencem os pagamentos. Use 0 se os pagamentos vencerem no final do período de pagamento ou 1 se os pagamentos vencerem no início do período. Se for omitido, será assumido o valor 0.
Comentários

Uma anuidade é uma série de pagamentos em dinheiro fixos efetuados durante um período de tempo. A anuidade pode ser um empréstimo (como um financiamento imobiliário) ou um investimento (como uma poupança mensal).

Os argumentos rate e nper devem ser calculados usando-se períodos de pagamento expressos nas mesmas unidades. Por exemplo, se a rate for calculada usando meses, nper também deve ser calculado usando meses.

Para todos os argumentos, a quantia paga (como depósitos em poupança) é representada por valores negativos; a quantia recebida (como cheques de dividendos) é representada por números positivos.


Função IPmt

Retorna um Double que especifica o pagamento de juros em um dado período de uma anuidade com base em pagamentos fixos, periódicos e uma taxa de juros fixa.

Sintaxe

IPmt(rate, per, nper, pv[, fv[, type]])

A função IPmt tem estes argumentos nomeados:

Parte	Descrição
rate	Obrigatória. Double que especifica a taxa de juros por período. Por exemplo, se você obtiver um financiamento para um carro com uma taxa de porcentagem anual (TPA) de 10 por cento e efetuar pagamentos mensais, a taxa por período será de 0,1/12, ou 0,0083.
per	Obrigatória. Double que especifica o período de pagamento no intervalo de 1 até nper.
nper	Obrigatória. Double que especifica o número total de períodos de pagamento na anuidade. Por exemplo, se você pagar prestações mensais de um financiamento de quatro anos para um carro, seu empréstimo terá um total de 4 * 12 (ou 48) períodos de pagamento.
pv	Obrigatória. Double que especifica o valor presente, ou valor de hoje, de uma série de pagamentos ou recebimentos futuros. Por exemplo, quando você obtém um financiamento para comprar um carro, a quantia do empréstimo é o valor presente para a financiadora dos pagamentos mensais do carro que você efetuará.
fv	Opcional. Variant que especifica o valor futuro ou o saldo desejado após ter efetuado o pagamento final. Por exemplo, o valor futuro de um empréstimo é de R$ 0,00 porque esse é o valor após o pagamento final. Contudo, se você quiser poupar R$ 50.000 em um período de 18 anos para garantir a educação de seu filho, então o valor futuro é R$ 50.000. Se for omitido, será assumido o valor 0.
type	Opcional. Variant que especifica quando vencem os pagamentos. Use 0 se os pagamentos vencerem no final do período de pagamento ou 1 se os pagamentos vencerem no início do período. Se for omitido, será assumido o valor 0.
Comentários

Uma anuidade é uma série de pagamentos em dinheiro fixos efetuados durante um período de tempo. A anuidade pode ser um empréstimo (como um financiamento imobiliário) ou um investimento (como uma poupança mensal).

Os argumentos rate e nper devem ser calculados usando-se períodos de pagamento expressos nas mesmas unidades. Por exemplo, se a rate for calculada usando meses, nper também deve ser calculado usando meses.

Para todos os argumentos, a quantia paga (como depósitos em poupança) é representada por valores negativos; a quantia recebida (como cheques de dividendos) é representada por números positivos.


Função IRR

Retorna um Double que especifica a taxa interna de retorno para uma série de fluxos de caixa periódicos (pagamentos e recebimentos).

Sintaxe

IRR(values()[, guess])

A função IRR tem estes argumentos nomeados:

Parte	Descrição
values()	Obrigatória. Matriz de Double que especifica valores de fluxo de caixa. A matriz deve conter pelo menos um valor negativo (um pagamento) e um valor positivo (um recebimento).
guess	Opcional. Variant que especifica o valor por você estimado que IRR retornará. Se for omitido, guess será 0,1 (10 por cento).
Comentários

A taxa de retorno interna é a taxa de juros recebida para um investimento que consiste em pagamentos e recebimentos que ocorrem a intervalos regulares.

A função IRR utiliza a ordem dos valores dentro da matriz para interpretar a ordem de pagamentos e recebimentos. Certifique-se de inserir os valores dos seus pagamentos e recebimentos na seqüência correta. O fluxo de caixa de cada período não precisa ser fixo, como é com a anuidade.

IRR é calculado por iteração. Começando com o valor de guess, IRR calcula várias vezes até que o resultado tenha uma exatidão de 0,00001 por cento. Se IRR não conseguir encontrar um resultado após 20 tentativas, ocorre um erro.


Função MIRR

Retorna um Double que especifica uma taxa interna de retorno modificada para uma série de fluxos de caixa periódicos (pagamentos e recebimentos).

Sintaxe

MIRR(values(), finance_rate, reinvest_rate)

A função MIRR tem estes argumentos nomeados:

Parte	Descrição
values()	Obrigatória. Matriz de Double que especifica valores de fluxo de caixa. A matriz deve conter pelo menos um valor negativo (um pagamento) e um valor positivo (um recebimento).
finance_rate	Obrigatória. Double que especifica a taxa de juros paga como custo do financiamento.
reinvest_rate	Obrigatória. Double que especifica a taxa de juros recebida em ganhos do reinvestimento do dinheiro.
Comentários

A taxa interna de retorno modificada é a taxa interna de retorno quando os pagamentos e recebimentos são financiados com taxas diferentes. A função MIRR leva em conta o custo do investimento (finance_rate) e a taxa de juros recebida no reinvestimento do dinheiro (reinvest_rate).

Os argumentos finance_rate e reinvest_rate são porcentagens expressas em valores decimais. Por exemplo, 12 por cento é expresso como 0,12.

A função MIRR usa a ordem dos valores dentro da matriz para interpretar a ordem dos pagamentos e recebimentos. Certifique-se de inserir os valores dos seus pagamentos e recebimentos na seqüência correta.


Função NPer

Retorna um Double que especifica o número de períodos para uma anuidade com base em pagamentos fixos e periódicos e uma taxa de juros fixa.

Sintaxe

NPer(rate, pmt, pv[, fv[, type]])

A função NPer tem estes argumentos nomeados:

Parte	Descrição
rate	Obrigatória. Double que especifica a taxa de juros por período. Por exemplo, se você obtiver um financiamento para um carro com uma taxa de porcentagem anual (TPA) de 10 por cento e efetuar pagamentos mensais, a taxa por período será de 0,1/12, ou 0,0083.
pmt	Obrigatória. Double que especifica o pagamento a ser efetuado em cada período. Os pagamentos geralmente contêm o principal e a taxa de juros que não se altera durante a duração da anuidade.
pv	Obrigatória. Double que especifica o valor presente, ou valor de hoje, de uma série de pagamentos ou recebimentos futuros. Por exemplo, quando você obtém um financiamento para comprar um carro, a quantia do empréstimo é o valor presente para a financiadora dos pagamentos mensais do carro que você efetuará.
fv	Opcional. Variant que especifica o valor futuro ou o saldo desejado após ter efetuado o pagamento final. Por exemplo, o valor futuro de um empréstimo é de R$ 0,00 porque esse é o valor após o pagamento final. Contudo, se você quiser poupar R$ 50.000 em um período de 18 anos para garantir a educação de seu filho, então o valor futuro é R$ 50.000. Se for omitido, será assumido o valor 0.
type	Opcional. Variant que especifica quando vencem os pagamentos. Use 0 se os pagamentos vencerem no final do período de pagamento ou 1 se os pagamentos vencerem no início do período. Se for omitido, será assumido o valor 0.
Comentários

Uma anuidade é uma série de pagamentos em dinheiro fixos efetuados durante um período de tempo. A anuidade pode ser um empréstimo (como um financiamento imobiliário) ou um investimento (como uma poupança mensal).

Para todos os argumentos, o valor pago (como depósitos em poupança) é representado por números negativos; o valor recebido (como cheques de dividendos) é representado por números positivos.


Função NPV

Retorna um Double que especifica o valor líquido atual de um investimento com base em uma série de fluxos de caixa periódicos (pagamentos e recebimentos) e uma taxa de desconto.

Sintaxe

NPV(rate, values())

A função NPV tem estes argumentos nomeados:

Parte	Descrição
rate	Obrigatória. Double que especifica a taxa de desconto em um período, expresso na forma de valor decimal.
values()	Obrigatória. Matriz de Double que especifica valores de fluxo de caixa. A matriz deve conter pelo menos um valor negativo (um pagamento) e um valor positivo (um recebimento).
Comentários

O valor presente líquido de um investimento é o valor atual de uma futura série de pagamentos ou recebimentos.

A função NPV usa a ordem dos valores dentro da matriz para interpretar a ordem dos pagamentos ou recebimentos. Certifique-se de inserir os valores dos seus pagamentos e recebimentos na seqüência correta.

O investimento NPV começa um período antes da data do primeiro valor de fluxo de caixa e termina com o último valor de fluxo de caixa da matriz.

O cálculo do valor presente líquido é baseado nos fluxos de caixa futuros. Se o seu primeiro fluxo de caixa ocorrer no início do primeiro período, o primeiro valor deverá ser adicionado ao valor retornado por NPV e não deve ser incluído nos valores de fluxo de caixa de values( ).

A função NPV é semelhante à função PV (valor presente) exceto que a função PV permite que os fluxos de caixa comecem no final ou no início do período. Ao contrário dos valores varáveis de fluxo de caixa NPV, os fluxos de caixa PV devem ser fixos durante o investimento.


Função Pmt

Retorna um Double que especifica o pagamento de uma anuidade com base em pagamentos fixos, periódicos e uma taxa de juros fixa.

Sintaxe

Pmt(rate, nper, pv[, fv[, type]])

A função Pmt tem estes argumentos nomeados:

Parte	Descrição
rate	Obrigatória. Double que especifica a taxa de juros por período. Por exemplo, se você obtiver um financiamento para um carro com uma taxa de porcentagem anual (TPA) de 10 por cento e efetuar pagamentos mensais, a taxa por período será de 0,1/12, ou 0,0083.
nper	Obrigatória. Integer que especifica o número total de períodos de pagamento na anuidade. Por exemplo, se você pagar prestações mensais de um financiamento de quatro anos para um carro, seu empréstimo terá um total de 4 * 12 (ou 48) períodos de pagamento.
pv	Obrigatória. Double que especifica o valor atual (ou a quantia global) que uma série de pagamentos a serem feitos no futuro valem agora. Por exemplo, quando você obtém um financiamento para comprar um carro, a quantia do empréstimo é o valor presente para a financiadora dos pagamentos mensais do carro que você efetuará.
fv	Opcional. Variant que especifica o valor futuro ou o saldo desejado após ter efetuado o pagamento final. Por exemplo, o valor futuro de um empréstimo é de R$ 0,00 porque esse é o valor após o pagamento final. Contudo, se você quiser poupar R$ 50.000 em um período de 18 anos para garantir a educação de seu filho, então o valor futuro é R$ 50.000. Se for omitido, será assumido o valor 0.
type	Opcional. Variant que especifica quando vencem os pagamentos. Use 0 se os pagamentos vencerem no final do período de pagamento ou 1 se os pagamentos vencerem no início do período. Se for omitido, será assumido o valor 0.
Comentários

Uma anuidade é uma série de pagamentos em dinheiro fixos efetuados durante um período de tempo. A anuidade pode ser um empréstimo (como um financiamento imobiliário) ou um investimento (como uma poupança mensal).

Os argumentos rate e nper devem ser calculados usando-se períodos de pagamento expressos nas mesmas unidades. Por exemplo, se a rate for calculada usando meses, nper também deve ser calculado usando meses.

Para todos os argumentos, a quantia paga (como depósitos em poupança) é representada por valores negativos; a quantia recebida (como cheques de dividendos) é representada por números positivos.


Função PPmt

Retorna um Double que especifica o pagamento principal em um dado período de uma anuidade com base em pagamentos fixos, periódicos e uma taxa de juros fixa.

Sintaxe

PPmt(rate, per, nper, pv[, fv[, type]])

A função PPmt tem estes argumentos nomeados:

Parte	Descrição
rate	Obrigatória. Double que especifica a taxa de juros por período. Por exemplo, se você obtiver um financiamento para um carro com uma taxa de porcentagem anual (TPA) de 10 por cento e efetuar pagamentos mensais, a taxa por período será de 0,1/12, ou 0,0083.
per	Obrigatória. Integer que especifica o período de pagamento no intervalo de 1 até nper.
nper	Obrigatória. Integer que especifica o número total de períodos de pagamento na anuidade. Por exemplo, se você pagar prestações mensais de um financiamento de quatro anos para um carro, seu empréstimo terá um total de 4 * 12 (ou 48) períodos de pagamento.
pv	Obrigatória. Double que especifica o valor presente, ou valor de hoje, de uma série de pagamentos ou recebimentos futuros. Por exemplo, quando você obtém um financiamento para comprar um carro, a quantia do empréstimo é o valor presente para a financiadora dos pagamentos mensais do carro que você efetuará.
fv	Opcional. Variant que especifica o valor futuro ou o saldo desejado após ter efetuado o pagamento final. Por exemplo, o valor futuro de um empréstimo é de R$ 0,00 porque esse é o valor após o pagamento final. Contudo, se você quiser poupar R$ 50.000 em um período de 18 anos para garantir a educação de seu filho, então o valor futuro é R$ 50.000. Se for omitido, será assumido o valor 0.
type	Opcional. Variant que especifica quando vencem os pagamentos. Use 0 se os pagamentos vencerem no final do período de pagamento ou 1 se os pagamentos vencerem no início do período. Se for omitido, será assumido o valor 0.
Comentários

Uma anuidade é uma série de pagamentos em dinheiro fixos efetuados durante um período de tempo. A anuidade pode ser um empréstimo (como um financiamento imobiliário) ou um investimento (como uma poupança mensal).

Os argumentos rate e nper devem ser calculados usando-se períodos de pagamento expressos nas mesmas unidades. Por exemplo, se a rate for calculada usando meses, nper também deve ser calculado usando meses.

Para todos os argumentos, a quantia paga (como depósitos em poupança) é representada por valores negativos; a quantia recebida (como cheques de dividendos) é representada por números positivos.


Função PV

Retorna um Double que especifica o valor atual de uma anuidade com base em pagamentos fixos periódicos a serem pagos no futuro e taxas de juros fixas.

Sintaxe

PV(rate, nper, pmt[, fv[, type]])

A função PV tem estes argumentos nomeados:

Parte	Descrição
rate	Obrigatória. Double que especifica a taxa de juros por período. Por exemplo, se você obtiver um financiamento para um carro com uma taxa de porcentagem anual (TPA) de 10 por cento e efetuar pagamentos mensais, a taxa por período será de 0,1/12, ou 0,0083.
nper	Obrigatória. Integer que especifica o número total de períodos de pagamento na anuidade. Por exemplo, se você pagar prestações mensais de um financiamento de quatro anos para um carro, seu empréstimo terá um total de 4 * 12 (ou 48) períodos de pagamento.
pmt	Obrigatória. Double que especifica o pagamento a ser efetuado em cada período. Os pagamentos geralmente contêm o principal e a taxa de juros que não se altera durante a duração da anuidade.
fv	Opcional. Variant que especifica o valor futuro ou o saldo desejado após ter efetuado o pagamento final. Por exemplo, o valor futuro de um empréstimo é de R$ 0,00 porque esse é o valor após o pagamento final. Contudo, se você quiser poupar R$ 50.000 em um período de 18 anos para garantir a educação de seu filho, então o valor futuro é R$ 50.000. Se for omitido, será assumido o valor 0.
type	Opcional. Variant que especifica quando vencem os pagamentos. Use 0 se os pagamentos vencerem no final do período de pagamento ou 1 se os pagamentos vencerem no início do período. Se for omitido, será assumido o valor 0.
Comentários

Uma anuidade é uma série de pagamentos em dinheiro fixos efetuados durante um período de tempo. A anuidade pode ser um empréstimo (como um financiamento imobiliário) ou um investimento (como uma poupança mensal).

Os argumentos rate e nper devem ser calculados usando-se períodos de pagamento expressos nas mesmas unidades. Por exemplo, se a rate for calculada usando meses, nper também deve ser calculado usando meses.

Para todos os argumentos, a quantia paga (como depósitos em poupança) é representada por valores negativos; a quantia recebida (como cheques de dividendos) é representada por números positivos.


Função Rate

Retorna um Double que especifica a taxa de juros por período da anuidade.

Sintaxe

Rate(nper, pmt, pv[, fv[, type[, guess]]])

A função Rate tem estes argumentos nomeados:

Parte	Descrição
nper	Obrigatória. Double que especifica o número total de períodos de pagamento na anuidade. Por exemplo, se você pagar prestações mensais de um financiamento de quatro anos para um carro, seu empréstimo terá um total de 4 * 12 (ou 48) períodos de pagamento.
pmt	Obrigatória. Double que especifica o pagamento a ser efetuado em cada período. Os pagamentos geralmente contêm o principal e a taxa de juros que não se altera durante a duração da anuidade.
pv	Obrigatória. Double que especifica o valor presente, ou valor de hoje, de uma série de pagamentos ou recebimentos futuros. Por exemplo, quando você obtém um financiamento para comprar um carro, a quantia do empréstimo é o valor presente para a financiadora dos pagamentos mensais do carro que você efetuará.
fv	Opcional. Variant que especifica o valor futuro ou o saldo desejado após ter efetuado o pagamento final. Por exemplo, o valor futuro de um empréstimo é de R$ 0,00 porque esse é o valor após o pagamento final. Contudo, se você quiser poupar R$ 50.000 em um período de 18 anos para garantir a educação de seu filho, então o valor futuro é R$ 50.000. Se for omitido, será assumido o valor 0.
type	Opcional. Variant que especifica um número indicando o vencimento dos pagamentos. Use 0 se os pagamentos vencerem no final do período de pagamento ou 1 se os pagamentos vencerem no início do período. Se for omitido, será assumido o valor 0.
guess	Opcional. Variant que especifica o valor por você estimado que será retornado por Rate. Se for omitido, guess será 0,1 (10 por cento).
Comentários

Uma anuidade é uma série de pagamentos em dinheiro fixos efetuados durante um período de tempo. A anuidade pode ser um empréstimo (como um financiamento imobiliário) ou um investimento (como uma poupança mensal).

Para todos os argumentos, o valor pago (como depósitos em poupança) é representado por números negativos; o valor recebido (como cheques de dividendos) é representado por números positivos.

Rate é calculado por iteração. Começando com o valor guess, Rate calcula várias vezes até que o resultado seja exato dentro de 0,00001 por cento. Se Rate não conseguir encontrar um resultado após 20 tentativas, ocorre um erro. Se sua estimativa for de 10 por cento e Rate falhar, tente um valor diferente para guess.


Função SLN

Retorna um Double que especifica a depreciação linear de um ativo para um período único.

Sintaxe

SLN(cost, salvage, life)

A função SLN tem estes argumentos nomeados:

Parte	Descrição
cost	Obrigatória. Double que especifica o custo inicial do ativo.
salvage	Obrigatória. Double que especifica o valor do ativo no final de sua vida útil.
life	Obrigatória. Double que especifica a duração da vida útil do ativo.
Comentários

O período de depreciação deve ser expresso na mesma unidade que o argumento life. Todos os argumentos devem ser números positivos.


Função SYD

Retorna um Double que especifica a depreciação dos dígitos da soma dos anos de um ativo para um período especificado.

Sintaxe

SYD(cost, salvage, life, period)

A função SYD tem estes argumentos nomeados:

Parte	Descrição
cost	Obrigatória. Double que especifica o custo inicial do ativo.
salvage	Obrigatória. Double que especifica o valor do ativo no final de sua vida útil.
life	Obrigatória. Double que especifica a duração da vida útil do ativo.
period	Obrigatória. Double que especifica o período para o qual a depreciação do ativo é calculada.
Comentários

Os argumentos life e period devem ser expressos nas mesmas unidades. Por exemplo, se life for fornecido em meses, period também deve ser fornecido em meses. Todos os argumentos devem ser números positivos.


Exemplo da função IsArray

Este exemplo utiliza a função IsArray para verificar se uma variável é uma matriz.

Dim MyArray(1 To 5) As Integer, YourArray, MyCheck	' Declara as variáveis de matriz.

YourArray = Array(1, 2, 3)	' Utiliza a função Array.

MyCheck = IsArray(MyArray)	' Retorna True.

MyCheck = IsArray(YourArray)	' Retorna True.


Exemplo da função IsDate

Este exemplo utiliza a função IsDate para determinar se uma expressão pode ser convertida em uma data.

Dim MyDate, YourDate, NoDate, MyCheck

MyDate = "12 de Fevereiro de 1969": YourDate = #2/12/69#: SemData = "Alô"

MyCheck = IsDate(MyDate)	' Retorna True.

MyCheck = IsDate(YourDate)	' Retorna True.

MyCheck = IsDate(NoDate)	' Retorna False.


Exemplo da função IsEmpty

Este exemplo utiliza a função IsEmpty para determinar se uma variável foi inicializada.

Dim MyVar, MyCheck

MyCheck = IsEmpty(MyVar)	' Retorna True.

MyVar = Null	' Atribui Null.

MyCheck = IsEmpty(MyVar)	' Retorna False.

MyVar = Empty	' Atribui Empty.

MyCheck = IsEmpty(MyVar)	' Retorna True.


Exemplo da função IsError

Este exemplo utiliza a função IsError para verificar se uma expressão numérica é um valor de erro. A função CVErr é utilizada para retornar uma Error Variant de uma função definida pelo usuário. Suponha que FunçãoDoUsuário é um procedimento de função definido pelo usuário que retorna um valor de erro; por exemplo, um valor de retorno atribuído com a instrução UserFunction = CVErr(32767), onde 32767 é um número definido pelo usuário.

Dim ReturnValue, MyCheck

ReturnValue = UserFunction()

MyCheck = IsError(ReturnValue)	' Retorna True.


Exemplo da função IsMissing

Este exemplo utiliza a função IsMissing para verificar se um argumento opcional foi passado a um procedimento definido pelo usuário. Observe que os argumentos Optional agora podem ter valores e tipos padrão diferentes de Variant.

Dim ReturnValue

' As instruções a seguir chamam o procedimento de função definido pelo

' usuário.

ReturnValue = ReturnTwice()	' Retorna Null.

ReturnValue = ReturnTwice(2)	' Retorna 4.

' Definição do procedimento de função.

Function ReturnTwice(Optional A)

If IsMissing(A) Then

' Se o argumento estiver ausente, retorna um Null.

ReturnTwice = Null

Else

' Se o argumento estiver presente, retorna duas vezes o valor.

ReturnTwice = A * 2

End If

End Function


Exemplo da função IsNull

Este exemplo utiliza a função IsNull para determinar se uma variável contém um Null.

Dim MyVar, MyCheck

MyCheck = IsNull(MyVar)	' Retorna False.

MyVar = ""

MyCheck = IsNull(MyVar)	' Retorna False.

MyVar = Null

MyCheck = IsNull(MyVar)	' Retorna True.


Exemplo da função IsNumeric

Este exemplo utiliza a função IsNumeric para determinar se uma variável pode ser avaliada como um número.

Dim MyVar, MyCheck

MyVar = "53"	' Atribui o valor.

MyCheck = IsNumeric(MyVar)	' Retorna True.

MyVar = "459,95"	' Atribui o valor.

MyCheck = IsNumeric(MyVar)	' Retorna True.

MyVar = "Ajuda 45"	' Atribui o valor.

MyCheck = IsNumeric(MyVar)	' Retorna False.


Exemplo da função IsObject

Este exemplo utiliza a função IsObject para determinar se um identificador representa uma variável de objeto. MeuObjeto and SeuObjeto são variáveis de objeto do mesmo tipo. São nomes genéricos utilizados somente com fins ilustrativos.

Dim MyInt As Integer, YourObject, MyCheck	' Declara as variáveis.

Dim MyObject As Object

Set YourObject = MyObject	' Atribui uma referência a objeto.

MyCheck = IsObject(MyObject)	' Retorna True.

MyCheck = IsObject(MyInt)	' Retorna False.


Exemplo da função TypeName

Este exemplo utiliza a função TypeName para retornar informações sobre uma variável.

' Declara as variáveis.

Dim NullVar, MyType, StrVar As String, IntVar As Integer, CurVar As Currency

Dim ArrayVar (1 To 5) As Integer

NullVar = Null	' Atribui o valor Null.

MyType = TypeName(StrVar)	' Retorna "String".

MyType = TypeName(IntVar)	' Retorna "Integer".

MyType = TypeName(CurVar)	' Retorna "Currency".

MyType = TypeName(NullVar)	' Retorna "Null".

MyType = TypeName(ArrayVar)	' Retorna "Integer()".


Exemplo da função VarType

Este exemplo utiliza a função VarType para determinar o subtipo de uma variável.

Dim IntVar, StrVar, DateVar, MyCheck

' Inicialize variáveis.

IntVar = 459: StrVar = "Alô Mundo": DateVar = #2/12/69#

MyCheck = VarType(IntVar)	' Retorna 2.

MyCheck = VarType(DateVar)	' Retorna 7.

MyCheck = VarType(StrVar)	' Retorna 8.


Função IsArray

Retorna um valor Boolean que indica se uma variável é uma matriz.

Sintaxe

IsArray(varname)

O argumento obrigatório varname é um identificador que especifica uma variável.

Comentários

IsArray retornará True se a variável for uma matriz; caso contrário, retornará False. IsArray é especialmente útil com variantes que contêm matrizes.


Função IsDate

Retorna um valor Boolean que indica se uma expressão pode ser convertida em uma data.

Sintaxe

IsDate(expression)

O argumento obrigatório expression é uma Variant que contém uma expressão de data ou expressão de seqüência de caracteres reconhecida como uma data ou hora.

Comentários

IsDate retornará True se a expressão for uma data ou for reconhecida como uma data válida; caso contrário, retornará False. No Microsoft Windows, o intervalo de datas válidas é de 1º de janeiro de 100 D.C. a 31 de dezembro de 9999 D.C. Os intervalos podem variar de um sistema operacional para outro.


Função IsEmpty

Retorna um valor Boolean que indica se uma variável foi inicializada.

Sintaxe

IsEmpty(expression)

O argumento obrigatório expression é uma Variant que contém uma expressão numérica ou expressão de seqüência de caracteres. Entretanto, uma vez que IsEmpty é utilizado para determinar se certas variáveis estão inicializadas, o argumento expression é geralmente um nome de variável única.

Comentários

IsEmpty retornará True se a variável não tiver sido inicializada ou se tiver sido explicitamente definida como Empty; caso contrário, retornará False. Se expression contiver mais de uma variável, False sempre será retornado. IsEmpty retorna somente informações significativas para variants.


Função IsError

Retorna um valor Boolean que indica se uma expressão é um valor de erro.

Sintaxe

IsError(expression)

O argumento obrigatório expression pode ser qualquer expressão válida.

Comentários

Os valores de erro são criados pela conversão de números reais em valores de erro utilizando a função CVErr. A função IsError é utilizada para determinar se uma expressão numérica representa um erro. IsError retornará True se o argumento expression indicar um erro. Caso contrário, retornará False.


Função IsMissing

Retorna um valor Boolean que indica se um argumento Variant opcional foi passado para um procedimento.

Sintaxe

IsMissing(argname)

O argumento obrigatório argname contém o nome de um argumento de procedimento Variant opcional.

Comentários

Utilize a função IsMissing para detectar se argumentos Variant opcionais foram fornecidos ou não na chamada de um procedimento. IsMissing retornará True se nenhum valor tiver sido passado para o argumento especificado. Caso contrário, retornará False. Se IsMissing retornar True para um argumento, a utilização do argumento ausente em outro código pode gerar um erro definido pelo usuário. Se IsMissing for utilizado em um argumento ParamArray, ele sempre retornará False. Para detectar um ParamArray vazio, faça um teste para ver se o limite superior da matriz é menor que seu limite inferior.

Observação   IsMissing não funciona em tipos de dados simples (como Integer ou Double) porque, diferentemente de Variants, eles não têm uma disposição para um bit de sinalizador "não encontrado". Por essa razão, a sintaxe para os argumentos opcionais digitados permite a você especificar um valor padrão. Se o argumento for omitido quando o procedimento for chamado, então o argumento terá este valor padrão, como no exemplo abaixo:

Sub MySub(Optional MyVar As String = "valorespecial")

    If MyVar = "valorespecial" Then

    ' MyVar foi omitida.

    Else

    ...

End Sub

Em muitos casos você pode omitir totalmente o teste If MinhaVar tornando o valor padrão igual ao valor que desejar que MyVar contenha caso o usuário o omita da chamada de função. Isto torna o seu código mais conciso e eficiente.


Função IsNull

Retorna um valor Boolean que indica se uma expressão não contém nenhum dado válido (Null).

Sintaxe

IsNull(expression)

O argumento obrigatório expression é uma Variant que contém uma expressão numérica ou expressão de seqüência de caracteres.

Comentários

IsNull retornará True se expression for Null; caso contrário, IsNull retornará False. Se expression consistir em mais de uma variável, Null em qualquer variável constituinte fará com que True seja retornado para a expressão inteira.

O valor Null indica que Variant não contém nenhum dado válido. Null não é o mesmo que Empty, que indica que uma variável ainda não foi inicializada. Ele também não é o mesmo que uma seqüência de comprimento zero (""), o que às vezes é chamado de seqüência de caracteres nula.

Importante   Utilize a função IsNull para determinar se uma expressão contém um valor Null. Expressões que você esperaria que fossem avaliadas como True em algumas circunstâncias, como If Var = Null e If Var <> Null, são sempre False. Isto acontece porque qualquer expressão que contém um Null é por si mesma Null e, portanto, False.


Função IsNumeric

Retorna um valor Boolean que indica se uma expressão pode ser avaliada como um número.

Sintaxe

IsNumeric(expression)

O argumento obrigatório expression é uma Variant que contém uma expressão numérica ou expressão de seqüência de caracteres.

Comentários

IsNumeric retornará True se a expression inteira for reconhecida como um número; caso contrário, retornará False.

IsNumeric retornará False se expression for uma expressão de data.


Função IsObject

Retorna um valor Boolean que indica se um identificador representa uma variável de objeto.

Sintaxe

IsObject(identifier)

O argumento obrigatório identifier é um nome de variável.

Comentários

IsObject é útil somente para determinar se uma Variant é de VarType vbObject. Isto poderia ocorrer se Variant realmente fizesse referência (ou se tivesse feito referência alguma vez) a um objeto, ou se contiver Nothing.

IsObject retornará True se identifier for uma variável declarada com o tipo Object ou qualquer tipo de classe válido, ou se identifier for uma Variant de VarType vbObject, ou um objeto definido pelo usuário; caso contrário, retornará False. IsObject retornará True mesmo que a variável tenha sido definida como Nothing.

Utilize a interceptação de erro para se certificar de que a referência a um objeto é válida.


Função TypeName

Retorna uma String que fornece informações sobre uma variável.

Sintaxe

TypeName(varname)

O argumento obrigatório varname é uma Variant que contém qualquer variável, exceto a de tipo definido pelo usuário.

Comentários

A seqüência de caracteres retornada por TypeName pode ser qualquer uma das seguintes:

Seqüência de caracteres retornada	Variável
tipo de objeto	Um objeto cujo tipo é tipodeobjeto
Byte	Valor em bytes
Integer	Número inteiro
Long	Número inteiro longo
Single	Número de ponto flutuante de precisão simples
Double	Número de ponto flutuante de dupla precisão
Currency	Valor de moeda
Decimal	Valor decimal
Date	Valor de data
String	Seqüência
Boolean	Valor booleano
Error	Um valor de erro
Empty	Não inicializada
Null	Nenhum dado válido
Object	Um objeto
Unknown	Um objeto cujo tipo é desconhecido
Nothing	Variável de objeto que não se refere a um objeto
Se varname for uma matriz, a seqüência de caracteres retornada pode ser qualquer uma das seqüências retornadas possíveis (ou Variant) com parênteses vazios anexados. Por exemplo, se varname for uma matriz de números inteiros, TypeName retornará "Integer()".


Função VarType

Retorna um Integer que indica o subtipo de uma variável.

Sintaxe

VarType(varname)

O argumento obrigatório varname é uma Variant que contém qualquer variável, exceto a de tipo definido pelo usuário.

Valores retornados

Constante	Valor	Descrição
vbEmpty	0	Empty (não inicializada)
vbNull	1	Null (nenhum dado válido)
vbInteger	2	Número inteiro
vbLong	3	Número inteiro longo
vbSingle	4	Número de ponto flutuante de precisão simples
vbDouble	5	Número de ponto flutuante de dupla precisão
vbCurrency	6	Valor de moeda
vbDate	7	Valor de data
vbString	8	Seqüência
vbObject	9	Objeto
vbError	10	Valor de erro
vbBoolean	11	Valor booleano
vbVariant	12	Variant (utilizada somente com matrizes de variantes)
vbDataObject	13	Um objeto de acesso de dados
vbDecimal	14	Valor decimal
vbByte	17	Valor em bytes
vbUserDefinedType	36	Variantes que contêm tipos definidos pelo usuário
vbArray	8192	Matriz
Observação   Essas constantes são especificadas pelo Visual Basic for Applications. Os nomes podem ser utilizados em qualquer parte do seu código no lugar dos valores reais.

Comentários

A função VarType nunca retorna o valor de vbArray por si mesma. Ele é sempre adicionado a algum outro valor para indicar uma matriz de um tipo específico. A constante vbVariant somente é retornada em conjunto com vbArray para indicar que o argumento para a função VarType é uma matriz do tipo Variant. Por exemplo, o valor retornado para uma matriz de números inteiros é calculado como vbInteger + vbArray ou 8194. Se um objeto possuir uma propriedade padrão, VarType (object) retornará o tipo da propriedade padrão do objeto.


Empty (palavra-chave)
Empty

A palavra-chave Empty é utilizada como um subtipo de Variant. Ela indica um valor de variável não inicializada.


False <palavra-chave>
False

A palavra-chave False tem valor igual a 0.


Me <palavra-chave>
Me

A palavra-chave Me comporta-se como uma variável declarada implicitamente. Ela está automaticamente disponível para todos os procedimentos em um módulo de classe. Quando uma classe pode ter mais de uma ocorrência, Me proporciona uma forma de referir a ocorrência específica da classe onde o código está sendo executado. O uso de Me é particularmente útil para passar informações sobre a ocorrência de uma classe que está sendo atualmente executada para um procedimento em um outro módulo. Por exemplo, suponha que você possua o seguinte procedimento em um módulo:

Sub ChangeFormColor(FormName As Form)

FormName.BackColor = RGB(Rnd * 256, Rnd * 256, Rnd * 256)

End Sub

Você pode chamar esse procedimento e passar a ocorrência atual da classe do Formulário como um argumento utilizando a seguinte instrução:

ChangeFormColor Me


Nothing <palavra-chave>
Nothing

A palavra-chave Nothing é utilizada para desassociar uma variável de objeto de um objeto real. Use a instrução Set para atribuir Nothing a uma variável de objeto. Por exemplo:

Set MyObject = Nothing

Diversas variáveis de objeto podem se referir ao mesmo objeto real. Quando Nothing é atribuído a uma variável de objeto, essa variável não fará mais referência ao objeto real. Quando várias variáveis de objeto fazem referência ao mesmo objeto, os recursos de memória e sistema associados ao objeto ao qual as variáveis se referem são liberados somente após todos eles terem sido definidos como Nothing, usando Set de forma explícita, ou implícita após a última variável de objeto definida como Nothing sair do escopo.


Null <palavra-chave>
Null

A palavra-chave Null é utilizada como um subtipo de Variant. Ela indica que uma variável não contém nenhum dado válido.


<palavra-chave> True
True

A palavra-chave True tem valor igual a -1.


Exemplo da função MacScript

Este exemplo utiliza a função MacScript para abrir a caixa de diálogo Choose File (o diálogo de arquivo padrão do Macintosh). O caminho completo do arquivo escolhido pelo usuário é retornado. Se for apropriado, a especificação de caminho será precedida pelo tipo do arquivo.

ThePath$ = Macscript("ChooseFile")


Função MacID

Utilizada no Macintosh para converter uma constante de 4 caracteres em um valor que pode ser utilizado por Dir, Kill, Shell e AppActivate.

Sintaxe

MacID(constant)

O argumento obrigatório constant consiste em 4 caracteres utilizados para especificar um tipo de recurso, tipo de arquivo, assinatura do aplicativo ou Evento Apple, por exemplo, TEXT, OBIN, "XLS5" para arquivos do Excel ("XLS8" para Excel 97), Microsoft Word utiliza "W6BN" ("W8BN" para Word 97) e assim por diante.

Comentários

MacID é utilizada com Dir e Kill para especificar um tipo de arquivo do Macintosh. Como o Macintosh não suporta * e ? como curingas, você pode utilizar uma constante de quatro caracteres em vez desses sinais para identificar grupos de arquivos. Por exemplo, a instrução a seguir retorna arquivos do tipo TEXT da pasta atual:

Dir("AlgumCaminho", MacID("TEXT"))

MacID é utilizada com Shell e AppActivate para especificar um aplicativo que utiliza a assinatura exclusiva do aplicativo.


Função MacScript

Executa um script AppleScript e retorna um valor retornado pelo script, se houver.

Sintaxe

MacScript script

O argumento script é uma expressão de seqüência. A Expressão de seqüência pode ser uma série de comandos AppleScript ou pode especificar o nome de um script AppleScript ou um arquivo de script.

Comentários

Scripts multilinha podem ser criados incorporando-se caracteres de retorno de carro (Chr(13)).


Exemplo da função Abs

Este exemplo utiliza a função Abs para computar o valor absoluto de um número.

Dim MyNumber

MyNumber = Abs(50,3)	' Retorna 50,3.

MyNumber = Abs(-50,3)	' Retorna 50,3.


Exemplo da função Atn

Este exemplo utiliza a função Atn para calcular o valor de pi.

Dim pi

pi = 4 * Atn(1)	' Calcula o valor de pi.


Exemplo da função Cos

Este exemplo utiliza a função Cos para retornar o co-seno de um ângulo.

Dim MyAngle, MySecant

MyAngle = 1,3	' Define o ângulo em radianos.

MySecant = 1 / Cos(MyAngle)	' Calcula a secante.


Exemplo da função Exp

Este exemplo utiliza a função Exp para retornar e elevado a uma potência.

Dim MyAngle, MyHSin

' Define o ângulo em radianos.

MyAngle = 1,3

' Calcula o seno hiperbólico.

MyHSin = (Exp(MyAngle) - Exp(-1 * MyAngle)) / 2


Exemplo da função Int e da função Fix

Este exemplo ilustra como as funções Int e Fix retornam porções inteiras de números. No caso de um argumento de número negativo, a função Int retorna o primeiro inteiro negativo menor que ou igual ao número; a função Fix retorna o primeiro inteiro negativo maior que ou igual ao número.

Dim MyNumber

MyNumber = Int(99,8)	' Retorna 99.

MyNumber = Fix(99,2)	' Retorna 99.

MyNumber = Int(-99,8)	' Retorna -100.

MyNumber = Fix(-99,8)	' Retorna -99.

MyNumber = Int(-99,2)	' Retorna -100.

MyNumber = Fix(-99,2)	' Retorna -99.


Exemplo da função Log

Este exemplo utiliza a função Log para retornar o logaritmo natural de um número.

Dim MyAngle, MyLog

' Define o ângulo em radianos.

MyAngle = 1,3

' Calcula o seno hiperbólico inverso.

MyLog = Log(MyAngle + Sqr(MyAngle * MyAngle + 1))


Exemplo da instrução Randomize

Este exemplo utiliza a instrução Randomize para inicializar o gerador de números aleatórios. Como o argumento de número foi omitido, Randomize utiliza o valor de retorno da função Timer como o novo valor semente.

Dim MyValue

Randomize	' Inicializa o gerador de números aleatórios.

MyValue = Int((6 * Rnd) + 1)	' Gera um valor aleatório entre 1 e 6.


Exemplo da função Rnd

Este exemplo utiliza a função Rnd para gerar um valor inteiro aleatório de 1 a 6.

Dim MyValue

MyValue = Int((6 * Rnd) + 1)	' Gera um valor aleatório entre 1 e 6.


Exemplo da função Sgn

Este exemplo utiliza a função Sgn para determinar o sinal de um número.

Dim MyVar1, MyVar2, MyVar3, MySign

MyVar1 = 12: MyVar2 = -2.4: MyVar3 = 0

MySign = Sgn(MyVar1)	' Retorna 1.

MySign = Sgn(MyVar2)	' Retorna -1.

MySign = Sgn(MyVar3)	' Retorna 0.


Exemplo da função Sin

Este exemplo utiliza a função Sin para retornar o seno de um ângulo.

Dim MyAngle, MyCosecant

MyAngle = 1,3	' Define o ângulo em radianos.

MyCosecant = 1 / Sin(MyAngle)	' Calcula a co-secante.


Exemplo da função Sqr

Este exemplo utiliza a função Sqr para calcular a raiz quadrada de um número.

Dim MySqr

MySqr = Sqr(4)	' Retorna 2.

MySqr = Sqr(23)	' Retorna 4.79583152331272.

MySqr = Sqr(0)	' Retorna 0.

MySqr = Sqr(-4)	' Gera um erro em tempo de execução.


Exemplo da função Tan

Este exemplo utiliza a função Tan para retornar a tangente de um ângulo.

Dim MyAngle, MyCotangent

MyAngle = 1,3	' Define o ângulo em radianos.

MyCotangent = 1 / Tan(MyAngle)	' Calcula a co-tangente.


Funções matemáticas

Função Abs

Função Atn

Função Cos

Função Exp

Função Fix

Função Int

Função Log

Função Rnd

Função Sgn

Função Sin

Função Sqr

Função Tan

Funções matemáticas derivadas


Função Abs

Retorna um valor do mesmo tipo que é passado para ele especificando o valor absoluto de um número.

Sintaxe

Abs(number)

O argumento obrigatório number pode ser qualquer expressão numérica válida. Se number contiver Null, Null será retornado; se for uma variável não inicializada, será retornado zero.

Comentários

O valor absoluto de um número é sua grandeza sem sinal. Por exemplo, tanto ABS(-1) como ABS(1) retornam 1.


Função Atn

Retorna um Double que especifica o arco tangente de um número.

Sintaxe

Atn(number)

O argumento obrigatório number é um Double ou qualquer expressão numérica válida.

Comentários

A função Atn toma a razão entre dois lados de um triângulo retângulo (number) e retorna o ângulo correspondente em radianos. A razão é o comprimento do lado oposto ao ângulo dividido pelo comprimento do lado adjacente a ele.

O intervalo do resultado é -pi/2 a pi/2 radianos.

Para converter graus em radianos, multiplique graus por pi/180. Para converter radianos em graus, multiplique radianos por 180/pi.

Observação   Atn é a função trigonométrica inversa de Tan, que toma um ângulo como seu argumento e retorna a razão entre dois lados de um triângulo retângulo. Não confunda Atn com a co-tangente, que é o inverso simples da tangente (1/tangente).


Função Cos

Retorna um Double que especifica o co-seno de um ângulo.

Sintaxe

Cos(number)

O argumento obrigatório number é um Double ou qualquer expressão numérica válida que expressa um ângulo em radianos.

Comentários

A função Cos toma um ângulo e retorna a razão entre dois lados de um triângulo retângulo. A razão é o comprimento do lado adjacente ao ângulo dividido pelo comprimento da hipotenusa.

O resultado situa-se no intervalo -1 a 1.

Para converter graus em radianos, multiplique graus por pi/180. Para converter radianos em graus, multiplique radianos por 180/pi.


Função Exp

Retorna um Double que especifica e (a base dos logaritmos naturais) elevado a uma potência.

Sintaxe

Exp(number)

O argumento obrigatório number é um Double ou qualquer expressão numérica válida.

Comentários

Se o valor de number exceder 709,782712893, ocorrerá um erro. A constante e vale aproximadamente 2,718282.

Observação   A função Exp complementa a ação da função Log e às vezes é chamada de antilogaritmo.


Funções Int e Fix

Retorna a parte inteira de um número.

Sintaxe

Int(number)

Fix(number)

O argumento obrigatório number é um Double ou qualquer expressão numérica válida. Se number contiver Null, será retornado Null.

Comentários

Tanto Int como Fix removem a parte fracionária de number e retornam o valor inteiro resultante.

A diferença entre Int e Fix é que, se number for negativo, Int retorna o primeiro inteiro negativo que seja menor ou igual a number, enquanto Fix retorna o primeiro inteiro negativo maior ou igual a number. Por exemplo, Int converte -8,4 para -9, e Fix converte -8,4 para -8.

Fix(number) é equivalente a:

Sgn(number) * Int(Abs(number))


Função Log

Retorna um Double que especifica o logaritmo natural de um número.

Sintaxe

Log(number)

O argumento obrigatório number é um Double ou qualquer expressão numérica válida maior que zero.

Comentários

O logaritmo natural é o logaritmo na base e. A constante e vale aproximadamente 2,718282.

Você pode calcular logaritmos na base n para qualquer número x dividindo o logaritmo natural de x pelo logaritmo natural de n, como a seguir:

Logn(x) = Log(x) / Log(n)

O exemplo a seguir ilustra uma Function personalizada que calcula logaritmos de base 10:

Static Function Log10(X)

Log10 = Log(X) / Log(10#)

End Function


Instrução Randomize

Inicializa o gerador de números aleatórios.

Sintaxe

Randomize [number]

O argumento opcional number é uma Variant ou qualquer expressão numérica válida.

Comentários

Randomize utiliza number para inicializar o gerador de números aleatórios da função Rnd, dando-lhe um novo valor de semente. Se você omitir number, o valor retornado pelo cronômetro do sistema será utilizado como o novo valor de semente.

Se Randomize não for utilizado, a função Rnd (sem argumentos) utilizará o mesmo número como uma semente a primeira vez é chamada, e daí em diante utilizará o último número gerado como valor semente.

Observação   Para repetir seqüências de números aleatórios, chame Rnd com um argumento negativo imediatamente antes de utilizar Randomize com um argumento numérico. Utilizar Randomize com o mesmo valor de number não repete a seqüência anterior.


Função Rnd

Retorna um Single que contém um número aleatório.

Sintaxe

Rnd[(number)]

O argumento opcional number é um Single ou qualquer expressão numérica válida.

Valores retornados

Se number for	Rnd gera
Menor que zero	O mesmo número todas as vezes, utilizando number como semente.
Maior que zero	O próximo número aleatório na seqüência.
Igual a zero	O número gerado mais recentemente.
Não fornecido	O próximo número aleatório na seqüência.
Comentários

A função Rnd retorna um valor menor que 1, mas maior ou igual a zero.

O valor de number determina como Rnd gera um número aleatório:

Para qualquer semente inicial dada, a mesma seqüência de números é gerada porque cada chamada sucessiva à função Rnd utiliza o número anterior como semente para o próximo número da seqüência.

Antes de chamar Rnd, utilize a instrução Randomize sem argumento para inicializar o gerador de números aleatórios com uma semente baseada no cronômetro do sistema.

Para produzir números inteiros aleatórios em um dado intervalo, utilize esta fórmula:

Int((limitesuperior - limiteinferior + 1) * Rnd + limiteinferior)

Aqui, limitesuperior é o número mais alto do intervalo e limiteinferior é o número mais baixo.

Observação   Para repetir seqüências de números aleatórios, chame Rnd com um argumento negativo imediatamente antes de utilizar Randomize com um argumento numérico. Utilizar Randomize com o mesmo valor de number não repete a seqüência anterior.


Função Sgn

Retorna um Variant (Integer) que indica o sinal de um número.

Sintaxe

Sgn(number)

O argumento obrigatório number pode ser qualquer expressão numérica válida.

Valores retornados

Se number for	Sgn retorna
Maior que zero	1
Igual a zero	0
Menor que zero	-1
Comentários

O sinal do argumento number determina o valor de retorno da função Sgn.


Função Sin

Retorna um Double que especifica o seno de um ângulo.

Sintaxe

Sin(number)

O argumento obrigatório number é um Double ou qualquer expressão numérica válida que expressa um ângulo em radianos.

Comentários

A função Sin toma um ângulo e retorna a razão entre dois lados de um triângulo retângulo. A razão é o comprimento do lado oposto ao ângulo dividido pelo comprimento da hipotenusa.

O resultado situa-se no intervalo -1 a 1.

Para converter graus em radianos, multiplique graus por pi/180. Para converter radianos em graus, multiplique radianos por 180/pi.


Função Sqr

Retorna um Double que especifica a raiz quadrada de um número.

Sintaxe

Sqr(number)

O argumento obrigatório number é um Double ou qualquer expressão numérica válida maior ou igual a zero.


Função Tan

Retorna um Double que especifica a tangente de um ângulo.

Sintaxe

Tan(number)

O argumento obrigatório number é um Double ou qualquer expressão numérica válida que expressa um ângulo em radianos.

Comentários

Tan toma um ângulo e retorna a razão entre dois lados de um triângulo retângulo. A razão é o comprimento do lado oposto ao ângulo dividido pelo comprimento do lado adjacente a ele.

Para converter graus em radianos, multiplique graus por pi/180. Para converter radianos em graus, multiplique radianos por 180/pi.


Funções matemáticas derivadas

A lista abaixo é uma lista de funções matemáticas não intrínsecas que podem ser derivadas a partir das funções matemáticas intrínsecas:

Função	Equivalentes derivadas
Secante	Sec(X) = 1 / Cos(X)
Co-secante	Cosec(X) = 1 / Sin(X)
Co-tangente	Cotan(X) = 1 / Tan(X)
Seno inverso	Arcsin(X) = Atn(X / Sqr(-X * X + 1))
Co-seno inverso	Arccos(X) = Atn(-X / Sqr(-X * X + 1)) + 2 * Atn(1)
Secante inversa	Arcsec(X) = Atn(X / Sqr(X * X – 1)) + Sgn((X) – 1) * (2 * Atn(1))
Co-secante inversa	Arccosec(X) = Atn(X / Sqr(X * X – 1)) + (Sgn(X) – 1) * (2 * Atn(1))
Co-tangente inversa	Arccotan(X) = Atn(X) + 2 * Atn(1)
Seno hiperbólico	Sinh(X) = (Exp(X) – Exp(-X)) / 2
Co-seno hiperbólico	Cosh(X) = (Exp(X) + Exp(-X)) / 2
Tangente hiperbólica	Tanh(X) = (Exp(X) – Exp(-X)) / (Exp(X) + Exp(-X))
Secante hiperbólica	Sech(X) = 2 / (Exp(X) + Exp(-X))
Co-secante hiperbólica	Cosech(X) = 2 / (Exp(X) – Exp(-X))
Co-tangente hiperbólica	Cotanh(X) = (Exp(X) + Exp(-X)) / (Exp(X) – Exp(-X))
Seno hiperbólico inverso	Arcsinh(X) = Log(X + Sqr(X * X + 1))
Co-seno hiperbólico inverso	Arccosh(X) = Log(X + Sqr(X * X – 1))
Tangente hiperbólica inversa	Arctanh(X) = Log((1 + X) / (1 – X)) / 2
Secante hiperbólica inversa	Arcsech(X) = Log((Sqr(-X * X + 1) + 1) / X)
Co-secante hiperbólica inversa	Arccosech(X) = Log((Sgn(X) * Sqr(X * X + 1) + 1) / X)
Co-tangente hiperbólica inversa	Arccotanh(X) = Log((X + 1) / (X – 1)) / 2
Logaritmo de base N	Logn(X) = Log(X) / Log(N)


Exemplo do método Add

Este exemplo utiliza o método Add para adicionar objetos Inst (ocorrências de uma classe denominada Class1 que contém uma variável Public NomeDaOcorrência) a um conjunto denominado MinhasClasses. Para ver como isto funciona, insira um módulo de classe e declare uma variável pública denominada NomeDaOcorrência em nível de módulo da Class1 (digite Public NomeDaOcorrência) para conter os nomes de cada ocorrência. Deixe o nome padrão como Class1. Copie e cole o código a seguir no procedimento de evento Form_Load de um módulo de formulário.

Dim MyClasses As New Collection	' Cria um objeto Collection.

Dim Num As Integer	' Contador para individualizar chaves.

Dim Msg

Dim TheName	' Contém os nomes que o usuário insere.

Do

Dim Inst As New Class1	' Cria uma nova ocorrência da Class1.

Num = Num + 1	' Incrementa Num e, em seguida, obtém um nome.

Msg = "Insira um nome para este objeto". & Chr(13) _

 & "Pressione Cancelar para ver os nomes no conjunto".

TheName = InputBox(Msg, "Nomeie o conjunto de Items")

Inst.InstanceName = TheName	' Coloca o nome na ocorrência de

' objeto.

' Se o usuário inseriu o nome, adiciona-o ao conjunto.

If Inst.InstanceName <> "" Then

' Adiciona o objeto nomeado ao conjunto.

MyClasses.Add item := Inst, key := CStr(Num)

End If

' Limpa a referência atual em preparação para a seguinte.

Set Inst = Nothing

Loop Until ONome = ""

For Each x In MyClasses

MsgBox x.InstanceName, , "Nome da ocorrência"

Next


Exemplo do método Clear

Este exemplo utiliza o método Clear do objeto Err para redefinir as propriedades numéricas do objeto Err como zero e as suas propriedades de seqüência de caracteres como seqüências de caracteres de comprimento zero. Se Clear fosse omitido do código a seguir, a caixa de diálogo de mensagem de erro seria exibida a cada iteração do loop (depois que ocorresse um erro), independentemente de um cálculo sucessivo gerar ou não um erro. Você pode executar o código passo a passo para ver o resultado.

Dim Result(10) As Integer	' Declara a matriz cujos elementos

' serão facilmente sobrecarregados.

Dim ind

On Error Resume Next	' Adie a interceptação de erro.

Do Until ind = 10

' Gera um erro ocasional ou armazena o resultado se não houver erro.

Result(ind) = Rnd * ind * 20.000

If Err.Number <> 0 Then

MsgBox Err, , "Erro gerado: ", Err.HelpFile, Err.HelpContext

Err.Clear	' Limpa as propriedades do objeto Err.

End If

ind = ind + 1

Loop


Exemplo do método Item

Este exemplo utiliza o método Item para recuperar uma referência a um objeto em um conjunto. Supondo que Birthdays é um objeto Collection, o código a seguir recupera referências aos objetos do conjunto que representam a data do aniversário de Carlos Silva e do aniversário de Antonio Silva, utilizando as chaves "SilvaCarlos" e "SilvaAntonio" como argumentos de index. Observe que a primeira chamada especifica explicitamente o método Item, mas a segunda não. Ambas as chamadas funcionam porque o método Item é o padrão de um objeto Collection. As referências, atribuídas a SmithBillBD e SmithAdamBD utilizando Set, podem ser utilizadas para acessar as propriedades e métodos dos objetos especificados. Para executar este código, crie o conjunto e preencha-o com pelo menos os dois membros referenciados.

Dim SmithBillBD As Object

Dim SmithAdamBD As Object

Dim Birthdays

Set SmithBillBD = Birthdays.Item("SilvaCarlos")

Set SmithAdamBD = Birthdays("SilvaAntonio")


Exemplo do método Print

Utilizando o método Print, este exemplo exibe o valor da variável MinhaVar na janela Imediata. Observe que o método Print se aplica somente a objetos que podem exibir texto.

Dim MyVar

MyVar = "Venha me ver no painel Imediato."

Debug.Print MyVar


Exemplo do método Raise

Este exemplo utiliza o método Raise do objeto Err para gerar um erro com um objeto de automação escrito em Visual Basic. Ele tem o código programático MeuProj.MeuObjeto.  No Macintosh, o nome da unidade de disco padrão é "HD" e as partes do caminho são separadas por dois-pontos em vez de barras invertidas.

Const MyContextID = 1010407	' Define uma constante para o código

' do contexto.

Function TestName(CurrentName, NewName)

If Instr(NewName, "bob") Then	' Testa a validade de NovoNome.

' Provoca a exceção.

Err.Raise vbObjectError + 513, "MyProj.MyObject", _

"Nenhum ""bob"" permitido no seu nome", "c:\MyProj\MyHelp.Hlp", _

MyContextID

End If

End Function


Exemplo do método Remove

Este exemplo ilustra o uso do método Remove para remover objetos de um objeto Collection, MinhasClasses. Este código remove o objeto cujo índice é 1 em cada iteração do loop.

Dim Num, MyClasses

For Num = 1 To MyClasses.Count

MyClasses.Remove 1	' Remove o primeiro objeto cada vez

' através do loop até que não haja mais

' objetos no conjunto.

Next Num


Método Add (Visual Basic for Applications)
Método Add

Adiciona um membro a um objeto Collection.

Sintaxe

object.Add item, key, before, after

A sintaxe do método Add tem o qualificador de objeto e os argumentos nomeados a seguir:

Parte	Descrição
object	Obrigatória. Uma expressão de objeto que resulta em um objeto na lista Aplica-se a.
item	Obrigatória. Uma expressão de qualquer tipo que especifica o membro a ser adicionado ao conjunto.
key	Opcional. Uma expressão de seqüência de caracteres exclusiva que especifica uma seqüência de caracteres chave que pode ser utilizada, em vez de um índice posicional, para acessar um membro do conjunto.
before	Opcional. Uma expressão que especifica uma posição relativa no conjunto. O membro a ser adicionado é colocado no conjunto antes do membro identificado pelo before argumento. Se for uma expressão numérica, before deverá ser um número de 1 ao valor da propriedade Count do conjunto. Se for uma expressão de seqüência de caracteres, before deve corresponder à key especificada quando o membro sendo referido foi adicionado ao conjunto. Você pode especificar uma posição before ou uma posição after, mas não ambas.
after	Opcional. Uma expressão que especifica uma posição relativa no conjunto. O membro a ser adicionado é colocado no conjunto depois do membro identificado pelo argumento after. Se for numérico, after deve ser um número no intervalo de 1 ao valor da propriedade Count do conjunto. Se for uma seqüência de caracteres, after deve corresponder à key especificada quando o membro referido foi adicionado ao conjunto. Você pode especificar uma posição before ou uma posição after, mas não ambas.
Comentários

Se o argumento before ou after for uma expressão de seqüência de caracteres ou uma expressão numérica, ele deve fazer referência a um membro existente do conjunto, pois caso contrário ocorrerá um erro.

Também ocorrerá um erro se uma key especificada duplicar a key de um membro existente do conjunto.


Método Clear

Limpa todas as definições de propriedade do objeto Err.

Sintaxe

object.Clear

O object é sempre o objeto Err.

Comentários

Utilize Clear para limpar explicitamente o objeto Err após um erro ter sido tratado, por exemplo, quando você utiliza o tratamento de erro adiado com On Error Resume Next. O método Clear será chamado automaticamente sempre que qualquer uma das instruções a seguir for executada:

•	Qualquer tipo de instrução Resume

•	Exit Sub, Exit Function, Exit Property

•	Qualquer instrução On Error

Observação   A construção On Error Resume Next pode ser preferível a On Error GoTo ao tratar erros gerados durante o acesso a outros objetos. Verificar Err após cada interação com um objeto remove a ambigüidade sobre qual objeto foi acessado pelo código. Você pode ter certeza de qual objeto colocou o código de erro em Err.Number, assim como qual objeto gerou originalmente o erro (o objeto especificado em Err.Source).


Método Item

Retorna um membro específico de um objeto Collection, seja por posição ou por chave.

Sintaxe

object.Item(index)

A sintaxe do método Item tem o qualificador e parte do objeto a seguir:

Parte	Descrição
object	Obrigatória. Uma expressão de objeto que resulta em um objeto na lista Aplica-se a.
index	Obrigatória. Uma expressão que especifica a posição de um membro do conjunto. Se for uma expressão numérica, index deverá ser um número de 1 ao valor da propriedade Count do conjunto. Se for uma expressão de seqüência de caracteres, index deverá corresponder ao argumento key especificado quando o membro referido tiver sido adicionado ao conjunto.
Comentários

Se o valor fornecido como index não corresponder a nenhum membro existente do conjunto, ocorrerá um erro.

O método Item é o método padrão de um conjunto. Por essa razão, as linhas de código a seguir são equivalentes:

Print MyCollection(1)

Print MyCollection.Item(1)


Método Print

Imprime texto na janela Imediata.

Sintaxe

object.Print [outputlist]

A sintaxe do método Print tem o seguinte qualificador e parte do objeto:

Parte	Descrição
object	Opcional. Uma expressão de objeto que resulta em um objeto na lista Aplica-se a.
outputlist	Opcional. Expressão ou lista de expressões a ser impressa. Se for omitida, será impressa uma linha em branco.
O argumento outputlist tem as seguintes sintaxe e partes:

{Spc(n) | Tab(n)} expression charpos

Parte	Descrição
Spc(n)	Opcional. Usado para inserir caracteres espaço na saída, onde n é o número de caracteres espaço a ser inserido.
Tab(n)	Opcional. Utilizado para posicionar o ponto de inserção em um número de coluna absoluto onde n é o número de coluna. Use Tab sem argumentos para posicionar o ponto de inserção no início da próxima zona de impressão.
expression	Opcional. Expressões numéricas ou expressões de seqüência de caracteres a serem impressas.
charpos	Opcional. Especifica o ponto de inserção para o próximo caractere. Use ponto-e-vírgula (;) para posicionar o ponto de inserção imediatamente após o último caractere exibido. Use Tab(n) para posicionar o ponto de inserção em um número de coluna absoluto. Use Tab sem argumento para posicionar o ponto de inserção no início da próxima zona de impressão. Se charpos for omitido, o próximo caractere será impresso na próxima linha.
Comentários

Várias expressões podem ser separadas com um espaço ou um ponto-e-vírgula.

Todos os dados impressos na janela Imediata são formatados de forma apropriada usando o separador decimal para as configurações de local especificadas para seu sistema. As palavras-chave são colocadas no idioma apropriado do aplicativo host.

Para dados Boolean, é impresso True ou False. As palavras-chave True e False são convertidas de acordo com a definição de localidade para o aplicativo host.

Os dados Date são gravados usando o formato de data padrão reconhecido pelo seu sistema. Quando faltam os componentes de data ou hora ou eles equivalem a zero, somente os dados fornecidos são gravados.

Nada é gravado se os dados de outputlist estiverem Empty. No entanto, se os dados de outputlist forem Null, Null será a saída. A palavra-chave Null é convertida apropriadamente na saída.

Para os dados com erro, a saída é gravada como Error códigoerro. A palavra-chave Error é convertida apropriadamente na saída.

O object será obrigatório se o método for utilizado fora de um módulo que contém um espaço de exibição padrão. Por exemplo, ocorrerá um erro se o método for chamado em um módulo padrão sem especificar um object, mas, se for chamado em um módulo de formulário, outputlist será exibida no formulário.

Observação   Como o método Print tipicamente imprime com caracteres com espaço proporcional, não há correlação entre o número de caracteres impressos e o número de colunas de largura fixa que esses caracteres ocupam. Por exemplo, uma letra larga, como o "W", ocupa mais do que uma coluna de largura fixa, e uma letra estreita, como o "i", ocupa menos. Para permitir os casos em que os caracteres maiores do que a média sejam usados, suas colunas tabulares devem ser posicionadas longe o suficiente umas das outras. De forma alternativa, você pode imprimir usando uma fonte de espaçamento fixo (como Courier) para garantir que cada caractere ocupe somente uma coluna.


Método Raise

Gera um erro de tempo de execução.

Sintaxe

object.Raise number, source, description, helpfile, helpcontext

O método Raise tem o qualificador de objeto e os argumentos nomeados a seguir:

Argumento	Descrição
object	Obrigatória. É sempre o objeto Err.
number	Obrigatória. Número inteiro Long que identifica a natureza do erro. Os erros do Visual Basic (tanto erros definidos pelo Visual Basic como definidos pelo usuário) estão no intervalo de 0 a 65.535. O intervalo de 0 a 512 está reservado para erros de sistema; o intervalo de 513 a 65.535 está disponível para erros definidos pelo usuário. Ao definir a propriedade Number para seu próprio código de erro em um módulo de classe, você adiciona seu número de código de erro à constante vbObjectError. Por exemplo, para gerar o número de erro 513, atribua vbObjectError + 513 à propriedade Number.
source	Opcional. Expressão de seqüência de caracteres que dá nome ao objeto ou aplicativo que gerou o erro. Ao definir essa propriedade para um objeto, use a forma project.class. Se source não for especificada, é utilizada a identificação programática do projeto atual do Visual Basic.
description	Opcional. A expressão de seqüência de caracteres que descreve o erro. Se não for especificada, o valor em Number será examinado. Se ele puder ser mapeado para um código de erro de tempo de execução do Visual Basic, a seqüência de caracteres que iria ser retornada pela função Error será utilizada como Description. Se não houver erro no Visual Basic que corresponda a Number, será usada a mensagem "Erro de definição de aplicativo ou de definição de objeto".
helpfile	Opcional. O caminho completamente qualificado para o arquivo Help no qual a ajuda nesse erro pode ser encontrada. Se não for especificado, o Visual Basic utilizará a unidade, o caminho e o nome do arquivo completo do arquivo da Ajuda do Visual Basic.
helpcontext	Opcional. A identificação de contexto que identifica um tópico dentro do helpfile que fornece ajuda para o erro. Se for omitido, será usada a identificação de contexto do arquivo de Ajuda do Visual Basic referente ao erro correspondente à propriedade Number, caso ele exista.
Comentários

Todos os argumentos são opcionais com exceção de number. Se você usar Raise sem especificar alguns argumentos, e as definições de propriedade do objeto Err contiverem valores que tenham sido removidos, esses valores servirão como os valores para o seu erro.

Raise é utilizado para gerar erros de tempo de execução e pode ser usado no lugar da instrução Error. Raise é útil para gerar erros ao gravar módulos de classe, pois o objeto Err fornece informações mais completas do que seria possível se você gerasse erros com a instrução Error. Por exemplo, com o método Raise, a fonte que gerou o erro pode ser especificada na propriedade Source, a Ajuda on-line para o erro pode ser referenciada, e assim por diante.


Método Remove (Visual Basic for Applications)
Método Remove

Remove um membro de um objeto Collection.

Sintaxe

object.Remove index

A sintaxe do método Remove tem o qualificador e parte do objeto a seguir:

Parte	Descrição
object	Obrigatória. Uma expressão de objeto que resulta em um objeto na lista Aplica-se a.
index	Obrigatória. Uma expressão que especifica a posição de um membro do conjunto. Se for uma expressão numérica, index deverá ser um número de 1 ao valor da propriedade Count do conjunto. Se for uma expressão de seqüência de caracteres, index deverá corresponder ao argumento key especificado quando o membro referido tiver sido adicionado ao conjunto.
Comentários

Se o valor fornecido como índice não corresponder a um membro existente do conjunto, ocorrerá um erro.


Exemplo da instrução AppActivate

Este exemplo ilustra vários usos da instrução AppActivate para ativar uma janela de aplicativo. As instruções Shell pressupõem que os aplicativos estão nos caminhos especificados.  No Macintosh, o nome da unidade de disco padrão é "HD" e as partes do caminho são separadas por dois-pontos em vez de barras invertidas.

Dim MyAppID, ReturnValue

AppActivate "Microsoft Word"	' Ativa o Microsoft

' Word.

' AppActivate também pode utilizar o valor de retorno da função Shell.

MyAppID = Shell("C:\WORD\WINWORD.EXE", 1)	' Executa o Microsoft Word.

AppActivate MyAppID	' Ativa o Microsoft

' Word.

' Você pode também utilizar o valor de retorno da função Shell.

ReturnValue = Shell("c:\EXCEL\EXCEL.EXE",1)	' Executa o Microsoft Excel.

AppActivate ReturnValue	' Ativa o Microsoft

' Excel.


Exemplo da instrução Beep

Este exemplo utiliza a instrução Beep para emitir três avisos sonoros consecutivos pelo alto-falante do computador.

Dim I

For I = 1 To 3	' Fazer o loop 3 vezes.

Beep	' Emite um aviso sonoro.

Next I


Exemplo da função Command

Este exemplo utiliza a função Command para obter os argumentos da linha de comando em uma função que os retorna em uma Variant que contém uma matriz. Não está disponível em Microsoft Office.

Function GetCommandLine(Optional ArgsMax)

' Declara as variáveis.

Dim C, CmdLine, CmdLnLen, InArg, I, NumArgs

'Vê se ArgsMax foi fornecido.

If IsMissing(ArgsMax) Then ArgsMax = 10

'Deixa a matriz com o tamanho correto.

ReDim ArgArray(ArgsMax)

NumArgs = 0: InArg = False

'Obtém argumentos da linha de comando.

CmdLine = Command()

CmdLnLen = Len(LinhaDeComando)

'Percorre a linha de comando um caractere

'de cada vez.

For I = 1 To CmdLnLen

C = Mid(CmdLine, I, 1)

'Testa quanto a espaço ou tabulação.

If (C <> " " And C <> vbTab) Then

'Nem espaço nem tabulação.

'Testa se já existe no argumento.

If Not InArg Then

'O novo argumento é iniciado.

'Testa quanto ao número excessivo de argumentos.

If NumArgs = ArgsMax Then Exit For

NumArgs = NumArgs + 1

InArg = True

End If

'Concatena caractere ao argumento atual.

ArgArray(NumArgs) = ArgArray(NumArgs) & C

Else

'Encontrado um espaço ou tabulação.

'Define o sinalizador InArg como False.

InArg = False

End If

Next I

'Redimensiona a matriz o suficiente para conter argumentos.

ReDim Preserve ArgArray(ArgsNum)

'Retorna Matriz no nome da Função.

GetCommandLine = ArgArray()

End Function


Exemplo da função InputBox

Este exemplo mostra várias maneiras de utilizar a função InputBox para solicitar ao usuário que digite um valor. Se as posições x e y forem omitidas, a caixa de diálogo será automaticamente centralizada em relação aos respectivos eixos. A variável MeuValor contém o valor digitado pelo usuário se ele clicar em OK ou pressionar a tecla ENTER. Se o usuário clicar em Cancel, será retornada uma seqüência de comprimento zero.

Dim Message, Title, Default, MyValue

Message = "Digite um valor entre 1 e 3"	' Define o aviso.

Title = "Demonstração da CaixaDeEntrada"	' Define o título.

Default = "1"	' Define o padrão.

' Exibe a mensagem, o título e o valor padrão.

MyValue = InputBox(Message, Title, Padrão)

' Utiliza o arquivo de Ajuda e o contexto. O botão Ajuda é adicionado

' atomaticamente.

MyValue = InputBox(Message, Title, , , , "DEMO.HLP", 10)

' Exibe a caixa de diálogo na posição 100, 100.

MyValue = InputBox(Message, Title, Padrão, 100, 100)


Exemplo da função MsgBox

Este exemplo utiliza a função MsgBox para exibir uma mensagem de erro crítico em uma caixa de diálogo com os botões Sim e Não. O botão Não é especificado como a resposta padrão. O valor retornado pela função MsgBox depende do botão escolhido pelo usuário. Este exemplo supõe que DEMO.HLP é um arquivo de Ajuda que contém um tópico com um número de contexto da Ajuda igual a 1000.

Dim Msg, Style, Title, Help, Ctxt, Response, MyString

Msg = "Deseja continuar?"	' Define a mensagem.

Style = vbYesNo + vbCritical + vbDefaultButton2	' Define os botões.

Title = "Demonstração de MsgBox"	' Define o título.

Help = "DEMO.HLP"	' Define o arquivo de Ajuda.

Ctxt = 1.000	' Define o contexto do

' tópico.

' Exibe a mensagem.

Response = MsgBox(Msg, Style, Title, Help, Ctxt)

If Response = vbYes Then	' O usuário escolheu Sim.

MyString = "Sim"	' Executa alguma ação.

Else	' O usuário escolheu Não.

MyString = "Não"	' Executa alguma ação.

End If


Exemplo da instrução SendKeys

Este exemplo utiliza a função Shell para executar o aplicativo Calculadora incluído no Microsoft Windows. Ele utiliza a instrução SendKeys para enviar pressionamentos de teclas para adicionar alguns números e, em seguida, encerra a Calculadora. (Para ver o exemplo, cole-o em um procedimento e, em seguida, execute o procedimento. Como AppActivate altera o foco para o aplicativo Calculadora, não é possível simplesmente percorrer o código.) No Macintosh, utilize um aplicativo do Macintosh que aceita entrada pelo teclado em vez da Calculadora do Windows.

Dim ReturnValue, I

ReturnValue = Shell("CALC.EXE", 1)	' Execute Calculadora.

AppActivate ReturnValue 	' Ativa a Calculadora.

For I = 1 To 100	' Define o loop de contagem.

SendKeys I & "{+}", True	' Envia pressionamentos de teclas para

' Calculadora

Next I	' para adicionar cada valor de I.

SendKeys "=", True	' Obtém o total geral.

SendKeys "%{F4}", True	' Envia ALT+F4 para fechar a Calculadora.


Instrução AppActivate

Ativa uma janela do aplicativo.

Sintaxe

AppActivate title[, wait]

A sintaxe da instrução AppActivate tem os seguintes argumentos nomeados:

Parte	Descrição
Title	Obrigatória. Expressão de seqüência de caracteres que especifica o título na barra de título da janela do aplicativo que você deseja ativar. O código de tarefa retornado pela função Shell pode ser utilizado em vez de title para ativar um aplicativo.
Wait	Opcional. Valor Boolean que especifica se o aplicativo de chamada possui o foco antes de ativar outro. Se for False (padrão), o aplicativo especificado é ativado imediatamente, mesmo se o aplicativo de chamada não possuir o foco. Se for True, o aplicativo de chamada aguarda até possuir o foco e depois ativa o aplicativo especificado.
Comentários

A instrução AppActivate altera o foco para o aplicativo ou a janela especificados, mas sem afetar seu estado maximizado ou minimizado. O foco se move da janela de aplicativo ativada quando o usuário realiza alguma ação para mudar o foco ou fechar a janela. Utilize a função Shell para iniciar um aplicativo e definir o estilo de janela.

Na determinação de qual aplicativo deve ser ativado, title é comparado à seqüência de caracteres de título de cada aplicativo que está em execução. Se não houver correspondência exata, todo aplicativo cuja seqüência de caracteres de título comece com title será ativado. Se houver mais de uma ocorrência do aplicativo especificado por title, uma ocorrência será arbitrariamente ativada.


Instrução Beep

Emite um tom pelo alto-falante do computador.

Sintaxe

Beep

Comentários

A freqüência e a duração do alarme sonoro dependem do hardware e do software do sistema e variam de um computador para outro.


Função Command

Retorna a parte argumento da linha de comando utilizada para iniciar o Microsoft Visual Basic ou um programa executável desenvolvido com o Visual Basic. A função Command do Visual Basic não está disponível em aplicativos do Microsoft Office.

Sintaxe

Command

Comentários

Quando o Visual Basic é iniciado a partir da linha de comando, qualquer parte da linha de comando que segue /cmd é passada para o programa como o argumento de linha de comando. No exemplo a seguir, cmdlineargs representa as informações de argumento retornadas pela função Command.

VB /Cmd cmdlineargs

Para aplicativos desenvolvidos com o Visual Basic e compilados para um arquivo .exe, Command retorna qualquer argumento que apareça depois do nome do aplicativo na linha de comando. Por exemplo:

MyApp cmdlineargs

Para descobrir de que forma os argumentos de linha de comando podem ser alterados na interface do usuário do aplicativo que você está utilizando, pesquise por "argumentos de linha de comando" na Ajuda.


Função InputBox

Exibe um aviso em uma caixa de diálogo, aguarda até que o usuário insira texto ou clique em um botão e retorna uma String com o conteúdo da caixa de texto.

Sintaxe

InputBox(prompt[, title] [, default] [, xpos] [, ypos] [, helpfile, context])

A sintaxe da função InputBox tem os seguintes argumentos nomeados:

Parte	Descrição
Prompt	Obrigatória. Expressão de seqüência de caracteres exibida como mensagem na caixa de diálogo. O comprimento máximo de prompt é de aproximadamente 1.024 caracteres, dependendo da largura dos caracteres utilizados. Se prompt consistir em mais de uma linha, você poderá separar as linhas utilizando um caractere de retorno de carro (Chr(13)), um caractere de alimentação de linha (Chr(10)) ou uma combinação de caracteres de retorno de carro e alimentação de linha (Chr(13) & Chr(10)) entre cada linha.
Title	Opcional. Expressão de seqüência de caracteres exibida na barra de título da caixa de diálogo. Se você omitir title, o nome do aplicativo será inserido na barra de título.
Default	Opcional. Expressão de seqüência de caracteres exibida na caixa de texto como resposta padrão se nenhuma entrada for fornecida. Se você omitir default, a caixa de texto será exibida vazia.
Xpos	Opcional. Expressão numérica que especifica, em twips, a distância horizontal da borda esquerda da caixa de diálogo em relação à borda esquerda da tela. Se xpos for omitido, a caixa de diálogo será centralizada horizontalmente.
Ypos	Opcional. Expressão numérica que especifica, em twips, a distância vertical da borda superior da caixa de diálogo em relação ao alto da tela. Se ypos for omitido, a caixa de diálogo será posicionada verticalmente na terça parte inferior da tela.
Helpfile	Opcional. Expressão de seqüência de caracteres que identifica o arquivo de Ajuda a ser utilizado para fornecer ajuda sensível ao contexto relativa à caixa de diálogo. Se helpfile for fornecido, context também deverá ser fornecido.
Context	Opcional. Expressão numérica que é o número de contexto da Ajuda atribuído ao tópico da Ajuda apropriado por seu autor. Se context for fornecido, helpfile também deverá ser fornecido.
Comentários

Quando helpfile e context são fornecidos, o usuário pode pressionar F1 (Windows) ou AJUDA (Macintosh) para visualizar o tópico de Ajuda que corresponde ao context. Alguns aplicativos host, por exemplo, o Microsoft Excel, também adicionam automaticamente um botão Ajuda à caixa de diálogo. Se o usuário clicar em OK ou pressionar , a função InputBox retornará o que estiver na caixa de texto. Se o usuário clicar em Cancelar, a função retornará uma seqüência de caracteres de comprimento zero ("").

Observação   Para especificar mais que o primeiro argumento nomeado, você deve utilizar InputBox em uma expressão. Para omitir alguns argumentos posicionais, você deve incluir o delimitador de vírgula correspondente.


Função MsgBox

Exibe uma mensagem em uma caixa de diálogo, aguarda que o usuário clique em um botão e retorna um Integer que indica qual botão o usuário clicou.

Sintaxe

MsgBox(prompt[, buttons] [, title] [, helpfile, context])

A sintaxe da função MsgBox tem os seguintes argumentos nomeados:

Parte	Descrição
prompt	Obrigatória. Expressão de seqüência de caracteres exibida como mensagem na caixa de diálogo. O comprimento máximo de prompt é de aproximadamente 1.024 caracteres, dependendo da largura dos caracteres utilizados. Se prompt consistir em mais de uma linha, você poderá separar as linhas utilizando um caractere de retorno de carro (Chr(13)), um caractere de alimentação de linha (Chr(10)) ou uma combinação de caracteres de retorno de carro e alimentação de linha (Chr(13) & Chr(10)) entre cada linha.
buttons	Opcional. Expressão numérica que é a soma de valores que especifica o número e o tipo de botões a exibir, o estilo de ícone a utilizar, a identidade do botão padrão e a modalidade da caixa de mensagem. Se omitido, o valor padrão para buttons é 0.
title	Opcional. Expressão de seqüência de caracteres exibida na barra de título da caixa de diálogo. Se você omitir title, o nome do aplicativo será inserido na barra de título.
helpfile	Opcional. Expressão de seqüência de caracteres que identifica o arquivo de Ajuda a ser utilizado para fornecer ajuda sensível ao contexto relativa à caixa de diálogo. Se helpfile for fornecido, context também deverá ser fornecido.
context	Opcional. Expressão numérica que é o número de contexto da Ajuda atribuído ao tópico da Ajuda apropriado por seu autor. Se context for fornecido, helpfile também deverá ser fornecido.
Definições

As definições do argumento buttons são as seguintes:

Constante	Valor	Descrição
VbOKOnly	0	Exibe somente o botão OK.
VbOKCancel	1	Exibe os botões OK e Cancelar.
VbAbortRetryIgnore	2	Exibe os botões Abortar, Repetir e Ignorar.
VbYesNoCancel	3	Exibe os botões Sim, Não e Cancelar.
VbYesNo	4	Exibe os botões Sim e Não.
VbRetryCancel	5	Exibe os botões Repetir e Cancelar.
vbCritical	16	Exibe o ícone Mensagem crítica.
vbQuestion	32	Exibe o ícone Consulta de aviso.
vbExclamation	48	Exibe o ícone Mensagem de aviso.
vbInformation	64	Exibe o ícone Mensagem de informação.
vbDefaultButton1	0	O primeiro botão é o padrão.
vbDefaultButton2	256	O segundo botão é o padrão.
vbDefaultButton3	512	O terceiro botão é o padrão.
vbDefaultButton4	768	O quarto botão é o padrão.
vbApplicationModal	0	Janela restrita do aplicativo; o usuário deve responder à caixa de mensagem antes de continuar o trabalho no aplicativo atual.
vbSystemModal	4096	Janela restrita de sistema; todos os aplicativos são suspensos até que o usuário responda à caixa de mensagem.
vbMsgBoxHelpButton	16384	Adiciona o botão ‘Ajuda’ à caixa de mensagens
VbMsgBoxSetForeground	65536	Especifica a janela da caixa de mensagens como a janela de primeiro plano
vbMsgBoxRight	524288	O texto é alinhado à direita
vbMsgBoxRtlReading	1048576	Especifica que o texto deve aparecer como leitura da direita para a esquerda em sistemas hebraico e árabe
O primeiro grupo de valores (0 a 5) descreve o número e o tipo de botões exibidos na caixa de diálogo; o segundo grupo (16, 32, 48, 64) descreve o estilo de ícone; o terceiro grupo (0, 256, 512) determina qual botão é o padrão e o quarto grupo (0, 4.096) determina a modalidade da caixa de mensagem. Quando estiver somando números para criar um valor final para o argumento buttons, utilize somente um número de cada grupo.

Observação   Essas constantes são especificadas pelo Visual Basic for Applications. Como resultado, os nomes podem ser utilizados em qualquer lugar do seu código em vez dos valores reais.

Valores retornados

Constante	Valor	Descrição
vbOK	1	OK
vbCancel	2	Cancelar
vbAbort	3	Abortar
vbRetry	4	Repetir
vbIgnore	5	Ignorar
vbYes	6	Sim
vbNo	7	Não
Comentários

Quando helpfile e context são fornecidos, o usuário pode pressionar F1 (Windows) ou AJUDA (Macintosh) para visualizar o tópico de Ajuda que corresponde ao context. Alguns aplicativos host, por exemplo, o Microsoft Excel, também adicionam automaticamente um botão Ajuda à caixa de diálogo.

Se a caixa de diálogo exibir um botão Cancelar, pressionar a tecla ESC terá o mesmo efeito que clicar em Cancelar. Se a caixa de diálogo contiver um botão Ajuda, será fornecida a ajuda sensível ao contexto relativa à caixa de diálogo. Entretanto, nenhum valor será retornado até que um dos outros botões seja clicado.

Observação   Para especificar mais do que o primeiro argumento nomeado, você deve utilizar MsgBox em uma expressão. Para omitir alguns argumentos posicionais, você deve incluir o delimitador de vírgula correspondente.


Instrução SendKeys

Envia um ou mais pressionamentos de teclas para a janela ativa como se tivessem sido digitados no teclado.

Sintaxe

SendKeys string[, wait]

A sintaxe da instrução SendKeys tem os seguintes argumentos nomeados:

Parte	Descrição
string	Obrigatória. Expressão de seqüência de caracteres que especifica os pressionamentos de teclas a serem enviados.
wait	Opcional. Valor Boolean que especifica o modo de espera. Se for False (padrão), o controle será retornado ao procedimento imediatamente após as teclas serem enviadas. Se for True, os pressionamentos de teclas devem ser processados antes que o controle seja retornado ao procedimento.
Comentários

Cada tecla é representada por um ou mais caracteres. Para especificar um único caractere de teclado, utilize o próprio caractere. Por exemplo, para representar a letra A, utilize "A" para string. Para representar mais de um caractere, anexe cada caractere adicional ao que o antecede. Para representar as letras A, B e C, utilize "ABC" para string.

O sinal de adição (+), circunflexo (^), sinal de porcentagem (%), til (~) e parênteses ( ) possuem significados especiais para SendKeys. Para especificar um desses caracteres, coloque-os entre chaves ({}). Por exemplo, para especificar o sinal de adição, utilize {+}. Os colchetes ([ ]) não têm significado especial para SendKeys, mas você deve colocá-los entre chaves. Em outros aplicativos, os colchetes têm um significado especial que pode ser importante quando ocorrer intercâmbio dinâmico de dados (DDE, Dynamic Data Exchange). Para especificar caracteres de chaves, utilize {{} e {}}.

Para especificar caracteres que não são exibidos quando você pressiona uma tecla, como ENTER ou TAB, e teclas que representam ações em vez de caracteres, utilize os códigos a seguir.

Tecla	Código
BACKSPACE	{BACKSPACE}, {BS} ou {BKSP}
BREAK	{BREAK}
CAPS LOCK	{CAPSLOCK}
DEL ou DELETE	{DELETE} ou {DEL}
SETA PARA BAIXO	{DOWN}
END	{END}
ENTER	{ENTER}ou ~
ESC	{ESC}
HELP	{HELP}
HOME	{HOME}
INS ou INSERT	{INSERT} ou {INS}
SETA À ESQUERDA	{LEFT}
NUM LOCK	{NUMLOCK}
PAGE DOWN	{PGDN}
PAGE UP	{PGUP}
PRINT SCREEN	{PRTSC}
SETA À DIREITA	{RIGHT}
SCROLL LOCK	{SCROLLLOCK}
TAB	{TAB}
SETA ACIMA	{UP}
F1	{F1}
F2	{F2}
F3	{F3}
F4	{F4}
F5	{F5}
F6	{F6}
F7	{F7}
F8	{F8}
F9	{F9}
F10	{F10}
F11	{F11}
F12	{F12}
F13	{F13}
F14	{F14}
F15	{F15}
F16	{F16}
Para especificar teclas combinadas com qualquer combinação das teclas SHIFT, CTRL e ALT, preceda o código de teclas de um ou mais dos códigos a seguir:

Tecla	Código
SHIFT	+
CTRL	^
ALT	%
Para especificar que qualquer combinação de SHIFT, CTRL e ALT deve ser mantida pressionada enquanto várias outras teclas são pressionadas, coloque o código dessas teclas entre parênteses. Por exemplo, para especificar manter pressionada SHIFT enquanto E e C são pressionadas, utilize "+(EC)". Para especificar manter pressionada SHIFT enquanto E é pressionada, seguida de C sem SHIFT, utilize "+EC".

Para especificar a repetição de teclas, utilize a forma {tecla número}. Você deve colocar um espaço entre tecla e número. Por exemplo, {ESQUERDA 42} significa pressionar a tecla SETA À ESQUERDA 42 vezes; {h 10} significa pressionar H 10 vezes.

Observação   Você não pode utilizar SendKeys para enviar pressionamentos de teclas para um aplicativo que não tenha sido projetado para ser executado no Microsoft Windows ou no Macintosh. Sendkeys também não pode enviar a tecla PRINT SCREEN {PRTSC} a nenhum aplicativo.


Conjunto de caracteres (0 a 127)

0	•	32	[espaço]	64	@	96	`
1	•	33	!	65	A	97	a
2	•	34	"	66	B	98	b
3	•	35	#	67	C	99	c
4	•	36	$	68	D	100	d
5	•	37	%	69	E	101	e
6	•	38	&	70	F	102	f
7	•	39	'	71	G	103	g
8	* *	40	(	72	H	104	h
9	* *	41	)	73	I	105	i
10	* *	42	*	74	J	106	j
11	•	43	+	75	K	107	k
12	•	44	,	76	L	108	l
13	* *	45	-	77	M	109	m
14	•	46	.	78	N	110	n
15	•	47	/	79	O	111	o
16	•	48	0	80	P	112	p
17	•	49	1	81	Q	113	q
18	•	50	2	82	R	114	r
19	•	51	3	83	S	115	s
20	•	52	4	84	T	116	t
21	•	53	5	85	U	117	u
22	•	54	6	86	V	118	v
23	•	55	7	87	W	119	w
24	•	56	8	88	X	120	x
25	•	57	9	89	Y	121	y
26	•	58	:	90	Z	122	z
27	•	59	;	91	[	123	{
28	•	60	<	92	\	124	|
29	•	61	=	93	]	125	}
30	•	62	>	94	^	126	~
31	•	63	?	95	_	127	•
•	Estes caracteres não são suportados pelo Microsoft Windows.

* *	Os valores 8, 9, 10 e 13 são convertidos em caracteres de backspace, tabulação, alimentação de linha e retorno de carro, respectivamente. Esses caracteres não têm representação gráfica mas, dependendo do aplicativo, podem interferir na exibição visual do texto.


Função IMEStatus

Retorna um Integer que especifica o modo atual do Editor de método de entrada (IME, Input Method Editor) do Microsoft Windows; disponível somente nas versões do leste asiático.

Sintaxe

IMEStatus

Valores retornados

Os valores retornados para configuração local japonesa são os seguintes:

Constante	Valor	Descrição
vbIMEModeNoControl	0	Não controla o IME (padrão)
vbIMEModeOn	1	IME ativado
vbIMEModeOff	2	IME desabilitado
vbIMEModeDisable	3	IME desabilitado
vbIMEModeHiragana	4	Modo Hiragana de largura total
vbIMEModeKatakana	5	Modo Katakana de largura total
vbIMEModeKatakanaHalf	6	Modo Katakana de semi-largura
vbIMEModeAlphaFull	7	Modo Alfanumérico de largura total
vbIMEModeAlpha	8	Modo Alfanumérico de semi-largura
Os valores retornados para a configuração local coreana são os seguintes:

Constante	Valor	Descrição
vbIMEModeNoControl	0	Não controla o IME (padrão)
vbIMEModeAlphaFull	7	Modo Alfanumérico de largura total
vbIMEModeAlpha	8	Modo Alfanumérico de semi-largura
vbIMEModeHangulFull	9	Modo Hangul de largura total
vbIMEModeHangul	10	Modo Hangul de semi-largura
Os valores retornados para a configuração local chinesa são os seguintes:

Constante	Valor	Descrição
vbIMEModeNoControl	0	Não controla o IME (padrão)
vbIMEModeOn	1	IME ativado
vbIMEModeOff	2	IME desabilitado


Não é possível executar o código no modo de interrupção

Você entra no modo de interrupção quando suspende a execução do código. As causas e soluções desse erro são as seguintes:

•	Você tentou executar o código a partir da caixa de diálogo Macro. No entanto, o Visual Basic já estava executando o código, embora o código tenha sido suspenso no modo de interrupção.

Você pode ter entrado no modo de interrupção tomar conhecimento disso, por exemplo, se tiver ocorrido um erro de sintaxe ou erro de tempo de execução. Continue executando o código suspenso ou termine sua execução antes de executar o código a partir da caixa de diálogo Macro. Você pode corrigir o erro e escolher Continuar ou pode retornar para a caixa de diálogo Macro e reiniciar a macro.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Não é possível chamar o procedimento Friend em um objeto que não é uma ocorrência da classe de definição (Erro 97)

Um procedimento Friend pode ser chamado a partir de um módulo que esteja fora da classe, mas que seja parte do projeto no qual a classe está definida. As causas e soluções desse erro são as seguintes:

•	Você tentou chamar o procedimento Friend de uma classe. Embora sua variável de referência seja do tipo correto, a variável aponta para uma ocorrência que não pertence à classe.

Por exemplo, isto pode ocorrer se houver duas classes, classics e classy (que implementa classy), mas você atribuir erroneamente a ocorrência de classy para a ocorrência de classics.

•	Você tentou acessar uma propriedade ou método Friend através do processo ou segmento cruzado. Os procedimentos Friend não fazem parte de uma interface pública da classe, portanto não podem ser ordenados pelo processo ou segmento cruzado.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Não é possível sair do modo estrutura porque o controle não pode ser criado

Deve-se criar exemplos de todos os controles antes de sair do modo estrutura. As causas e soluções desse erro são as seguintes:

•	O controle especificado na caixa de diálogo de mensagem de erro não pôde ser criado.

O código só pode ser executado após exemplos de todos os controles terem sido criados e conectados corretamente. Certifique-se de que todo arquivo necessário para o controle esteja disponível antes de tentar novamente.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


O objeto não origina eventos Automation

Um objeto deve fornecer uma interface de origem padrão para que você possa gravar procedimentos de evento para seus eventos. As causas e soluções desse erro são as seguintes:

•	Você tentou gravar um procedimento de evento para um evento de um objeto, mas esse evento não está disponível fora do objeto.

Consulte a documentação de seu objeto para obter sugestões sobre modos menos diretos para tratar o evento de interesse.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Operação não permitida em DLL

Nem todas as instruções do Visual Basic são permitidas dentro de uma biblioteca de vínculo dinâmico (DLL). As causas e soluções desse erro são as seguintes:

•	Você tentou criar uma DLL de uma classe que contém uma instrução que não pode ser executada a partir de uma DLL.

Verifique sua classe e remova quaisquer instruções que não possam ser executadas dentro de uma DLL, por exemplo, End statement.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Enum externo inválido

Um Enum é um tipo de dados que pode ser usado para criar grupos de constantes relacionadas (denominadas enumerações). As causas e soluções desse erro são as seguintes:

•	Você usou um End Enum que não fazia parte de uma definição Enum.

Verifique o texto que pode aparecer entre o corpo da definição Enum e a instrução End Enum.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Este documento foi aberto com Macros desativadas

Um aplicativo host pode desativar ou ativar macros. As causas e soluções desse erro são as seguintes:

•	Você abriu o documento com Macros desativadas.

Feche o documento e, em seguida, reabra-o com Ativar macros.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


The library containing this symbol is not referenced by the current project, so the symbol is undefined. Would you like to add a reference to the containing library now?
A biblioteca contendo este símbolo não é referida pelo projeto atual, portanto o símbolo não está definido. Deseja adicionar uma referência a essa biblioteca agora?

As informações sobre tipo e objeto estão contidas nas bibliotecas. As causas e soluções desse erro são as seguintes:

•	Existe uma definição para este símbolo em uma biblioteca de tipos.

Se você desejar definir o símbolo como contido na biblioteca mencionada, clique em OK para adicionar a referência à biblioteca.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


O objeto não tem um procedimento de propriedade Let

Você não pode atribuir um valor a uma propriedade a menos que tenha exibido um método Propriedade Let. As causas e soluções desse erro são as seguintes:

•	Você tentou atribuir um valor a uma propriedade que não exibiu um método Propriedade Let.

Não é possível atribuir diretamente um valor a esta propriedade. Se você criou a classe, poderá modificar a interface exibindo um método Propriedade Let. Caso contrário, verifique a documentação do componente para determinar se há um método indireto para atribuir o valor.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Nenhuma Ajuda disponível

Nem todos os erros possuem um tópico de ajuda associado. As causas e soluções desse erro são as seguintes:

•	Você gerou um erro para o qual não há Ajuda.

Verifique o arquivo Leiame. A ajuda para os erros de interrupção mais recentes freqüentemente está disponível através do arquivo Leiame.


Não é possível coletar eventos deste objeto porque ele já está lançando eventos para o número máximo de destinatários de evento suportados (Erro 96)

Cada objeto especifica o número máximo de destinatários simultâneos para os quais pode lançar eventos. As causas e soluções desse erro são as seguintes:

•	Você tentou usar Set para uma variável WithEvents de um controle em um formulário.

Você não pode usar Set para uma variável WithEvents devido ao número de destinatários permitidos para estes eventos.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Não é possível localizar o ponto de entrada de DLL na DLL especificada

Um ponto de entrada é o nome de uma DLL (Windows) ou recurso de código (Macintosh) ou o ordinal que representa o procedimento. As causas e soluções desse erro são as seguintes:

•	Uma biblioteca de tipos descreveu incorretamente o ponto de entrada, talvez a ortografia do nome ou a especificação do ordinal esteja incorreta.

Entre em contato com o fornecedor para obter uma biblioteca de tipos corrigida.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Não foi possível executar o programa especificado

Quando você cria um arquivo executável de código nativo, alguns programas extras devem ser executados. As causas e soluções desse erro são as seguintes:

•	Os recursos de memória e de sistema foram insuficientes para executar o gerador ou vinculador de código.

Feche quantos aplicativos em execução forem possíveis para liberar memória e outros recursos do sistema.

•	O Visual Basic foi instalado incorretamente.

Reinstale o Visual Basic.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Recursos duplicados com o mesmo tipo e nome

Um arquivo de recursos do Microsoft Windows normalmente contém bitmaps, seqüências de texto e outros dados similares usados por um aplicativo. As causas e soluções desse erro são as seguintes:

•	O arquivo de recursos do Windows que você está tentando usar em seu projeto contém dois ou mais recursos com o mesmo tipo e nome ou o arquivo contém um recurso que o Visual Basic cria automaticamente.

Use outro arquivo de recursos, crie novamente o arquivo de recursos inválido e exclua um dos recursos duplicados.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Uma chamada de propriedade ou método não pode incluir uma referência a um objeto particular, como um argumento ou como um valor de retorno (Erro 98)

Os objetos particulares não devem ser passados fora de um projeto. As seguintes situações, as quais são proibidas, são as possíveis causas para o erro:

•	Um cliente chamou uma propriedade ou método de um componente fora do processo e tentou passar uma referência a um objeto particular como um dos argumentos. Um cliente chamou uma propriedade ou método de um componente fora do processo e o componente tentou retornar uma referência a um objeto particular ou atribuir tal referência a um argumento ByRef.

•	Um componente fora do processo chamou um método de retorno de chamada em seu cliente e tentou passar uma referência a um objeto particular.

•	Um componente fora do processo tentou passar uma referência a um objeto particular como um argumento de um evento que estava sendo causado.

•	Um cliente tentou atribuir uma referência de objeto particular a um argumento ByRef de um evento que estava sendo tratado.

Observe que embora o Visual Basic impeça que você passe referências a objetos particulares não-visuais através de processos, há alguns casos nos quais o Visual Basic não pode detectar este erro e, portanto, não pode evitá-lo. Os objetos particulares não são desenvolvidos para serem usados fora de seu projeto. Se você passá-los para um cliente, poderá colocar em risco a estabilidade do programa e causar incompatibilidade com versões futuras do Visual Basic. Se precisar passar uma classe particular para um cliente, defina a propriedade Instancing para um valor diferente de Private.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


A atribuição à constante não é permitida

Uma constante representa um valor somente leitura. As causas e soluções desse erro são as seguintes:

•	Você tentou atribuir um novo valor a uma variável declarada com Const ou a uma constante de biblioteca de tipos.

Se precisar atribuir um novo valor, declare uma variável normal do tipo desejado e atribua seu valor a essa variável. Se precisar de uma variável com um conjunto restrito de valores, poderá declarar uma enumeração, usando a instrução Enum.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Não é possível ter paramarrays com argumentos opcionais

Você pode usar um ParamArray para definir procedimentos que aceitam listas de argumentos de comprimento variável. Um argumento Optional é aquele que o chamador pode fornecer ou omitir sem gerar um erro. As causas e soluções desse erro são as seguintes:

•	Você usou as palavras-chave ParamArray e Optional na mesma lista de parâmetros.

Remova o parâmetro Optional ou ParamArray. Não é possível usar ambas as palavras-chave na mesma lista de parâmetros. Qualquer uma das abordagens pode ser usada para o tipo de lista de parâmetros desejado.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


O arquivo especificado não foi encontrado

Verifique na mensagem o nome do arquivo que não pôde ser encontrado. As causas e soluções desse erro são as seguintes:

•	O arquivo nomeado na mensagem de erro não pôde ser encontrado conforme especificado.

Certifique-se de que o nome da unidade e o caminho, bem como o nome do arquivo, estejam especificados corretamente.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Tipo de parâmetro opcional inválido

Nem todos os tipos do Visual Basic são permitidos para parâmetros Optional. As causas e soluções desse erro são as seguintes:

•	Um parâmetro é definido com um tipo de dados inválido.

Por exemplo, você não pode ter um parâmetro Optional do tipo definido pelo usuário. Seu objetivo pode ser alcançado usando uma matriz de tipo Variant, já que os elementos de uma matriz de Variant podem armazenar dados de tipos diferentes.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Modelo inválido

Uma classe derivada de um modelo não pode ser um modelo. As causas e soluções desse erro são as seguintes:

•	Você tentou criar um componente de modelo, mas tentou derivá-lo a partir de um modelo.

Não é possível derivar uma classe de modelo a partir de um modelo.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Válido somente no módulo de objeto

Algumas instruções ou construções do Visual Basic são válidas somente em módulos de objeto (formulários, módulos de classe, etc.). As causas e soluções desse erro são as seguintes:

•	Você tentou usar uma instrução ou construção inválida (por exemplo, a instrução Implements, palavra-chave WithEvents ou um depósito de eventos) em um módulo não-classe.

Coloque as instruções que geram este erro em um módulo de objeto.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


A biblioteca ou o assistente do tipo solicitado não é um projeto do VBA

Nem todos os elementos disponíveis no Visual Basic podem ser lidos e gravados. As causas e soluções desse erro são as seguintes:

•	Você tentou gravar em um suplemento ou em uma biblioteca de tipos a partir de um projeto do Visual Basic.

Não é possível gravar diretamente em um suplemento pré-empacotado ou em uma biblioteca de tipos como parte de um projeto do Visual Basic.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Esta edição requer um Reset

Na maioria dos casos, você pode editar o código e continuar executando o código a partir do ponto da edição. As causas e soluções desse erro são as seguintes:

•	Você fez uma alteração em seu código que requer o reinicio do código a partir do ponto de inicialização.

Isso pode ocorrer se você interromper o código em um procedimento e a linha de execução atual não estiver mais contida no mesmo contexto processual que havia quando a execução foi suspensa.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Translation failed. Please check the trnslate.log file for more information.
A conversão falhou. Verifique o arquivo trnslate.log para obter maiores informações.

As versões atuais do Visual Basic só executam conversão para compatibilidade com versões anteriores. As causas e soluções desse erro são as seguintes:

•	A conversão falhou inesperadamente.

Isso geralmente ocorre devido a uma referência de biblioteca de tipos interrompida. Mais detalhes devem estar disponíveis no log de transação especificado.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Os assistentes não podem fazer referência a projetos

Um Assistente pode fazer referência a outro Assistente, mas não a um projeto. As causas e soluções desse erro são as seguintes:

•	Durante um comando Criar assistente, uma referência a um projeto foi encontrada.

Remova a referência ao projeto.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Erro de compilação inesperado

As causas e soluções desse erro são as seguintes:

•	Este erro ocorre quando acontece um erro não previsto durante a compilação que não pode ser tratado pelo compilador.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Não é possível tratar eventos para o objeto especificado

As causas e soluções desse erro são as seguintes:

•	Os eventos para este objeto não puderam ser tratados. Os eventos podem estar faltando no objeto, ou podem existir mas funcionando incorretamente, ou foram desativados intencionalmente.

Verifique o objeto e seus eventos no Pesquisador de objeto para obter informações sobre eles.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Uso inválido do nome da classe base

Você não pode usar o nome de uma classe base sozinho. As causas e soluções desse erro são as seguintes:

•	Você tentou usar o nome de uma classe base sozinho sem tornar claro que estava tentando acessar o membro padrão da classe base.

Coloque o nome da classe base entre parênteses para indicar que deseja acessar o membro padrão.

•	Você usou o nome da classe base em uma expressão mas o membro que estava tentando acessar foi especificado ambiguamente.

Use algo para remover a ambigüidade (por exemplo, um ponto de exclamação) entre o nome da classe base e o membro de interesse.

•	Você usou o nome da classe base em uma instrução Set que continha uma referência à classe.

Use o nome da classe base para recuperar uma referência, por exemplo, usando GetObject.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Nome de evento inválido

Visto que é um procedimento de evento, os nomes são construídos pela associação do nome do objeto ao nome do evento com um sublinhado. As causas e soluções desse erro são as seguintes:

•	Você usou um sublinhado como parte do nome do evento.

Remova o sublinhado do nome do evento.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Evento não encontrado

Um evento especificado em uma instrução RaiseEvent deve corresponder a um evento definido. As causas e soluções desse erro são as seguintes:

•	Você especificou um nome em uma instrução RaiseEvent, mas a definição de evento não pode ser encontrada.

Certifique-se de que a ortografia do nome do evento esteja correta.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Uma seqüência de caracteres de pesquisa deve ser especificada

Você tem que digitar uma seqüência de caracteres quando pesquisar no pesquisador de objeto. As causas e soluções desse erro são as seguintes:

•	Você iniciou uma pesquisa no Pesquisador de objeto, mas não especificou o texto a ser pesquisado.

Digite uma seqüência de caracteres de pesquisa.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Não é possível exibir o nome especificado porque está oculto

Alguns nomes existem em uma biblioteca de tipos, mas estão marcados como ocultos. As causas e soluções desse erro são as seguintes:

•	Você especificou um nome que está na biblioteca de tipos, mas está marcado como oculto.

Não é possível visualizar normalmente os membros ocultos da biblioteca de tipos. Escolha Mostrar membros ocultos no menu de contexto do pesquisador de objeto para tornar visíveis os membros ocultos. Você poderá, então, visualizar as informações sobre o membro.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Não é possível saltar para o tipo especificado porque ele está na biblioteca especificada à qual não há referência atualmente

As causas e soluções desse erro são as seguintes:

•	Você tentou especificar um tipo em uma biblioteca que não é uma referência dentro do projeto.

Defina uma referência à biblioteca de tipos através do diálogo Referências.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Enum interno inválido

Nem todos os tipos são válidos dentro de uma definição de enumeração. As causas e soluções desse erro são as seguintes:

•	Você tentou especificar uma seqüência de caracteres ou algum outro tipo inválido como o valor de um membro Enum.

A expressão de constante usada para especificar um membro Enum deve avaliar o tipo Long ou outro tipo de Enum.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Erro inesperado

As causas e soluções desse erro são as seguintes:

•	Ocorreu um erro inesperado.  Tente terminar o sistema e reinicializá-lo.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


O projeto atual não suporta arquivos deste tipo

As causas e soluções desse erro são as seguintes:

•	O arquivo que você tentou abrir não é um arquivo de projeto válido ou é um arquivo de projeto que contém recursos não suportados pelo aplicativo host do Visual Basic e pelo ambiente Visual Basic.

Certifique-se de que o arquivo de projeto que você deseja abrir seja um arquivo de projeto válido (um que tenha sido criado e salvo dentro do mesmo aplicativo host do Visual Basic e ambiente Visual Basic).

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


This VBA project was created while running VBA in a different application. You may only open it from inside the same application in which it was created.
Este projeto do VBA foi criado durante a execução do VBA em um aplicativo diferente. Você só poderá abri-lo dentro do mesmo aplicativo no qual foi criado

As causas e soluções desse erro são as seguintes:

•	O arquivo que você tentou abrir é um arquivo de projeto que foi criado dentro de outro aplicativo host.

Certifique-se de que o arquivo de projeto que você deseja abrir seja aquele criado e salvo dentro do mesmo aplicativo host do Visual Basic.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Controles sem janela não podem ter menus.
Controles sem janela não podem ter menus

As causas e soluções desse erro são as seguintes:

•	Você tentou colocar um menu em um controle sem janela, o que não é permitido.

Para colocar um menu em um controle, escolha um controle com janela.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Este controle só pode ser usado com criadores de 'item'

As causas e soluções desse erro são as seguintes:

•	O controle escolhido funciona apenas com o projetista indicado.

Você deve escolher outro controle ou um criador diferente.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Este controle não pode ser usado com criadores de 'item'

As causas e soluções desse erro são as seguintes:

•	O controle escolhido não funciona com o criador indicado.

Você deve escolher outro controle ou um criador diferente.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Este criador não pode ser usado porque possui recursos que não são suportados nesta versão do Visual Basic

As causas e soluções desse erro são as seguintes:

•	O criador escolhido não é suportado nesta versão do Visual Basic.

Você deve usar um criador diferente ou algum desenvolvido para a versão indicada do Visual Basic.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


'item' cannot be added because it is referenced but not in use by any items in the project. To correct this, uncheck 'Remove information about unused ActiveX Controls' in Project Options.
'item' não pode ser adicionado porque é referido mas não está em uso por nenhum item no projeto. Para corrigir isto, desmarque 'Remover informações sobre controles ActiveX não usados' em Opções de projeto.

As causas e soluções desse erro são as seguintes:

•	O componente indicado não pode ser adicionado porque não está sendo usado por nenhum item no projeto.

Desmarque "Remover informações sobre controles ActiveX não usados" na caixa de diálogo Opções de projeto sob o menu Projeto.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Não foi possível iniciar o Internet Explorer

As causas e soluções desse erro são as seguintes:

•	Um problema desconhecido está impedindo a execução do Internet Explorer.

Tente iniciar o Internet Explorer sozinho para certificar-se de que está funcionando corretamente.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Criadores de 'item' só podem ser usados em projetos DLL

As causas e soluções desse erro são as seguintes:

•	O criador indicado pode ser usado apenas em projetos DLL do ActiveX.

Tente o criador em um projeto DLL do ActiveX.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Criadores de 'item' não podem ser públicos em projetos EXE do ActiveX

As causas e soluções desse erro são as seguintes:

•	A propriedade Instancing do projetista indicado não pode ser definida para Public em projetos .exe do ActiveX.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Criadores de 'item' devem ser públicos e não podem ser usados em projetos EXE padrão

As causas e soluções desse erro são as seguintes:

•	A propriedade Instancing do criador indicado deve ser definida para Public.

O criador não pode ser usado em projetos .exe padrão.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Criadores de 'item' não podem ser particulares

As causas e soluções desse erro são as seguintes:

•	A propriedade Instancing do criador indicado não pode ser definida para Private.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


One or more instances of this object are running. Can't remove it at this time.
Uma ou mais ocorrências deste objeto estão sendo executadas. Não é possível removê-lo agora

As causas e soluções desse erro são as seguintes:

•	Você tentou remover um objeto que está atualmente em execução.

Feche todas as ocorrências do objeto antes de removê-lo do projeto.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Este projeto está atualmente sendo usado como referência por outro projeto e não pode ser fechado

As causas e soluções desse erro são as seguintes:

•	O projeto indicado que você tentou fechar está sendo usado como referência por outro projeto.

Feche-o após remover a referência do outro projeto.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


MDI forms are not allowed in multithreaded projects. Any MDI form will be removed from this project. To keep the MDI form in the project select Cancel and change threading model to Thread Pool with only 1 thread.
Formulários MDI não são permitidos em projetos de múltiplos segmentos. Qualquer formulário MDI será removido deste projeto. Para manter o formulário MDI no projeto, selecione Cancelar e altere o modelo de segmento para Pool de segmentos com apenas 1 segmento.

As causas e soluções desse erro são as seguintes:

•	Você tentou adicionar um formulário MDI a um projeto de múltiplos segmentos.

Se você desejar manter o formulário MDI em seu projeto, altere o modelo de segmentos para Pool de segmentos com apenas um segmento.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


'item' has caused an access violation. Remove it from the list of available Add-Ins?
'item' causou uma violação de acesso. Removê-lo da lista de Suplementos disponíveis?

As causas e soluções desse erro são as seguintes:

•	O suplemento indicado está causando uma violação de acesso ao arquivo.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


O Suplemento selecionado não foi confirmado como 'Protegido pela linha de comando' e pode precisar de alguma intervenção do usuário (UI possível)

As causas e soluções desse erro são as seguintes:

•	"Protegido pela linha de comando" significa que o suplemento está registrado de um modo que indica que não há interfaces de usuário que requeiram entrada do usuário quando o Visual Basic é chamado através de uma linha de comando. Uma interface de usuário pode interferir na operação de processos não assistidos (tais como scripts de construção).

Se você não indicar que um suplemento está protegido pela linha de comando (mesmo se for protegido pela linha de comando), quando um usuário selecionar seu suplemento e, em seguida, Linha de comando na caixa Comportamento do carregamento, ele receberá a mensagem de aviso. Isto não é um problema sério, mas apenas um aviso ao usuário que o suplemento selecionado pode conter elementos de UI que podem abrir inesperadamente e paralisar seus scripts automatizados suspendendo a entrada do usuário.

Para especificar que um suplemento é protegido pela linha de comando, crie-o dessa maneira (você pode usar o criador do Suplemento para fazer isto) ou altere manualmente o valor na chave do Registro.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Illegal parameter. Can't write user-defined type.
Parâmetro inválido. Não é possível gravar o tipo definido pelo usuário.

As causas e soluções desse erro são as seguintes:

•	Você tentou gravar um tipo definido pelo usuário para um objeto PropertyBag que não é suportado.

Para resolver isto, você pode gravar cada item individual do tipo definido pelo usuário para o objeto PropertyBag.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Illegal parameter. Can't write object because it does not support persistence.
Parâmetro inválido. Não é possível gravar o objeto porque ele não suporta persistência.

As causas e soluções desse erro são as seguintes:

•	Você tentou gravar um objeto para um objeto PropertyBag, mas o objeto não suporta uma das interfaces de persistência do ActiveX.

Para corrigir isto, você deve ter acesso ao código do objeto.  Deve ser um objeto criado pelo Visual Basic e ter sua propriedade Persistable definida para True.  Além disso, a classe deve ser Public ou Public Createable e deve estar em um projeto DLL do ActiveX, Exe do ActiveX ou UserControl.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Nome de propriedade inválido

As causas e soluções desse erro são as seguintes:

•	O nome digitado para a propriedade é inválido.  Ou seja, já está em uso, reservado para ser usado pelo sistema ou contém caracteres inválidos.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


'item' is a single-threaded component and cannot be used in multi-threaded projects. Change the threading model for 'item' or contact the component vendor for an updated version.
'item' é um componente de segmento único e não pode ser usado em projetos de múltiplos segmentos. Altere o modelo de segmento para 'item' ou entre em contato com o fornecedor do componente para obter uma versão atualizada.

As causas e soluções desse erro são as seguintes:

•	Você está tentando usar um componente de segmento único em um projeto de múltiplos segmentos.

Você pode alterar o modelo de segmento para o componente de segmento único ou entrar em contato com o fornecedor do componente para obter uma versão atualizada.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Failed to load control 'item1' from 'item2'. Your version of 'item2' may be outdated. Make sure you are using the version of the control that was provided with your application.
Falha ao carregar o controle 'item1' a partir de 'item2'. Sua versão de 'item2' pode estar desatualizada. Certifique-se de que esteja usando a versão do controle que foi fornecida com seu aplicativo.

As causas e soluções desse erro são as seguintes:

•	Você está usando uma versão desatualizada.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Failed to activate control 'item 1'. This control may be incompatible with your application. Make sure you are using the version of the control that was provided with your application.
Falha na ativação do controle 'item 1'. Este controle pode ser incompatível com seu aplicativo. Certifique-se de que esteja usando a versão do controle que foi fornecida com seu aplicativo.

As causas e soluções desse erro são as seguintes:

•	Este aplicativo não conseguiu ativar o controle indicado porque é incompatível com o aplicativo.  Isto pode ocorrer se a versão do controle atualmente ativo em seu sistema for diferente daquela fornecida com seu aplicativo.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


The ActiveX Designer's Type Information does not match what was saved. Unable to Load.
As informações de tipo do Criador ActiveX não correspondem ao que foi salvo. Não é possível carregar.

As causas e soluções desse erro são as seguintes:

•	O projeto não pôde ser carregado porque as informações de tipo do criador ActiveX não correspondem ao que foi salvo.  Isto pode ter ocorrido devido a um arquivo corrompido.

Tente carregar uma cópia de backup do projeto.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Esta interação entre os componentes compilados e de ambiente de criação não é suportada

As causas e soluções desse erro são as seguintes:

•	Isto ocorre quando dois componentes estão sendo executados juntos, em que um componente (tal como um formulário ou um UserControl) foi compilado anteriormente e agora está sendo executado usando o tempo de execução (msvbvm60.dll) e o outro componente está sendo executado no IDE.  Por exemplo, um UserControl compilado em execução em um formulário no IDE.

O problema ocorre devido a estrutura de memória interna entre um item em execução no IDE e um objeto compilado ser um pouco diferente e nem sempre compatível.  No entanto, em geral, você não deverá ter problemas com isto, a menos que esteja passando uma ocorrência de um UserControl (Me) a um formulário do host ou outro componente através de um procedimento Property ou Sub.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Não é possível imprimir a imagem minimizada do formulário

As causas e soluções desse erro são as seguintes:

•	A imagem do formulário não pode ser impressa quando minimizada.

Maximize a imagem e tente a operação de impressão novamente.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Ocorreu um erro inesperado no gerador ou vinculador de código

As causas e soluções desse erro são as seguintes:

•	O gerador ou vinculador de código causou um erro inesperado.

Clique em Sim para exibir os erros no ‘Bloco de Notas’.

Este erro geralmente é causado por espaço insuficiente em disco ou outros problemas relacionados ao disco.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Os números de versão devem estar no intervalo de 0 a 9999

As causas e soluções desse erro são as seguintes:

•	Você tentou atribuir um número negativo, um caractere não-numérico ou um número maior que 9999, como o componente Principal, Secundário ou Revisão do número de versão para um projeto na guia Criar da caixa de diálogo Propriedades do projeto. Use um número entre 0 e 9999, inclusive.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Endereço base inválido

Você digitou um endereço base inválido. A causa e a solução desse erro são as seguintes:

•	Na guia Compilar do diálogo Propriedades do projeto, você especificou um endereço base inválido.

Um endereço base válido deve ser um múltiplo de 64K, maior que 64K e menor que &H7FFF0000.

Este erro ocorre em projetos DLL do ActiveX ou de controle ActiveX.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


No creatable public component detected. Press F1 for more information.
Nenhum componente público que possa ser criado foi detectado. Pressione F1 para obter maiores informações.

As causas e soluções desse erro são as seguintes:

•	Seu projeto deve ter pelo menos um componente público que possa ser criado.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


O arquivo 'item' não podia ser registrado como um componente ActiveX.

As causas e soluções desse erro são as seguintes:

•	Você tentou registrar um controle ou biblioteca de vínculo dinâmico (.dll) que não é um componente ActiveX válido. Certifique-se de que tenha o controle ou .dll correto. Entre em contato com o fornecedor do componente ActiveX para obter maiores informações.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


O arquivo de projeto especificado contém uma chave inválida.
O arquivo de projeto 'item1' contém uma chave inválida 'item2'

As causas e soluções desse erro são as seguintes:

•	O arquivo de projeto do Visual Basic (.vbp) contém uma chave que o Visual Basic não reconhece. O arquivo pode estar corrompido.

Instale uma cópia de backup do arquivo especificado ou modifique o arquivo usando um editor de texto para corrigir o erro.

Aviso   Modificar um arquivo do Visual Basic em um editor diferente do Visual Basic pode corromper o arquivo. Isto é recomendado apenas para usuários avançados.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Não é possível exibir a Ajuda

As causas e soluções desse erro são as seguintes:

•	Se você estiver executando o WinHelp, o aplicativo de Ajuda do Windows não estará disponível. Se o Winhelp.exe estiver em sua máquina, certifique-se de que esteja em seu caminho. Se não estiver em sua máquina, executa o programa de instalação do Microsoft Windows 9x ou Microsoft Windows NT para instalá-lo.

•	Se você estiver executando o HTMLHelp, se HH.exe estiver em sua máquina, certifique-se de que esteja em seu caminho. Se não estiver em seu computador, instale-o para poder visualizar a Ajuda.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Class not registered. 'item 1'
Classe não registrada. 'item 1'

As causas e soluções desse erro são as seguintes:

•	O módulo de classe indicado não está registrado.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Programmatic ID string too long 'item'. The Programmatic ID must be 39 characters or less.
Seqüência de caracteres da ID programática muito longa 'item'. A ID programática deve conter 39 caracteres ou menos.

As causas e soluções desse erro são as seguintes:

•	A seqüência de caracteres de ProgID do componente ActiveX pode conter no máximo 39 caracteres. A ProgID é criada concatenando o nome do projeto com o nome do módulo de classe.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Project <name> has been modified. Do you wish to save the changes now?
O projeto <nome> foi modificado. Deseja salvar as alterações agora?

As causas e soluções desse erro são as seguintes:

•	Uma das definições de propriedade ou uma instrução de código foi alterada em um ou mais arquivos do projeto e as alterações ainda não foram salvas. Esta é a sua última chance de salvar as alterações antes de carregar outro projeto.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


O comportamento do carregamento para 'item' não pôde ser atualizado por causa das permissões de Registro atuais.

As causas e soluções desse erro são as seguintes:

•	O Visual Basic não pode carregar o suplemento que você tentou selecionar a partir da lista Suplementos disponíveis na caixa de diálogo Gerenciador de suplementos, porque ele não foi registrado corretamente ou não está mais no Registro do sistema.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Componente não registrado corretamente

As causas e soluções desse erro são as seguintes:

•	O componente indicado não foi registrado corretamente.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Componente não encontrado na localização registrada

As causas e soluções desse erro são as seguintes:

•	O arquivo executável (.exe) ou o arquivo da biblioteca de vínculo dinâmico (.dll) requeridos não podem ser encontrados.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


O componente não pôde criar com êxito o objeto solicitado

As causas e soluções desse erro são as seguintes:

•	O arquivo executável (.exe) do componente ActiveX não conseguiu ser executado corretamente.

Pode haver um problema com as informações no Registro.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Component 'item' or one of its dependencies not correctly registered: a file is missing or invalid
O componente 'item' ou uma de suas dependências não foi registrado corretamente: um arquivo está faltando ou é inválido

As causas e soluções desse erro são as seguintes:

•	O arquivo especificado foi movido ou excluído.

•	O arquivo especificado foi registrado incorretamente.

Reinstale o arquivo especificado para registrá-lo corretamente. Consulte o fornecedor do objeto para obter maiores informações.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


This feature requires Internet Explorer 'item' or greater.  You can obtain the latest version from www.microsoft.com
Este recurso requer o Internet Explorer 'item' ou posterior.  Você pode obter a versão mais recente em www.microsoft.com

As causas e soluções desse erro são as seguintes:

•	Você deve ter a versão indicada do Internet Explorer para que este recurso funcione corretamente.

Verifique http://www.microsoft.com para obter a última versão disponível do Internet Explorer.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Um formulário não pode ser movido ou dimensionado quando minimizado ou maximizado

As causas e soluções desse erro são as seguintes:

•	Você tentou mostrar um formulário que não é de janela restrita antes de descartar um formulário de janela restrita.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Não é possível mostrar um formulário que não é de janela restrita quando o formulário de janela restrita está sendo exibido

As causas e soluções desse erro são as seguintes:

•	Você tentou mostrar um formulário que não é de janela restrita antes de descartar um formulário de janela restrita.

Descarte primeiro o formulário de janela restrita.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Não é possível usar ReDim, Erase ou atribuir à Variant que contém uma matriz cujo elemento é objeto With

As causas e soluções desse erro são as seguintes:

•	Você tentou usar ReDim, Erase ou atribuir a uma Variant uma variável cujo elemento é um objeto With.

Por exemplo, o seguinte código causa este erro:

Type Test

0	Name as Integer

1	End Type

2	Sub Main()

3	Dim c(0) As Test

4	Dim e

5	e = c

6	With e(0)

7	ReDim e(1)

8	End With

9	End Sub

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


O projeto não pode ser exibido.
O projeto não pode ser exibido

As causas e soluções desse erro são as seguintes:

•	O projeto que você está tentando visualizar está bloqueado.

Consulte a documentação do aplicativo host para obter Ajuda sobre como tornar possível a exibição do projeto.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).


Exemplo dos eventos Activate e Deactivate

O código a seguir utiliza dois UserForms: UserForm1 e UserForm2. Copie esses procedimentos no módulo UserForm1 e, em seguida, adicione o UserForm2. A legenda do UserForm1 é criada no procedimento do evento Activate. Quando o usuário clica na área de cliente de UserForm1, UserForm2 é carregado e exibido, acionando o evento Deactivate de UserForm1, alterando as suas legendas.

' Ativa o evento relativo a UserForm1

Private Sub UserForm_Activate()

    UserForm1.Caption = "Clique na minha área de cliente"

End Sub

' Evento de clique relativo a UserForm1

Private Sub UserForm_Click()

    Load UserForm2

    UserForm2.StartUpPosition = 3

    UserForm2.Show

End Sub

' Desativa o evento relativo a UserForm1

Private Sub UserForm_Deactivate()

    UserForm1.Caption = "Acabo de perder o foco!"

    UserForm2.Caption = "O foco saiu de UserForm1 e veio para mim"

End Sub


Exemplo do evento Initialize

O exemplo a seguir supõe que há dois UserForms em um programa. No evento Initialize de UserForm1, o UserForm2 é carregado e exibido. Quando o usuário clica em UserForm2, ele é oculto e UserForm1 aparece. Quando clica em UserForm1, UserForm2 é mostrado novamente.

' Este é o procedimento do evento Initialize para UserForm1

Private Sub UserForm_Initialize()

Load UserForm2

UserForm2.Show

End Sub

' Este é o evento Click de UserForm2

Private Sub UserForm_Click()

UserForm2.Hide

End Sub

' Este é o evento Click para UserForm1

Private Sub UserForm_Click()

UserForm2.Show

End Sub


Exemplo do evento QueryClose

O código a seguir força o usuário a clicar na área de cliente do UserForm para fechá-lo. Se o usuário tentar utilizar a caixa Fechar na barra de título, o parâmetro Cancelar será definido como um valor diferente de zero, impedindo o término. Entretanto, se o usuário tiver clicado na área de cliente, CloseMode terá o valor 1 e o Unload Me será concluído.

Private Sub UserForm_Activate()

    UserForm1.Caption = "Você deve me clicar para me matar!"

End Sub

Private Sub UserForm_Click()

  Unload Me

End Sub

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)

    'Impede o usuário de fechar com a caixa Fechar na barra de título.

    If CloseMode <> 1 Then Cancel = 1

    UserForm1.Caption = "A caixa Fechar não funciona! Clique em mim!"

End Sub


Exemplo do evento Resize

O exemplo a seguir utiliza os eventos Activate e Click para ilustrar o acionamento do evento Resize do UserForm. Quando o usuário clica na área cliente do formulário, ela cresce ou diminui e a nova altura é especificada na barra de título. Observe que a propriedade Tag é utilizada para armazenar a altura inicial do UserForm.

' Ativa o evento relativo a UserForm1

Private Sub UserForm_Activate()

UserForm1.Caption = "Clique em mim para eu crescer!"

Tag = Height	' Salva a altura inicial.

End Sub

' Evento de clique relativo a UserForm1

Private Sub UserForm_Click()

Dim NewHeight As Single

NewHeight = Height

' Se o formulário for pequeno, aumenta o seu tamanho.

If NewHeight = Val(Tag) Then

Height = Val(Tag) * 2

Else

' Se o formulário for grande, diminui o seu tamanho.

Height = Val(Tag)

End If

End Sub

' Redimensiona o evento para UserForm1

Private Sub UserForm_Resize()

UserForm1.Caption = "Nova Altura: " & Height & "  " & "Clique em mim para me redimensionar!"

End Sub


Exemplo do evento Terminate

Os procedimentos de evento a seguir fazem com que um UserForm emita um aviso sonoro por alguns segundos depois de o usuário clicar na área de cliente para descartar o formulário.

Private Sub UserForm_Activate()

    UserForm1.Caption = "Clique em mim para me matar!"

End Sub

Private Sub UserForm_Click()

  Unload Me

End Sub

Private Sub UserForm_Terminate()

    Dim Conta As Integer

    For Conta = 1 To 100

        Beep

    Next

End Sub


Eventos Activate e Deactivate

O evento Activate ocorre quando um objeto torna-se a janela ativa. O evento Deactivate ocorre quando um objeto não é mais a janela ativa.

Sintaxe

Private Sub object_Activate()

Private Sub object_Deactivate()

O espaço reservado object representa uma expressão de objeto que resulta em um objeto na lista Aplica-se a.

Comentários

Um objeto pode se tornar ativo utilizando-se o método Show no código.

O evento Activate pode ocorrer somente quando um objeto está visível. Um UserForm carregado com Load não é visível a menos que você utilize o método Show.

Os eventos Activate e Deactivate ocorrem apenas quando você move o foco dentro de um aplicativo. Mover o foco de ou para um objeto em outro aplicativo não aciona nenhum dos eventos.

O evento Deactivate não ocorre quando se está descarregando um objeto.


Evento Initialize

Ocorre depois que um objeto é carregado, mas antes de ele ser exibido.

Sintaxe

Private Sub object_Initialize()

O espaço reservado object representa uma expressão de objeto que resulta em um objeto na lista Aplica-se a.

Comentários

O evento Initialize é normalmente utilizado para preparar um aplicativo ou UserForm para ser utilizado. Variáveis são valores iniciais atribuídos e controles podem ser movidos ou redimensionados para acomodar a inicialização de dados.


Evento QueryClose

Ocorre antes que um UserForm feche.

Sintaxe

Private Sub UserForm_QueryClose(cancel As Integer, closemode As Integer)

A sintaxe do evento QueryClose possui estas partes:

Parte	Descrição
Cancel	Um número inteiro. Definir este argumento para qualquer valor diferente de 0 interrompe o evento QueryClose em todos os formulários de usuário carregados e evita que o UserForm e o aplicativo fechem.
Closemode	Um valor ou constante que indica a causa do evento QueryClose.
Valores retornados

O argumento closemode retorna os seguintes valores:

Constante	Valor	Descrição
VbFormControlMenu	0	O usuário escolheu o comando Close a partir do menu Control no UserForm.
VbFormCode	1	A instrução Unload é invocada a partir do código.
VbAppWindows	2	A sessão do ambiente operacional Windows atual está terminando. (Somente para o Visual Basic 5.0.)
VbAppTaskManager	3	O Gerenciador de tarefas do Windows está fechando o aplicativo. (Somente para o Visual Basic 5.0.)
Estas constantes são listadas na biblioteca de objetos do Visual Basica for Applications no Pesquisador de objeto. Observe que vbFormMDIForm também é especificado em Pesquisador de objeto, mas ainda não há suporte para o mesmo.

Comentários

Este evento é utilizado normalmente para se certificar de que não existem tarefas não finalizadas nos formulários de usuário incluídos em um aplicativo antes que ele seja fechado. Por exemplo, se um usuário não salvou os novos dados em nenhum UserForm, o aplicativo pode pedir ao usuário para salvar estes dados.

Quando um aplicativo é fechado, você pode utilizar o procedimento de QueryClose para definir a propriedade Cancel para True, interrompendo o processo de fechamento.


Evento Resize

Ocorre quando um formulário de usuário é redimensionado.

Sintaxe

Private Sub UserForm_Resize()

Comentários

Utilize um procedimento do evento Resize para mover ou redimensionar os controles quando o pai UserForm for redimensionado. Você também pode utilizar este procedimento de evento para recalcular variáveis ou propriedades.


Evento Terminate (Visual Basic for Applications)
Evento Terminate

Ocorre quando todas referências a uma ocorrência de um objeto são removidas da memória definindo todas as variáveis que se referem ao objeto Nothing ou quando a última referência ao objeto sai do escopo.

Sintaxe

Private Sub object_Terminate( )

O espaço reservado object representa uma expressão de objeto que resulta em um objeto na lista Aplica-se a.

Comentários

O evento Terminate ocorre depois que o objeto é descarregado. O evento Terminate não é ativado se as ocorrências do UserForm ou classe forem removidas da memória porque o aplicativo terminou anormalmente. Por exemplo, se seu aplicativo chamar a instrução End antes de remover todas as ocorrências existentes da classe ou UserForm da memória, o evento Terminate não é ativado para esta classe ou UserForm.


Exemplo do método Hide

O exemplo a seguir supõe que há dois UserForms em um programa. No evento Initialize de UserForm1, o UserForm2 é carregado e exibido. Quando o usuário clica em UserForm2, ele é oculto e UserForm1 aparece. Quando clica em UserForm1, UserForm2 é mostrado novamente.

' Este é o procedimento do evento Initialize para UserForm1

Private Sub UserForm_Initialize()

Load UserForm2

UserForm2.Show

End Sub

' Este é o evento Click de UserForm2

Private Sub UserForm_Click()

UserForm2.Hide

End Sub

' Este é o evento Click para UserForm1

Private Sub UserForm_Click()

UserForm2.Show

End Sub


Exemplo da instrução Load

No exemplo a seguir, o UserForm2 é carregado durante o evento Initialize do UserForm1. Cliques subseqüentes no UserForm2 revelam o UserForm1.

' Este é o procedimento do evento Initialize para UserForm1

Private Sub UserForm_Initialize()

Load UserForm2

UserForm2.Show

End Sub

' Este é o evento Click de UserForm2

Private Sub UserForm_Click()

UserForm2.Hide

End Sub

' Este é o evento Click para UserForm1

Private Sub UserForm_Click()

UserForm2.Show

End Sub


Exemplo do método PrintForm

No exemplo a seguir, a área de cliente do formulário é impressa quando o usuário clica no formulário.

' Este é o evento Click para UserForm1

Private Sub UserForm_Click()

UserForm1.PrintForm

End Sub


Exemplo do método Show

O exemplo a seguir supõe que há dois UserForms em um programa. No evento Initialize de UserForm1, o UserForm2 é carregado e exibido. Quando o usuário clica em UserForm2, ele é oculto e UserForm1 aparece. Quando clica em UserForm1, UserForm2 é mostrado novamente.

' Este é o procedimento do evento Initialize para UserForm1

Private Sub UserForm_Initialize()

Load UserForm2

UserForm2.Show

End Sub

' Este é o evento Click para UserForm2

Private Sub UserForm_Click()

UserForm2.Hide

End Sub

' Este é o evento Click para UserForm1

Private Sub UserForm_Click()

UserForm2.Show

End Sub


Exemplo da instrução Unload

O exemplo a seguir supõe que há dois UserForms em um programa. No evento Initialize de UserForm1, o UserForm2 é carregado e exibido. Quando o usuário clica no UserForm2, ele é descarregado e o UserForm1 aparece. Quando clica em UserForm1, ele, por sua vez, é descarregado.

' Este é o procedimento do evento Initialize para UserForm1

Private Sub UserForm_Initialize()

Load UserForm2

UserForm2.Show

End Sub

' Este é o evento Click para UserForm2

Private Sub UserForm_Click()

Unload UserForm2

End Sub

' Este é o evento Click para UserForm1

Private Sub UserForm_Click()

Unload UserForm1

End Sub


Exemplo do método WhatsThisMode

O exemplo a seguir altera o ponteiro do mouse para o ponteiro O que é isto? (ponto de interrogação) quando o usuário clicar em UserForm. Se nem a propriedade WhatsThisHelp ou WhatsThisButton estiver definida para True na janela Propriedades, a invocação seguinte não tem efeito.

Private Sub UserForm_Click()

' Muda o ponteiro do mouse para ponto de interrogação O que é isto?.

WhatsThisMode

End Sub


Método Hide

Oculta um objeto, mas não o descarrega.

Sintaxe

object.Hide

O espaço reservado object representa uma expressão de objeto que resulta em um objeto na lista Aplica-se a. Se o object é omitido, o UserForm com o foco é assumido para ser o object.

Comentários

Quando um objeto está oculto, ele é removido da tela e sua propriedade Visible é definida para False. Os controles de um objeto oculto não estão acessíveis para o usuário, mas estão disponíveis de modo programado para o aplicativo em execução, para outros processos que podem estar se comunicando com o aplicativo por meio da automação e no Windows, para eventos de controle Timer.

Quando um UserForm está oculto, o usuário não pode interagir com o aplicativo até que todo o código no procedimento do evento, que fez o UserForm ser ocultado, tenha terminado sua execução.

Se o UserForm não estiver carregado quando o método Hide for chamado, o método Hide carrega o UserForm, mas não o exibe.


Instrução Load

Carrega um objeto, mas não o exibe.

Sintaxe

Load object

O espaço reservado object representa uma expressão de objeto que resulta em um objeto na lista Aplica-se a.

Comentários

Quando um objeto é carregado, ele é colocado na memória, mas não fica visível. Utilize o método Show para tornar o objeto visível. O usuário poderá interagir com um objeto somente quando este estiver visível. O objeto pode ser manipulado de modo programado no seu procedimento de evento Inicializar.


Método PrintForm

Envia uma imagem bit a bit de um objeto UserForm para a impressora.

Sintaxe

object.PrintForm

O espaço reservado object representa uma expressão de objeto que resulta em um objeto na lista Aplica-se a. Se o object é omitido, o UserForm com o foco é assumido para ser o object.

Comentários

PrintForm imprime todos os objetos visíveis e bitmaps do objeto UserForm. PrintForm também imprime gráficos adicionados a um objeto UserForm.

A impressora utilizada pelo PrintForm é determinada pelas definições do Painel de controle do sistema operacional.


Método Show

Exibe um objeto UserForm.

Sintaxe

[object.]Show modal

A sintaxe do método Show tem as seguintes partes:

Parte	Descrição
object	Opcional. Uma expressão de objeto que resulta em um objeto na lista Aplica-se a. Se object for omitido, o UserForm associado ao módulo UserForm ativo será assumido como object.
modal	Opcional. Valor booleano que determina se o UserForm é em janela restrita ou sem janela restrita.
Definições

As definições para modal são:

Constante	Valor	Descrição
vbModal	1	UserForm é em janela restrita. Padrão.
vbModeless	0	UserForm é sem janela restrita.
Comentários

Se o objeto especificado não estiver carregado quando o método Show for chamado, o Visual Basic o carrega automaticamente.

Observação   No Microsoft Office 97, se um UserForm for definido para ser exibido como sem janela restrita, ele provoca um erro de tempo de execução; os UserForms do Office 97 são sempre em janela restrita.

Quando um UserForm for sem janela restrita, o código subseqüente será executado como for encontrado. Os formulários sem janela restrita não aparecem na barra de tarefas e não estão na ordem de tabulação da janela.

Observação   Talvez você perca dados associados a um UserForm sem janela restrita se fizer uma alteração no projeto UserForm que o faça ser recompilado, por exemplo, removendo um módulo de código.

Quando um UserForm for em janela restrita, o usuário deve responder antes de utilizar qualquer outra parte do aplicativo. Nenhum código subseqüente é executado até que o UserForm seja ocultado ou descarregado. Embora outros formulários no aplicativo sejam desativados quando um UserForm é exibido, os outros aplicativos não o são.


Instrução Unload

Remove um objeto da memória.

Sintaxe

Unload object

O espaço reservado object necessário representa uma expressão de objeto que é avaliada para um objeto na lista Aplica-se a.

Comentários

Quando um objeto é descarregado, ele é removido da memória e toda a memória associada com o objeto é recuperada. Até ser substituído na memória novamente, utilizando a instrução Load, um usuário não pode interagir com um objeto e o objeto não pode ser manipulado de modo programado.


Método WhatsThisMode

Faz o ponteiro do mouse ser alterado para o ponteiro O que é isto? e prepara o aplicativo para exibir Ajuda em um objeto selecionado. Este método existe no Macintosh, porém não há funcionalidade do ponteiro.

Sintaxe

object.WhatsThisMode

O espaço reservado object representa uma expressão de objeto que resulta em um objeto na lista Aplica-se a. Se o object é omitido, o UserForm com o foco é assumido para ser o object.

Comentários

Executar o método WhatsThisMode coloca o aplicativo no mesmo estado que clicar o botão O que é isto? na barra de título. O ponteiro do mouse é alterado para o ponteiro O que é isto?. Quando o usuário clica em um objeto, a propriedade WhatsThisHelpID do objeto clicado é utilizada para chamar a Ajuda sensível ao contexto.


Objeto UserForm
Objeto UserForm, conjunto UserForms

Um objeto UserForm é uma janela ou caixa de diálogo que constitui parte da interface de usuário de um aplicativo.

O conjunto UserForms é um conjunto cujos elementos representam cada UserForm carregado em um aplicativo. O conjunto UserForms possui uma propriedade Count, uma propriedade Item e um método Add. Count especifica o número de elementos no conjunto; Item (o membro padrão) especifica um membro específico do conjunto e Add coloca um novo elemento UserForm no conjunto.

Sintaxe

UserForm

UserForms[.Item](index)

O espaço reservado index representa um inteiro com um intervalo de 0 a UserForms.Count – 1. Item é o membro padrão do conjunto UserForms e não precisa ser especificado.

Comentários

Você pode usar o conjunto UserForms para percorrer repetidamente todos os formulários de usuário carregados em um aplicativo. Ela identifica uma variável global intrínseca chamada UserForms. Você pode passar UserForms(index) para uma função cujo argumento é especificado como uma classe UserForm.

Formulários de usuário possuem propriedades que determinam a aparência, como posição, tamanho e cor, e os aspectos de seu comportamento.

Os formulários de usuário também podem responder a eventos inicializados pelo usuário ou ativados pelo sistema. Por exemplo, você pode escrever código no procedimento de evento Initialize do UserForm para inicializar variáveis de nível de módulo antes que o UserForm seja exibido.

Além de propriedades e eventos, você pode usar métodos para manipular os formulários de usuário usando código. Por exemplo, você pode usar o método Move para alterar a localização e o tamanho de um UserForm.

Ao criar formulários de usuário, especifique a propriedade BorderStyle para definir bordas e especifique a propriedade Caption para colocar texto na barra de título. No código, você pode usar os métodos Hide e Show para tornar um UserForm invisível ou visível em tempo de execução.

UserForm é um tipo de dados Object. Você pode declarar variáveis como tipo UserForm antes de defini-las para uma ocorrência de um tipo UserForm declarado em tempo de criação. Da mesma forma, você pode passar um argumento para um procedimento como o tipo UserForm. Você pode criar múltiplas ocorrências de formulários de usuário em código usando a palavra-chave New nas instruções Dim, Set e Static.

Você pode acessar o conjunto de controles em um UserForm usando o conjunto Controls. Por exemplo, para ocultar todos os controles em um UserForm, utilize código semelhante ao seguinte:

For Each Control in UserForm1.Controls

Control.Visible = False

Next Control


Exemplo da propriedade StartUpPosition

O exemplo a seguir utiliza a instrução Load e o método Show no evento Click do UserForm1 para carregar o UserForm2 com a propriedade StartUpPosition definida como 3 (a posição padrão do Windows). O método Show torna, então, o UserForm2 visível.

Private Sub UserForm_Click()

Load UserForm2

UserForm2.StartUpPosition = 3

UserForm2.Show

End Sub


Propriedade StartUpPosition

Retorna ou define um valor especificando a posição de um UserForm quando ele aparece pela primeira vez.

Você pode utilizar uma das quatro definições para StartUpPosition:

Definição	Valor	Descrição
Manual	0	Sem definição inicial específica.
CenterOwner	1	Centraliza no item ao qual o UserForm pertence.
CenterScreen	2	Centraliza na tela inteira.
WindowsDefault	3	Posiciona no canto superior esquerdo da tela.
Comentários

Você pode definir a propriedade StartUpPosition de modo programado ou a partir da janela Propriedades.


Propriedade WhatsThisButton

Retorna um valor Boolean que determina se o botão O que é isto? aparece na barra de títulos de um objeto UserForm. Somente leitura em tempo de execução. Esta propriedade não se aplica ao Macintosh.

Comentários

As definições para a propriedade WhatsThisButton são:

Definição	Descrição
True	Ativa a exibição do botão O que é isto?.
False	(Padrão) Desativa a exibição do botão O que é isto? da Ajuda.
Comentários

A propriedade WhatsThisHelp deve ser True para que a propriedade WhatsThisButton seja True.


Propriedade WhatsThisHelp

Retorna um valor Boolean que determina se a Ajuda sensível ao contexto utiliza a janela pop-up fornecida pela Ajuda do Windows 95 ou a janela Ajuda principal. Somente leitura em tempo de execução. Esta propriedade não se aplica ao Macintosh.

Comentários

As definições para a propriedade WhatsThisHelp são:

Definição	Descrição
True	O aplicativo utiliza uma das técnicas de acesso O que é isto? para iniciar a Ajuda do Windows e carregar um tópico identificado pela propriedade WhatsThisHelpID.
False	(Padrão) O aplicativo utiliza a tecla F1 para iniciar a Ajuda do Windows e carregar o tópico identificado pela propriedade HelpContextID.
Comentários

Existem duas técnicas de acesso para fornecer Ajuda O que é isto? em um aplicativo. A propriedade WhatsThisHelp deve ser definida para True para que qualquer uma destas técnicas funcione.

•	Fornecer um botão O que é isto? na barra de título de UserForm utilizando a propriedade WhatsThisButton. O ponteiro do mouse é alterado para o estado O que é isto? (seta com interrogação). O tópico exibido é identificado pela propriedade WhatsThisHelpID do controle que o usuário clicou.

•	Chamar o método WhatsThisMode de um UserForm. Isto produz o mesmo comportamento que clicar no botão O que é isto? sem utilizar um botão. Por exemplo, você pode chamar esse método a partir de um comando em um menu na barra de menus do aplicativo.


Propriedade ShowModal

Define um UserForm para ser em janela restrita ou sem janela restrita sua exibição. Somente leitura em tempo de execução.

Comentários

As definições para a propriedade ShowModal são:

Definição	Descrição
True	(Padrão) O UserForm é em janela restrita.
False	O UserForm é sem janela restrita.
Comentários

Quando um UserForm é em janela restrita, o usuário deve fornecer informações ou fechar o UserForm para que possa utilizar qualquer parte do aplicativo. Nenhum código subseqüente é executado até que o UserForm seja ocultado ou descarregado. Embora outros formulários no aplicativo sejam desativados quando um UserForm é exibido, os outros aplicativos não o são.

Quando o UserForm é sem janela restrita, o usuário pode visualizar outros formulários ou janelas sem precisar fechar o UserForm.

Os formulários sem janela restrita não aparecem na barra de tarefas e não estão na ordem de tabulação da janela.

Observação   Se tentar abrir o UserForm que possui uma propriedade ShowModal no Microsoft Office 97 você obterá um erro de tempo de execução porque o Office 97 exibe somente UserForms em janela restrita. O Office 97 ignora a propriedade ShowModal e exibe o UserForm em janela restrita.


Propriedade RightToLeft

Retorna um valor Boolean que indica a direção de exibição do texto e controla a aparência visual em um sistema bidirecional.

Comentários

As definições para a propriedade RightToLeft são:

Definição	Descrição
True	O controle está em execução em uma plataforma bidirecional, como Windows 95 arábico ou Windows 95 hebraico e a leitura do texto é feita da direita para a esquerda. O controle deve modificar seu comportamento, como colocar barras de rolagem verticais ao lado esquerdo de um texto ou caixa de listagem, colocar rótulos à direita de caixas de texto e assim por diante.
False	O controle deve agir como se estivesse em execução em uma plataforma não bidirecional, como Windows 95 inglês e a leitura do texto for feita da esquerda para a direita. Se o recipiente não implementar esta propriedade de ambiente, False será o valor padrão.
A propriedade RightToLeft retém informações de ambiente do Userform que propõem comportamento para controles contidos no UserForm. Esta propriedade é um Boolean que indica direção de exibição de texto e aparência visual de controles em sistemas bidirecionais. O padrão é False.


Palavra-chave não encontrada

Não é possível encontrar a palavra-chave selecionada na Ajuda do Visual Basic. Talvez a ortografia da palavra-chave esteja incorreta, muito ou pouco texto tenha sido selecionado ou a palavra sobre a qual você pediu ajuda não seja uma palavra-chave válida do Visual Basic.

A palavra-chave sobre a qual você deseja ajuda pode estar contida em uma biblioteca de objetos que não possui referência. Certifique-se de que as referências estão definidas para as bibliotecas de objetos adequadas em todos os objetos usados no seu código.

A maneira mais fácil de obter ajuda sobre uma palavra-chave específica é posicionar o ponto de inserção em qualquer lugar da palavra-chave e pressionar F1. Não é necessário selecionar a palavra-chave. Na verdade, se você selecionar somente uma parte da palavra-chave ou mais de uma palavra, a Ajuda não encontrará o que você está procurando.

O tópico da propriedade Value é exibido quando você pressiona F1 com o ponto de inserção entre o "a" e o "l" na palavra-chave Value, como é mostrado no seguinte exemplo.

Worksheets(1).Range ("A2").value=3.14159

Para utilizar Search da Ajuda interna, clique em Ajuda do Microsoft Visual Basic no menu Ajuda.


Collection (Pesquisador de objeto)

O módulo Collection contém procedimentos utilizados para executar operações no objeto Collection. Essas constantes podem ser utilizadas em qualquer lugar em seu código.

Para obter Ajuda em um procedimento específico

1.	Selecione o procedimento a partir da lista Membros de 'Collection'.

2.	Clique no botão [image].


ColorConstants (Pesquisador de objeto)

O módulo ColorConstants contém constantes de cor predefinidas. Essas constantes podem ser utilizadas em qualquer lugar em seu código.

Para obter Ajuda sobre uma constante específica

1.	Selecione a constante a partir da lista Membros de 'ColorConstants'.

2.	Clique no botão [image].


Constants (Pesquisador de objeto)

O módulo Constants contém constantes variadas. Essas constantes podem ser utilizadas em qualquer lugar em seu código.

Para obter Ajuda sobre uma constante específica

1.	Selecione a constante a partir da lista Membros de 'Constants'.

2.	Clique no botão [image].


Conversion (Pesquisador de objeto)

O módulo Conversion contém os procedimentos utilizados para executar várias operações de conversão. Essas constantes podem ser utilizadas em qualquer lugar em seu código.

Para obter Ajuda em um procedimento específico

1.	Selecione o procedimento a partir da lista Membros de 'Conversion'.

2.	Clique no botão [image].

Observação   Ao utilizar variáveis Variant, as conversões de tipo de dados explícitas não são necessárias.


DateTime (Pesquisador de objeto)

O módulo DateTime contém os procedimentos e as propriedades utilizados em operações de data e hora. Essas constantes podem ser utilizadas em qualquer lugar em seu código.

Para obter Ajuda em um procedimento ou propriedade específica

1.	Selecione o procedimento a partir da lista Membros de 'DateTime'.

2.	Clique no botão [image].


ErrObject (Pesquisador de objeto)

O módulo ErrObject contém propriedades e procedimentos utilizados para identificar e tratar erros de tempo de execução utilizando o objeto Err. Essas constantes podem ser utilizadas em qualquer lugar em seu código.

Para obter Ajuda em uma propriedade ou procedimento específico

1.	Selecione a propriedade ou o procedimento a partir da lista Membros de 'ErrObject'.

2.	Clique no botão [image].


FileSystem (Pesquisador de objeto)

O módulo FileSystem contém os procedimentos utilizados para executar operações de arquivo, de diretório ou pasta, e de sistema. Essas constantes podem ser utilizadas em qualquer lugar em seu código.

Para obter Ajuda em um procedimento específico

1.	Selecione o procedimento a partir da lista Membros de 'FileSystem'.

2.	Clique no botão [image].


Financial (Pesquisador de objeto)

O módulo Financial contém procedimentos utilizados para executar operações financeiras. Essas constantes podem ser utilizadas em qualquer lugar em seu código.

Para obter Ajuda em um procedimento específico

1.	Selecione o procedimento a partir da lista Membros de 'Financial'.

2.	Clique no botão [image].


Global (Pesquisador de objeto)

O módulo Global contém procedimentos e propriedades utilizados para executar operações no objeto UserForm. Essas constantes podem ser utilizadas em qualquer lugar em seu código.

Para obter Ajuda em uma propriedade ou procedimento específico

1.	Selecione o procedimento a partir da lista Membros de 'Global'.

2.	Clique no botão [image].


Information (Pesquisador de objeto)

O módulo Information contém os procedimentos utilizados para retornar, testar ou verificar informações. Essas constantes podem ser utilizadas em qualquer lugar em seu código.

Para obter Ajuda em um procedimento específico

1.	Selecione o procedimento a partir da lista Membros de 'Information'.

2.	Clique no botão [image].


Interaction (Pesquisador de objeto)

O módulo Interaction contém procedimentos utilizados para interagir com objetos, aplicativos e sistemas. Essas constantes podem ser utilizadas em qualquer lugar em seu código.

Para obter Ajuda em um procedimento específico

1.	Selecione o procedimento a partir da lista Membros de 'Interaction'.

2.	Clique no botão [image].


KeycodeConstants (Pesquisador de objeto)

O módulo KeyCodeConstants contém constantes de código de tecla predefinidas que podem ser utilizadas em qualquer lugar em seu código.

Para obter Ajuda sobre uma constante específica

1.	Selecione a constante a partir da lista Membros de 'KeyCodeConstants'.

2.	Clique no botão [image].


Math (Pesquisador de objeto)

O módulo Math contém procedimentos utilizados para executar operações matemáticas. Essas constantes podem ser utilizadas em qualquer lugar em seu código.

Para obter Ajuda em um procedimento específico

1.	Selecione o procedimento a partir da lista Membros de 'Math'.

2.	Clique no botão [image].


String (Pesquisador de objeto)
Strings (Pesquisador de objeto)

O módulo Strings contém procedimentos utilizados para executar operações de seqüência de caracteres. Essas constantes podem ser utilizadas em qualquer lugar em seu código.

Para obter Ajuda em um procedimento específico

1.	Selecione o procedimento a partir da lista Membros de 'Strings'.

2.	Clique no botão [image].


SystemColorConstants (Pesquisador de objeto)

O módulo SystemColorConstants contém constantes que identificam várias partes da interface gráfica de usuário. Essas constantes podem ser utilizadas em qualquer lugar em seu código.

Para obter Ajuda sobre uma constante específica

1.	Selecione a constante a partir da lista Membros de 'SystemColorConstants'.

2.	Clique no botão [image].


VbAppWinStyle (Pesquisador de objeto)

A enumeração VbAppWinStyle contém constantes utilizadas pela função Shell para controlar o estilo de uma janela do aplicativo. Essas constantes podem ser utilizadas em qualquer lugar em seu código.

Para obter Ajuda sobre uma constante específica

1.	Selecione a constante a partir da lista Membros de 'VbAppWinStyle'.

2.	Clique no botão [image].


VbCalendar (Pesquisador de objeto)

A enumeração VbCalendar contém constantes utilizadas para determinar o tipo de calendário utilizado pelo Visual Basic. Essas constantes podem ser utilizadas em qualquer lugar em seu código.

Para obter Ajuda sobre uma constante específica

1.	Selecione a constante a partir da lista Membros de 'VbCalendar'.

2.	Clique no botão [image].


VbCompareMethod (Pesquisador de objeto)

A enumeração VbCompareMethod contém constantes utilizadas para determinar a maneira como as seqüências de caracteres são comparadas ao utilizar as funções Instr e StrComp. Essas constantes podem ser utilizadas em qualquer lugar em seu código.

Para obter Ajuda sobre uma constante específica

1.	Selecione a constante a partir da lista Membros de 'VbCompareMethod'.

2.	Clique no botão [image].


VbDayOfWeek (Pesquisador de objeto)

A enumeração VbDayOfWeek contém constantes utilizadas para identificar dias específicos da semana ao utilizar as funções DateDiff, DatePart e Weekday. Essas constantes podem ser utilizadas em qualquer lugar em seu código.

Para obter Ajuda sobre uma constante específica

1.	Selecione a constante a partir da lista Membros de 'VbDayOfWeek'.

2.	Clique no botão [image].


VbFileAttribute (Pesquisador de objeto)

A enumeração VbFileAttribute contém constantes utilizadas para identificar atributos de arquivo utilizados nas funções Dir, GetAttr e SetAttr. Essas constantes podem ser utilizadas em qualquer lugar em seu código.

Para obter Ajuda sobre uma constante específica

1.	Selecione a constante a partir da lista Membros de 'VbFileAttribute'.

2.	Clique no botão [image].


VbFirstWeekOfYear (Pesquisador de objeto)

A enumeração VbFirstWeekOfYear contém constantes utilizadas para identificar como a primeira semana de um ano é determinada ao utilizar as funções DateDiff and DatePart. Essas constantes podem ser utilizadas em qualquer lugar em seu código.

Para obter Ajuda sobre uma constante específica

1.	Selecione a constante a partir da lista Membros de 'VbFirstWeekOfYear'.

2.	Clique no botão [image].


VbIMEStatus (Pesquisador de objeto)

Disponível somente em versões para o Extremo Oriente, a enumeração VbIMEStatus contém constantes utilizadas para identificar o Editor de método de entrada (IME, Input Method Editor) ao utilizar a função IMEStatus. Essas constantes podem ser utilizadas em qualquer lugar em seu código.

Para obter Ajuda sobre uma constante específica

1.	Selecione a constante a partir da lista Membros de 'VbIMEStatus'.

2.	Clique no botão [image].


VbMsgBoxResult (Pesquisador de objeto)

A enumeração VbMsgBoxResult contém constantes utilizadas para identificar qual botão foi pressionado em uma caixa de mensagem exibida utilizando a função MsgBox. Essas constantes podem ser utilizadas em qualquer lugar em seu código.

Para obter Ajuda sobre uma constante específica

1.	Selecione a constante a partir da lista Membros de 'VbMsgBoxResult'.

2.	Clique no botão [image].


VbMsgBoxStyle (Pesquisador de objeto)

A enumeração VbMsgBoxStyle contém constantes utilizadas para especificar o comportamento de uma caixa de mensagem, junto com símbolos e botões que nela aparecem, ao ser exibida utilizando a função MsgBox. Essas constantes podem ser utilizadas em qualquer lugar em seu código.

Para obter Ajuda sobre uma constante específica

1.	Selecione a constante a partir da lista Membros de 'VbMsgBoxStyle'.

2.	Clique no botão [image].


VbQueryClose (Pesquisador de objeto)

A enumeração VbQueryClose contém constantes utilizadas para identificar o que provocou a ocorrência do evento QueryClose. Essas constantes podem ser utilizadas em qualquer lugar em seu código.

Para obter Ajuda sobre uma constante específica

1.	Selecione a constante a partir da lista Membros de 'VbQueryClose'.

2.	Clique no botão [image].


VbStrConv (Pesquisador de objeto)

A enumeração VbStrConv contém constantes utilizadas para identificar o tipo de conversão de seqüência de caracteres a ser executada pela função StrConv. Essas constantes podem ser utilizadas em qualquer lugar em seu código.

Para obter Ajuda sobre uma constante específica

1.	Selecione a constante a partir da lista Membros de 'VbStrConv'.

2.	Clique no botão [image].


VbVarType (Pesquisador de objeto)

A enumeração VbVarType contém constantes utilizadas para identificar os vários tipos de dados que podem estar contidos em uma Variant. Estas constantes correspondem aos valores de retorno da função VarType e podem ser utilizadas em qualquer lugar em seu código.

Para obter Ajuda sobre uma constante específica

1.	Selecione a constante a partir da lista Membros de 'VbVarType'.

2.	Clique no botão [image].


VbTriState (Pesquisador de objeto)

A enumeração VbTriState define constantes utilizadas para identificar um dos três estados possíveis.

Para obter Ajuda sobre uma constante específica

1.	Selecione a constante a partir da lista Membros de 'VbTriState'.

2.	Clique no botão [image].


VbDateTimeFormat (Pesquisador de objeto)

A enumeração VbDateTimeFormat define constantes utilizadas para identificar como a data e a hora são formatadas.

Para obter Ajuda sobre uma constante específica

1.	Selecione a constante a partir da lista Membros de 'VbDateTimeFormat'.

2.	Clique no botão [image].


VbCallType (Pesquisador de objeto)

A enumeração VbCallType define constantes utilizadas para identificar o tipo de chamada utilizada pela função CallByName.

Para obter Ajuda sobre uma constante específica

1.	Selecione a constante a partir da lista Membros de 'VbCallType'.

2.	Clique no botão [image].


FormShowConstants (Pesquisador de objeto)

O módulo FormShowConstants contém constantes UserForm predefinidas. Essas constantes podem ser utilizadas em qualquer lugar em seu código.

Para obter Ajuda sobre uma constante específica

1.	Selecione a constante a partir da lista Membros de 'FormShowConstants'.

2.	Clique no botão [image].


Exemplo do objeto Collection

Este exemplo cria um objeto Collection (MyClasses) e, em seguida, cria uma caixa de diálogo na qual os usuários podem adicionar objetos ao conjunto. Para ver como isto funciona, escolha o comando Módulo de classe no menu Inserir e declare uma variável pública denominada NomeDaOcorrência de nível de módulo de Class1 (digite Public InstanceName) para conter o nome de cada ocorrência. Deixe o nome padrão como Class1. Copie e cole o código a seguir na seção Geral de outro módulo e, em seguida, inicie-o com a instrução ClassNamer em outro procedimento. (Este exemplo funciona somente com aplicativos host que ofereçam suporte a classes.)

Sub ClassNamer()

Dim MyClasses As New Collection	' Cria um objeto Collection.

Dim Num	' Contador para individualizar chaves.

Dim Msg As String	' Variável para conter seqüência de caracteres de aviso.

Dim TheName, MyObject, NameList	' Variants para conter informações.

Do

Dim Inst As New Class1	' Cria uma nova ocorrência da Class1.

Num = Num + 1	' Incrementa Num e, em seguida, obtém um nome.

Msg = "Insira um nome para este objeto". & Chr(13) _

 & "Pressione Cancelar para ver os nomes no conjunto".

TheName = InputBox(Msg, "Nomeie o conjunto de Items")

Inst.InstanceName = TheName	' Coloca o nome na ocorrência de

' objeto.

' Se o usuário inseriu o nome, adiciona-o ao conjunto.

If Inst.InstanceName <> "" Then

' Adiciona o objeto nomeado ao conjunto.

MyClasses.Add item := Inst, key := CStr(Num)

End If

' Limpa a referência atual em preparação para a seguinte.

Set Inst = Nothing

Loop Until TheName = ""

For Each MyObject In MyClasses	' Cria a lista de nomes.

NameList = NameList & MyObject.InstanceName & Chr(13)

Next MyObject

' Exibe a lista de nomes em uma caixa de mensagem.

MsgBox NameList, , "Nomes de ocorrência no conjunto MyClasses"

For Num = 1 To MyClasses.Count	' Remove o nome do conjunto.

MyClasses.Remove 1	' Como os conjuntos são reindexados

' automaticamente, remove o primeiro

Next	' membro de cada iteração.

End Sub


Exemplo do objeto Err

Este exemplo utiliza as propriedades do objeto Err na construção de uma caixa de diálogo de mensagem de erro. Observe que se você utilizar primeiro o método Clear, ao gerar um erro do Visual Basic com o método Raise, os valores padrão do Visual Basic se tornarão as propriedades do objeto Err.

Dim Msg

' Se ocorrer um erro, construa uma mensagem de erro

On Error Resume Next	' Adia o tratamento de erro.

Err.Clear

Err.Raise 6	' Gera um erro "Sobrecarga".

' Verifica se há erro e, em seguida, exibe a mensagem.

If Err.Number <> 0 Then

Msg = "Erro # " & Str(Err.Number) & " foi gerado por " _

& Err.Source & Chr(13) & Err.Description

MsgBox Msg, , "Erro", Err.Helpfile, Err.HelpContext

End If


Objeto Collection

Um objeto Collection é um conjunto ordenado de itens que aos quais se pode fazer referência como uma unidade.

Comentários

O objeto Collection é uma forma simples de se fazer referência a um grupo relacionado de itens como um objeto único. Os itens, ou membros, de um conjunto precisam ser relacionados somente pelo fato de existirem no conjunto. Os membros de um conjunto não precisam compartilhar o mesmo tipo de dados.

Um conjunto pode ser criado da mesma forma como os outros objetos são criados. Por exemplo:

Dim X As New Collection

Depois de criado um conjunto, os membros podem ser adicionados usando o método Add e removidos usando o método Remove. Os membros específicos podem ser retornados do conjunto usando o método Item, enquanto toda o conjunto pode ser iterado usando a instrução For Each...Next.


Objeto Debug

O objeto Debug envia a saída para a janela Imediata durante o tempo de execução.


Objeto Err

Contém informações sobre erros em tempo de execução.

Comentários

As propriedades do objeto Err são definidas pelo gerador de um erro — Visual Basic, um objeto ou o programador.

A propriedade padrão do objeto Err é Number. Como a propriedade padrão pode ser representada pelo nome do objeto Err, o código escrito anteriormente usando a função Err ou a instrução Err não precisa ser modificado.

Quando ocorre um erro em tempo de execução, as propriedades do objeto Err são preenchidas com informações que identificam com exclusividade o erro e a informação que podem ser usados para tratá-lo. Para gerar um erro em tempo de execução em seu código, use o método Raise.

As propriedades do objeto Err são redefinidas como zero ou seqüências de comprimento zero ("") após uma instrução Exit Sub, Exit Function, Exit Property ou Resume Next dentro de uma rotina de tratamento de erro. Usar qualquer formulário da instrução Resume fora de uma rotina de tratamento de erro não redefine as propriedades do objeto Err. O método Clear pode ser usado para redefinir Err de forma explícita.

Use o método Raise, em vez da instrução Error, para gerar erros em tempo de execução para erros de sistema e módulos de classe. Usar o método Raise em outro código depende da riqueza das informações que você deseja retornar.

O objeto Err é um objeto intrínseco com escopo global. Não há necessidade de se criar uma ocorrência dele em seu código.


Exemplo do operador ^

Este exemplo usa o operador ^ para elevar um número à potência de um expoente.

Dim MyValue

MyValue = 2 ^ 2	' Retorna 4.

MyValue = 3 ^ 3 ^ 3	' Retorna 19683.

MyValue = (-5) ^ 3	' Retorna -125.


Exemplo do operador +

Este exemplo usa o operador + para adicionar números. O operador + também pode ser usado para concatenar seqüências de caracteres. Neste caso, para eliminar a ambigüidade, você deve usar o operador & em seu lugar. Se os componentes de uma expressão, criada com o operador +, incluírem tanto seqüências de caracteres como numéricas, será atribuído o resultado aritmético. Se os componentes forem exclusivamente seqüências de caracteres, essas seqüências serão concatenadas.

Dim MyNumber, Var1, Var2

MyNumber = 2 + 2	' Retorna 4.

MyNumber = 4257,04 + 98112	' Retorna 102369,04.

Var1 = "34": Var2 = 6	' Inicializar variáveis mistas.

MyNumber = Var1 + Var2	' Retorna 40.

Var1 = "34": Var2 = "6"	' Inicializar variáveis com seqüências de caracteres.

MyNumber = Var1 + Var2	' Retorna "346" (concatenação de seqüências de caracteres).


Exemplo do operador -

Este exemplo usa o operador - para calcular a diferença entre dois números.

Dim MyResult

MyResult = 4 - 2	' Retorna 2.

MyResult = 459,35 - 334,90	' Retorna 124,45.


Exemplo do operador *

Este exemplo usa o operador * para multiplicar dois números.

Dim MyValue

MyValue = 2 * 2	' Retorna 4.

MyValue = 459.35 * 334.90 	' Retorna 153836,315.


Exemplo do operador /

Este exemplo usa o operador / para executar divisão de ponto flutuante.

Dim MyValue

MyValue = 10 / 4	' Retorna 2,5.

MyValue = 10 / 3	' Retorna 3,333333.


Exemplo do operador \

Este exemplo usa o operador \ para executar a divisão de inteiros.

Dim MyValue

MyValue = 11 \ 4	' Retorna 2.

MyValue = 9 \ 3	' Retorna 3.

MyValue = 100 \ 3	' Retorna 33.


Exemplo do operador Mod

Este exemplo usa o operador Mod para dividir dois números e retornar somente o resto. Se algum dos números for de ponto flutuante, ele será primeiro arredondado para inteiro.

Dim MyResult

MyResult = 10 Mod 5	' Retorna 0.

MyResult = 10 Mod 3	' Retorna 1.

MyResult = 12 Mod 4,3	' Retorna 0.

MyResult = 12,6 Mod 5	' Retorna 3.


Exemplo do operador &

Este exemplo usa o operador & para forçar a concatenação de seqüências de caracteres.

Dim MyStr

MyStr = "Olá" & " Mundo"	' Retorna "Olá Mundo".

MyStr = "Verificação " & 123 & " Verificação"	' Retorna "Verificação 123 Verificação".


Exemplo de operadores de comparação

Este exemplo mostra vários usos dos operadores de comparação, que você utiliza para comparar expressões.

Dim MyResult, Var1, Var2

MyResult = (45 < 35)	' Retorna False.

MyResult = (45 = 45)	' Retorna True.

MyResult = (4 <> 3)	' Retorna True.

MyResult = ("5" > "4")	' Retorna True.

Var1 = "5": Var2 = 4	' Inicialize variáveis.

MyResult = (Var1 > Var2)	' Retorna True.

Var1 = 5: Var2 = Empty

MyResult = (Var1 > Var2)	' Retorna True.

Var1 = 0: Var2 = Empty

MyResult = (Var1 = Var2)	' Retorna True.


Exemplo do operador And

Este exemplo usa o operador And para executar uma conjunção lógica em duas expressões.

Dim A, B, C, D, MyCheck

A = 10: B = 8: C = 6: D = Null	' Inicialize variáveis.

MyCheck = A > B And B > C	' Retorna True.

MyCheck = B > A And B > C	' Retorna False.

MyCheck = A > B And B > D	' Retorna Null.

MyCheck = A And B	' Retorna 8 (comparação bit a bit).


Exemplo do operador Eqv

Este exemplo usa o operador Eqv para executar a equivalência lógica em duas expressões.

Dim A, B, C, D, MyCheck

A = 10: B = 8: C = 6: D = Null	' Inicialize variáveis.

MyCheck = A > B Eqv B > C	' Retorna True.

MyCheck = B > A Eqv B > C	' Retorna False.

MyCheck = A > B Eqv B > D	' Retorna Null.

MyCheck = A Eqv B	' Retorna -3 (comparação bit a bit).


Exemplo do operador Imp

Este exemplo usa o operador Imp para executar a implicação lógica em duas expressões.

Dim A, B, C, D, MyCheck

A = 10: B = 8: C = 6: D = Null	' Inicialize variáveis.

MyCheck = A > B Imp B > C	' Retorna True.

MyCheck = A > B Imp C > B	' Retorna False.

MyCheck = B > A Imp C > B	' Retorna True.

MyCheck = B > A Imp C > D	' Retorna True.

MyCheck = C > D Imp B > A	' Retorna Null.

MyCheck = B Imp A	' Retorna -1 (comparação bit a bit).


Exemplo do operador Not

Este exemplo usa o operador Not para executar a negação lógica em uma expressão.

Dim A, B, C, D, MyCheck

A = 10: B = 8: C = 6: D = Null	' Inicialize variáveis.

MyCheck = Not(A > B)	' Retorna False.

MyCheck = Not(B > A)	' Retorna True.

MyCheck = Not(C > D)	' Retorna Null.

MyCheck = Not A	' Retorna -11 (comparação bit a bit).


Exemplo do operador Or

Este exemplo usa o operador Or para executar a disjunção lógica em duas expressões.

Dim A, B, C, D, MyCheck

A = 10: B = 8: C = 6: D = Null	' Inicialize variáveis.

MyCheck = A > B Or B > C	' Retorna True.

MyCheck = B > A Or B > C	' Retorna True.

MyCheck = A > B Or B > D	' Retorna True.

MyCheck = B > D Or B > A	' Retorna Null.

MyCheck = A Or B	' Retorna 10 (comparação bit a bit).


Exemplo do operador Xor

Este exemplo usa o operador Xor para executar a exclusão lógica em duas expressões.

Dim A, B, C, D, MyCheck

A = 10: B = 8: C = 6: D = Null	' Inicialize variáveis.

MyCheck = A > B Xor B > C	' Retorna False.

MyCheck = B > A Xor B > C	' Retorna True.

MyCheck = B > A Xor C > B	' Retorna False.

MyCheck = B > D Xor A > B	' Retorna Null.

MyCheck = A Xor B	' Retorna 2 (comparação bit a bit).


Exemplo do operador Like

Este exemplo usa o operador Like para comparar uma seqüência de caracteres com um padrão.

Dim MyCheck

MyCheck = "aBBBa" Like "a*a"	' Retorna True.

MyCheck = "F" Like "[A-Z]"	' Retorna True.

MyCheck = "F" Like "[!A-Z]"	' Retorna False.

MyCheck = "a2a" Like "a#a"	' Retorna True.

MyCheck = "aM5b" Like "a[L-P]#[!c-e]"	' Retorna True.

MyCheck = "BAT123khg" Like "B?T*"	' Retorna True.

MyCheck = "CAT123khg" Like "B?T*"	' Retorna False.


Exemplo do operador Is

Este exemplo usa o operador Is para comparar duas referências a objeto. Os nomes de variáveis de objeto são genéricos e usados somente para fins ilustrativos.

Dim MyObject, YourObject, ThisObject, OtherObject, ThatObject, MyCheck

Set YourObject = MyObject	' Atribuir referências a objeto.

Set ThisObject = MyObject

Set ThatObject = OtherObject

MyCheck = YourObject Is ThisObject	' Retorna True.

MyCheck = ThatObject Is ThisObject	' Retorna False.

' Assumir MyObject <> OtherObject

MyCheck = MyObject Is ThatObject	' Retorna False.


Resumo de operador

Operadores	Descrição
Operadores aritméticos	Operadores usados para efetuar cálculos matemáticos.
Operadores de comparação	Operadores usados para efetuar comparações.
Operadores de concatenação	Operadores usados para combinar seqüências de caracteres.
Operadores lógicos	Operadores usados para efetuar operações lógicas.


Precedência de operador

Quando diversas operações ocorrem em uma expressão, cada parte é avaliada e resolvida em uma ordem predeterminada chamada precedência de operadores.

Quando as expressões contêm operadores oriundos de mais de uma categoria, os operadores aritméticos são avaliados em primeiro lugar, em seguida os operadores de comparação e, finalmente, os operadores lógicos. Todos os operadores de comparação apresentam a mesma precedência, ou seja, são avaliados da esquerda para a direita na ordem em que aparecem. Os operadores lógicos e os aritméticos são avaliados na ordem de precedência a seguir:

Aritméticos	De comparação	Lógicos
Exponenciação (^)	Igualdade (=)	Not
Negação (–)	Desigualdade (<>)	And
Multiplicação e divisão (*, /)	Menor que (<)	Or
Divisão de inteiros (\)	Maior que (>)	Xor
Módulo aritmético (Mod)	Menor que ou igual a (<=)	Eqv
Adição e subtração (+, –)	Maior que ou igual a (>=)	Imp
Concatenação de seqüências de caracteres (&)	Like Is
Quando a multiplicação e a divisão ocorrem ao mesmo tempo em uma expressão, cada operação é avaliada à medida que ela ocorre, da esquerda para a direita. Quando a adição e a subtração ocorrem ao mesmo tempo em uma expressão, cada operação é avaliada na ordem em que aparece, da esquerda para a direita. Parênteses podem ser usados para ignorar a ordem de precedência e forçar algumas partes da expressão a serem avaliadas antes de outras. As operações entre parênteses são sempre executadas antes daquelas externas a eles. Dentro dos parênteses, contudo, a precedência de operadores é mantida.

O operador de concatenação de seqüências de caracteres (&) não é um operador aritmético, mas segue todos os operadores aritméticos e precede todos os operadores de comparação.

O operador Like apresenta a mesma precedência de todos os operadores de comparação, mas é, na verdade, um operador de correspondência de padrão.

O operador Is é um operador de comparação de referência a objetos. Ele não compara objetos ou seus valores; somente verifica e determina se duas referências a objeto referem-se a um mesmo objeto.


Operadores aritméticos

Operador ^

Operador *

Operador /

Operador \

Operador Mod

Operador +

Operador -


Operadores de concatenação

Operador &

Operador +


Operadores lógicos

Operador And

Operador Eqv

Operador Imp

Operador Not

Operador Or

Operador Xor


Operador ^

Usado para elevar um número à potência de um expoente.

Sintaxe

result = number^exponent

A sintaxe do operador ^ possui as seguintes partes:

Parte	Descrição
result	Obrigatória; qualquer variável numérica.
number	Obrigatória; qualquer expressão numérica.
exponent	Obrigatória; qualquer expressão numérica.
Comentários

Um number pode ser negativo somente se exponent for um valor inteiro. Quando mais de uma exponenciação é efetuada, em uma única expressão, o operador ^ é avaliado à medida que é encontrado ,da esquerda para a direita.

Em geral, o tipo de dados de result é um Double ou um Variant contendo um Double. No entanto, se number ou exponent for uma expressão Null, result será Null.


Operador +

Usado para adicionar dois números.

Sintaxe

result = expression1+expression2

A sintaxe do operador + possui as seguintes partes:

Parte	Descrição
result	Obrigatória; qualquer variável numérica.
expression1	Obrigatória; qualquer expressão.
expression2	Obrigatória; qualquer expressão.
Comentários

Quando você usa o operador +, é possível não se poder determinar se ocorrerá a adição ou a concatenação de seqüências de caracteres. Use o operador & para a concatenação de forma a eliminar a ambigüidade e fornecer o  código de autodocumentação.

Se pelo menos uma expressão não for Variant, as seguintes regras se aplicarão:

Se	Então
Ambas as expressões são tipos de dados numéricos (Byte, Boolean, Integer, Long, Single, Double, Date, Currency ou Decimal)	Adiciona.
Ambas as expressões são String	Concatena.
Uma expressão for um tipo de dados numérico e a outra for qualquer Variant exceto Null	Adiciona.
Uma expressão for um String e a outra for qualquer Variant exceto Null	Concatena.
Uma expressão for um Variant Empty	Retorna a outra expressão inalterada como result.
Uma expressão for um tipo de dados numérico e a outra for um String	Ocorre um erro Tipos incompatíveis
Qualquer uma das expressões for Null	result é Null.
Se ambas as expressões forem Variant, as seguintes regras se aplicarão:

Se	Então
Ambas as expressões Variant forem numéricas	Adiciona.
Ambas as expressões Variant forem seqüências de caracteres	Concatena.
Uma expressão Variant for numérica e a outra for uma seqüência de caracteres	Adiciona.
Para uma adição aritmética simples, envolvendo somente expressões de tipos de dados numéricos, o tipo de dados de result é geralmente o mesmo da expressão mais precisa. A ordem de precisão, da menos para a mais precisa, é Byte, Integer, Long, Single, Double, Currency e Decimal. A seguir são apresentadas exceções a essa ordem:

Se	Então result será
Um Single e um Long forem adicionados,	um Double.
O tipo de dados de result for uma variante de Long, Single ou Date que ultrapasse o intervalo permitido,	convertido em uma variante de Double.
O tipo de dados de result for uma variante de Byte que ultrapasse o intervalo permitido,	convertido em uma variante de Integer.
O tipo de dados de result for uma variante de Integer que ultrapasse o intervalo permitido,	convertido em uma variante de Long.
Date for adicionado a qualquer tipo de dados,	um Date.
Se uma ou ambas as expressões forem Null, result será Null. Se ambas as expressões forem Empty, result será um Integer. No entanto, se somente uma expressão for Empty, a outra será retornada inalterada como result.

Observação   A ordem de precisão usada para adição e subtração não é a mesma a da multiplicação.


Operador -

Usado para encontrar a diferença entre dois números ou para indicar o valor negativo em uma expressão numérica.

Sintaxe 1

result = number1–number2

Sintaxe 2

–number

A sintaxe do operador – possui as seguintes partes:

Parte	Descrição
result	Obrigatória; qualquer variável numérica.
number	Obrigatória; qualquer expressão numérica.
number1	Obrigatória; qualquer expressão numérica.
number2	Obrigatória; qualquer expressão numérica.
Comentários

Na Sintaxe 1, o operador – é o operador aritmético de subtração usado para encontrar a diferença entre dois números. Na Sintaxe 2, o operador – é usado como operador de negação unário para indicar o valor negativo de uma expressão.

O tipo de dados de result é geralmente o mesmo da expressão mais precisa. A ordem de precisão, da menos para a mais precisa, é Byte, Integer, Long, Single, Double, Currency e Decimal. A seguir são apresentadas exceções a essa ordem:

Se	Então result será
A subtração envolver um Single e um Long,	convertido em um Double.
O tipo de dados de result for uma variante de Long, Single ou Date que ultrapasse o intervalo permitido,	convertido em um Variant que contém um Double.
O tipo de dados de result for uma variante de Byte que ultrapasse o intervalo permitido,	convertido em uma variante de Integer.
O tipo de dados de result for uma variante de Integer que ultrapasse o intervalo permitido,	convertido em uma variante de Long.
A subtração envolver um Date e qualquer outro tipo de dados,	um Date.
A subtração envolver duas expressões Date,	um Double.
Se uma ou ambas as expressões forem Null, result será Null. Se uma expressão for Empty, ela será tratada como 0.

Observação   A ordem de precisão usada para adição e subtração não é a mesma a da multiplicação.


Operador *

Usado para multiplicar dois números.

Sintaxe

result = number1*number2

A sintaxe do operador * possui as seguintes partes:

Parte	Descrição
result	Obrigatória; qualquer variável numérica.
number1	Obrigatória; qualquer expressão numérica.
number2	Obrigatória; qualquer expressão numérica.
Comentários

O tipo de dados de result é geralmente o mesmo da expressão mais precisa. A ordem de precisão, da menos para a mais precisa, é Byte, Integer, Long, Single, Currency, Double e Decimal. A seguir são apresentadas exceções a essa ordem:

Se	Então result será
A multiplicação envolver um Single e um Long,	convertido em um Double.
O tipo de dados de result for uma variante de Long, Single ou Date que ultrapasse o intervalo permitido,	convertido em um Variant contendo um Double.
O tipo de dados de result for uma variante de Byte que ultrapasse o intervalo permitido,	convertido em uma variante de Integer.
O tipo de dados de result for uma variante de Integer que ultrapasse o intervalo permitido,	convertido em uma variante de Long.
Se uma ou ambas as expressões forem Null, result será Null. Se uma expressão for Empty, ela será tratada como 0.

Observação   A ordem de precisão usada pela multiplicação não é a mesma usada pela adição e subtração.


Operador /

Usado para dividir dois números e retornar um resultado de ponto flutuante.

Sintaxe

result = number1/number2

A sintaxe do operador / possui as seguintes partes:

Parte	Descrição
result	Obrigatória; qualquer variável numérica.
number1	Obrigatória; qualquer expressão numérica.
number2	Obrigatória; qualquer expressão numérica.
Comentários

O tipo de dados de result é geralmente um Double ou uma variante Double. A seguir são apresentadas exceções a essa regra:

Se	Então result será
Ambas as expressões forem expressões Byte, Integer ou Single,	um Single, a menos que ultrapasse o intervalo permitido; nesse caso, um erro será gerado.
Ambas as expressões forem variantes de Byte, Integer ou Single,	uma variante de Single, a menos que ultrapasse o intervalo permitido; nesse caso, result será um Variant contendo um Double.
A divisão envolver um Decimal e qualquer outro tipo de dados,	um tipo de dados Decimal.
Se uma ou ambas as expressões forem Null, result será Null. Qualquer expressão que seja Empty será tratada como 0.


Operador \

Usado para dividir dois números e retornar um resultado inteiro.

Sintaxe

result = number1\number2

A sintaxe do operador \ possui as seguintes partes:

Parte	Descrição
result	Obrigatória; qualquer variável numérica.
number1	Obrigatória; qualquer expressão numérica.
number2	Obrigatória; qualquer expressão numérica.
Comentários

Antes de a divisão ser realizada, as expressões numéricas são arredondadas para expressões Byte, Integer ou Long.

Em geral, o tipo de dados de result é um Byte, uma variante Byte, um Integer, uma variante Integer, um Long ou uma variante Long, independentemente de result ser um número inteiro. Qualquer parte fracionária é truncada. No entanto, se qualquer expressão for Null, result será Null. Qualquer expressão que seja Empty será tratada como 0.


Operador Mod

Usado para dividir dois números e retornar somente o resto.

Sintaxe

result = number1 Mod number2

A sintaxe do operador Mod possui as seguintes partes:

Parte	Descrição
result	Obrigatória; qualquer variável numérica.
number1	Obrigatória; qualquer expressão numérica.
number2	Obrigatória; qualquer expressão numérica.
Comentários

O operador de módulo, ou resto, divide number1 por number2 (arredondando números de ponto flutuante para inteiros) e retorna somente o resto como result. Por exemplo, na expressão a seguir, A (result) é igual a 5.

A = 19 Mod 6.7

Geralmente, o tipo de dados de result é um Byte, uma variante Byte, um Integer, uma variante Integer, um Long ou uma Variant contendo um Long, independentemente de result ser um número inteiro ou não. Qualquer parte fracionária é truncada. No entanto, se qualquer expressão for Null, result será Null. Qualquer expressão que seja Empty será tratada como 0.


Operador &

Usado para forçar a concatenação de seqüências de caracteres de duas expressões.

Sintaxe

result = expression1 & expression2

A sintaxe do operador & possui as seguintes partes:

Parte	Descrição
result	Obrigatória; qualquer variável String ou Variant.
expression1	Obrigatória; qualquer expressão.
expression2	Obrigatória; qualquer expressão.
Comentários

Se uma expression não for uma seqüência de caracteres, será convertida para uma variante String. O tipo de dados de result é String se ambas as expressões forem expressões de seqüência; caso contrário, result será uma variante String. Se ambas as expressões forem Null, result será Null. No entanto, se somente uma expression for Null, essa expressão será tratada como uma seqüência de caracteres de comprimento zero ("") quando concatenada com outra expressão. Qualquer expressão que seja Empty é tratada também como uma seqüência de caracteres de comprimento zero.


Operadores de comparação

Usados para comparar expressões.

Sintaxe

result = expression1 comparisonoperator expression2

result = object1 Is object2

result = string Like pattern

Os operadores de comparação possuem as seguintes partes:

Parte	Descrição
result	Obrigatória; qualquer variável numérica.
expression	Obrigatória; qualquer expressão.
comparisonoperator	Obrigatória; qualquer operador de comparação.
object	Obrigatória; qualquer nome de objeto.
string	Obrigatória; qualquer expressão de seqüência.
pattern	Obrigatória; qualquer expressão de seqüência de caracteres ou intervalo de caracteres.
Comentários

A tabela a seguir contém uma lista dos operadores de comparação e as condições que determinam se  result é True, False ou Null:

Operador	True se	False se	Null se
< (Menor que)	expression1 < expression2	expression1 >= expression2	expression1 ou expression2 = Null
<= (Menor que ou igual a)	expression1 <= expression2	expression1 > expression2	expression1 ou expression2 = Null
> (Maior que)	expression1 > expression2	expression1 <= expression2	expression1 ou expression2 = Null
>= (Maior que ou igual a)	expression1 >= expression2	expression1 < expression2	expression1 ou expression2 = Null
= (Igual a)	expression1 = expression2	expression1 <> expression2	expression1 ou expression2 = Null
<> (Não igual a)	expression1 <> expression2	expression1 = expression2	expression1 ou expression2 = Null
Observação   Os operadores Is e Like apresentam uma funcionalidade de comparação específica que os diferencia dos operadores dessa tabela.

Ao comparar duas expressões, é possível não se poder determinar com facilidade se as expressões estão sendo comparadas como números ou como seqüências de caracteres. A tabela a seguir mostra como as expressões são comparadas ou o resultado quando uma das expressões não é um Variant:

Se	Então
Ambas as expressões são tipos de dados numéricos (Byte, Boolean, Integer, Long, Single, Double, Date, Currency ou Decimal)	Efetuam uma comparação numérica.
Ambas as expressões são String	Efetuam uma comparação de seqüência de caracteres.
Uma expressão é um tipo de dados numérico e a outra é um Variant que é, ou pode ser, um número	Efetuam uma comparação numérica.
Uma expressão é um tipo de dados numérico e a outra é um Variant de seqüência de caracteres que não pode ser convertido para um número	Ocorre um erro Tipos incompatíveis
Uma expressão é um String e a outra é qualquer Variant exceto Null	Efetuam uma comparação de seqüências de caracteres.
Uma expressão é Empty e a outra é um tipo de dados numérico	Efetuam uma comparação numérica, usando 0 como a expressão Empty.
Uma expressão é Empty e a outra é um String	Efetuam uma comparação de seqüências de caracteres, usando uma seqüência de caracteres de comprimento zero ("") como a expressão Empty.
Se tanto expression1 quanto expression2 são expressões Variant, seus tipos básicos determinam como serão comparadas. A tabela a seguir mostra como as expressões são comparadas ou o resultado da comparação, dependendo do tipo básico de Variant:

Se	Então
Ambas as expressões Variant forem numéricas	Efetuam uma comparação numérica.
Ambas as expressões Variant forem seqüências de caracteres	Efetuam uma comparação de seqüências de caracteres.
Uma expressão Variant for numérica e a outra for uma seqüência de caracteres	A expressão numérica é menor que a expressão de seqüência de caracteres.
Uma expressão Variant é Empty e a outra é numérica	Efetuam uma comparação numérica, usando 0 como a expressão Empty.
Uma expressão Variant é Empty e a outra é uma seqüência de caracteres	Efetuam uma comparação de seqüências de caracteres, usando uma seqüência de caracteres de comprimento zero ("") como a expressão Empty.
Ambas as expressões Variant são Empty	As expressões são iguais.
Quando um Single é comparado a um Double, o Double é arredondado à precisão de Single.

Se um Currency é comparado com um Single ou Double, Single ou Double é convertido para um Currency. Da mesma forma, quando um Decimal é comparado com um Single ou Double, o Single ou Double é convertido para um Decimal. Para Currency, qualquer valor fracionário menor que 0,0001 pode ser perdido; para Decimal, qualquer valor fracionário menor que 1E-28 pode ser perdido ou um erro de estouro pode ocorrer. Essa perda de valores fracionais pode fazer com que dois valores sejam considerados iguais quando na verdade não o são.


Operador And

Usado para efetuar uma conjunção lógica em duas expressões.

Sintaxe

result = expression1 And expression2

A sintaxe do operador And possui as seguintes partes:

Parte	Descrição
result	Obrigatória; qualquer variável numérica.
expression1	Obrigatória; qualquer expressão.
expression2	Obrigatória; qualquer expressão.
Comentários

Se ambas as expressões forem avaliadas como True, result será True. Se uma das expressões for avaliada como False, result será False. A tabela a seguir mostra como result é determinado:

Se expression1 for	E expression2 for	O result será
True	True	True
True	False	False
True	Nulo	Null
False	True	False
False	False	False
False	Null	False
Null	True	Null
Null	False	False
Null	Null	Null
O operador And também efetua uma comparação bit a bit, dos bits posicionados da mesma forma, em duas expressões numéricas e define o bit correspondente em result de acordo com a tabela a seguir:

Se o bit em expression1 for	E o bit em expression2 for	O result será
0	0	0
0	1	0
1	0	0
1	1	1


Operador Eqv

Usado para efetuar uma equivalência lógica em duas expressões.

Sintaxe

result = expression1 Eqv expression2

A sintaxe do operador Eqv possui as seguintes partes:

Parte	Descrição
result	Obrigatória; qualquer variável numérica.
expression1	Obrigatória; qualquer expressão.
expression2	Obrigatória; qualquer expressão.
Comentários

Se qualquer uma das expressões for Null, result também será Null. Se nenhuma das expressões for Null, result será determinado de acordo com a tabela a seguir:

Se expression1 for	E expression2 for	O result será
True	True	True
True	False	False
False	True	False
False	False	True
O operador Eqv executa uma comparação em nível de bit, dos bits posicionados da mesma forma, em duas expressões numéricas e define o bit correspondente em result de acordo com a tabela a seguir:

Se o bit em expression1 for	E o bit em expression2 for	O result será
0	0	1
0	1	0
1	0	0
1	1	1


Operador Imp

Usado para efetuar uma implicação lógica em duas expressões.

Sintaxe

result = expression1 Imp expression2

A sintaxe do operador Imp possui as seguintes partes:

Parte	Descrição
result	Obrigatória; qualquer variável numérica.
expression1	Obrigatória; qualquer expressão.
expression2	Obrigatória; qualquer expressão.
Comentários

A tabela a seguir mostra como result é determinado:

Se expression1 for	E expression2 for	O result será
True	True	True
True	False	False
True	Null	Null
False	True	True
False	False	True
False	Null	True
Null	True	True
Null	False	Null
Null	Null	Null
O operador Imp executa uma comparação em nível de bit dos bits posicionados da mesma forma em duas expressões numéricas e define o bit correspondente em result de acordo com a tabela a seguir:

Se o bit em expression1 for	E o bit em expression2 for	O result será
0	0	1
0	1	1
1	0	0
1	1	1


Operador Not

Usado para efetuar uma negação lógica em uma expressão.

Sintaxe

result = Not expression

A sintaxe do operador Not possui as seguintes partes:

Parte	Descrição
result	Obrigatória; qualquer variável numérica.
expression	Obrigatória; qualquer expressão.
Comentários

A tabela a seguir mostra como result é determinado:

Se expression for	Então result será
True	False
False	True
Null	Null
Além disso, o operador Not inverte os valores de bit de qualquer variável e define o bit correspondente em result de acordo com a tabela a seguir:

Se o bit em expression for	Então o bit em result será
o	1
1	0


Operador Or

Usado para efetuar uma disjunção lógica em duas expressões.

Sintaxe

result = expression1 Or expression2

A sintaxe do operador Or possui as seguintes partes:

Parte	Descrição
result	Obrigatória; qualquer variável numérica.
expression1	Obrigatória; qualquer expressão.
expression2	Obrigatória; qualquer expressão.
Comentários

Se uma ou ambas as expressões forem True, result será True. A tabela a seguir mostra como result é determinado:

Se expression1 for	E expression2 for	Então result será
True	True	True
True	False	True
True	Null	True
False	True	True
False	False	False
False	Null	Null
Null	True	True
Null	False	Null
Null	Null	Null
O operador Or também efetua uma comparação bit a bit, dos bits posicionados da mesma forma, em duas expressões numéricas e define o bit correspondente em result de acordo com a tabela a seguir:

Se o bit em expression1 for	E o bit em expression2 for	Então result será
0	0	0
0	1	1
1	0	1
1	1	1


Operador Xor

Usado para efetuar uma exclusão lógica em duas expressões.

Sintaxe

[result =] expression1 Xor expression2

A sintaxe do operador Xor possui as seguintes partes:

Parte	Descrição
result	Opcional; qualquer variável numérica.
expression1	Obrigatória; qualquer expressão.
expression2	Obrigatória; qualquer expressão.
Comentários

Se uma, e somente uma, das expressões for avaliada como True, result será True. No entanto, se qualquer uma das expressões for Null, result também será Null. Se nenhuma das expressões for Null, result será determinado de acordo com a tabela a seguir:

Se expression1 for	E expression2 for	Então result será
True	True	False
True	False	True
False	True	True
False	False	False
O operador Xor funciona tanto como um operador lógico quanto a nível de bit. Uma comparação bit a bit de duas expressões usando or exclusivo lógico para definir o resultado, como mostrado na tabela a seguir:

Se o bit em expression1 for	E o bit em expression2 for	Então result será
0	0	0
0	1	1
1	0	1
1	1	0


Operador Is

Usado para comparar duas variáveis de referência a objeto.

Sintaxe

result = object1 Is object2

A sintaxe do operador Is possui as seguintes partes:

Parte	Descrição
result	Obrigatória; qualquer variável numérica.
object1	Obrigatória; qualquer nome de objeto.
object2	Obrigatória; qualquer nome de objeto.
Comentários

Se object1 e object2 referem-se ao mesmo objeto, result será True; caso contrário, result será False. Duas variáveis podem se referir ao mesmo objeto de diversas formas.

No exemplo a seguir, A foi definido de forma a se referir ao mesmo objeto que B:

Set A = B

O exemplo a seguir faz com que A e B se refiram ao mesmo objeto que C:

Set A = C

Set B = C


Operador Like

Usado para comparar duas seqüências de caracteres.

Sintaxe

result = string Like pattern

A sintaxe do operador Like possui as seguintes partes:

Parte	Descrição
result	Obrigatória; qualquer variável numérica.
string	Obrigatória; qualquer expressão de seqüência.
pattern	Obrigatória; qualquer expressão de seqüência de caracteres que esteja de acordo com as convenções de correspondência de padrão descritas em ‘Comentários’.
Comentários

Se string corresponder a pattern, result será True; caso contrário, result será False. Se string ou pattern for Null, result será Null.

O comportamento do operador Like depende da instrução Option Compare. O método padrão de comparação de seqüências de caracteres para cada módulo é Option Compare Binary.

Option Compare Binary resulta em comparações de seqüências de caracteres baseadas em uma ordem de classificação derivada das representações binárias internas dos caracteres. A ordem de classificação é determinada pela página de código. No exemplo a seguir, uma ordem de classificação binária típica é apresentada:

A < B < E < Z < a < b < e < z < À < Ê < Ø < à < ê < ø

Option Compare Text resulta em comparações de seqüências de caracteres baseadas em uma ordem de classificação sem diferenciação de maiúsculas e minúsculas, textual, determinada pela localidade do seu sistema. Quando você classifica os mesmos caracteres utilizando Option Compare Text, o seguinte texto de ordem de classificação é produzido:

(A=a) < (À=à) < (B=b) < (E=e) < (Ê=ê) < (Z=z) < (Ø=ø)

A correspondência de padrão interna representa uma ferramenta versátil para comparações de seqüências de caracteres. Os recursos de correspondência de padrão permitem que você use caracteres curinga, listas de caracteres ou intervalos de caracteres, em qualquer combinação, para fazer a correspondência de seqüências de caracteres. A tabela a seguir mostra os caracteres permitidos em pattern e as respectivas correspondências:

Caracteres em pattern	Correspondem em string
?	Qualquer caractere único.
*	Zero ou mais caracteres.
#	Qualquer dígito único (0–9).
[charlist]	Qualquer caractere único em charlist.
[!charlist]	Qualquer caractere único que não esteja em charlist.
Um grupo de um ou mais caracteres (charlist) entre colchetes ([ ]) pode ser usado para corresponder a qualquer caractere único em string e pode incluir quase qualquer código de caractere, incluindo dígitos.

Observação   Para fazer a correspondência dos caracteres especiais colchete esquerdo ([), ponto de interrogação (?), sinal numérico (#) e asterisco (*), coloque-os entre colchetes. O colchete direito (]) não pode ser usado dentro de um grupo para corresponder a si próprio, mas pode ser usado fora de um grupo como um caractere individual.

Usando um hífen (–) para separar os limites superior e inferior do intervalo, charlist pode especificar um intervalo de caracteres. Por exemplo, [A-Z] resulta em uma correspondência se a posição do caractere correspondente em string contiver qualquer letra maiúscula no intervalo A–Z. Intervalos múltiplos são incluídos entre os colchetes, sem delimitadores.

O significado de um intervalo especificado depende da ordem dos caracteres válida em tempo de execução (como determinado por Option Compare e pela definição da localidade do sistema no qual o código está sendo executado). Usando o exemplo de Option Compare Binary, o intervalo [A–E] corresponde a A, B e E. Com Option Compare Text, [A–E] corresponde a A, a, À, à, B, b, E, e. O intervalo não corresponde a Ê ou ê porque caracteres acentuados situam-se após caracteres não acentuados na ordem de classificação.

Outras regras importantes para a correspondência de padrão incluem:

•	Um ponto de exclamação (!) no início de charlist significa que uma correspondência é realizada se qualquer caractere, com exceção daqueles em  charlist, for encontrado em string. Quando usado fora de colchetes, o ponto de exclamação corresponde a si mesmo.

•	Um hífen (–) pode aparecer tanto no início (após um ponto de exclamação, se este for usado) quanto no final de charlist, para corresponder a si mesmo. Em qualquer outro local, o hífen é usado para identificar um intervalo de caracteres.

•	Quando um intervalo de caracteres é especificado, estes devem aparecer em ordem de classificação crescente (do menor para o maior). [A-Z] é um padrão válido, mas [Z-A] não o é.

•	A seqüência de caracteres [] é considerada uma seqüência de caracteres de comprimento zero ("").

Em alguns idiomas, existem caracteres especiais no alfabeto que representam dois caracteres separados. Por exemplo, diversos idiomas usam o caractere "æ" para representar os caracteres "a" e "e", quando aparecem juntos. O operador Like reconhece a equivalência entre o caractere especial único e os dois caracteres individuais.

Quando um idioma, que usa um caractere especial, é especificado nas definições de localidade do sistema, uma ocorrência do caractere especial único em pattern ou string corresponde à seqüência de dois caracteres equivalentes na outra seqüência de caracteres. Da mesma forma, um caractere especial único em pattern entre colchetes (sozinho, em uma lista ou em um intervalo) corresponde à seqüência de dois caracteres equivalente em string.


Exemplo da propriedade Count

Este exemplo usa a propriedade Count do objeto Collection para especificar quantas iterações são necessárias para remover todos os elementos da coleção MyClasses. Quando as coleções são indexadas numericamente, a base é 1 por padrão. Como as coleções são reindexadas automaticamente quando é feita uma remoção, o código a seguir remove o primeiro membro em cada iteração.

Dim Num, MyClasses

For Num = 1 To MyClasses.Count	' Remove o nome do conjunto.

MyClasses.Remove 1	' Índices numéricos da coleção padrão

Next	' começam em 1.


Exemplo da propriedade Description

Este exemplo atribui uma mensagem definida pelo usuário à propriedade Description do objeto Err.

Err.Description = "Não foi possível acessar um objeto necessário " _

& "para esta operação."


Exemplo da propriedade HelpContext

Este exemplo usa a propriedade HelpContext do objeto Err para mostrar o tópico da Ajuda do Visual Basic relativo ao erro Estouro.

Dim Msg

Err.Clear

On Error Resume Next

Err.Raise 6 ' Gerar o erro "Estouro".

If Err.Number <> 0 Then

Msg = "Pressione F1 ou HELP para ver " & Err.HelpFile & " o tópico para" & _

" o seguinte HelpContext: " & Err.HelpContext

MsgBox Msg, , "Erro: " & Err.Description, Err.HelpFile, _

Err.HelpContext

End If


Exemplo da propriedade HelpFile

Este exemplo usa a propriedade HelpFile do objeto Err para iniciar o sistema de Ajuda. Como padrão, a propriedade HelpFile contém o nome do arquivo de Ajuda do Visual Basic.

Dim Msg

Err.Clear

On Error Resume Next	' Suprimir os erros por finalidade demonstrativa.

Err.Raise 6	' Gerar o erro "Estouro".

Msg = "Pressione F1 ou HELP para ver " & Err.HelpFile & _

" o tópico relativo a este erro"

MsgBox Msg, , "Erro: " & Err.Description,Err.HelpFile, Err.HelpContext


Exemplo da propriedade LastDLLError

Quando colado em um módulo UserForm, o código a seguir ocasiona a tentativa de chamar uma função DLL. A chamada falha porque o argumento que é passado (um indicador nulo) gera um erro e, em qualquer evento, a SQL não pode ser cancelada se não estiver sendo executada. O código seguinte à chamada verifica o retorno da chamada e, em seguida, é impresso na propriedade LastDLLError do objeto Err para revelar o código do erro. Em sistemas sem DLLs, LastDLLError sempre retornará zero.

 Private Declare Function SQLCancel Lib "ODBC32.dll" _

 (ByVal hstmt As Long) As Integer

Private Sub UserForm_Click()

Dim RetVal

' Chamar com argumento inválido.

RetVal = SQLCancel(myhandle&)

' Procurar pelo código de erro SQL.

If RetVal = -2 Then

'Exibir o código de informações.

MsgBox "O código do erro é :" & Err.LastDllError

    End If

End Sub


Exemplo da propriedade Number

O primeiro exemplo ilustra um uso típico da propriedade Number em uma rotina de tratamento de erros. O segundo exemplo examina a propriedade Number do objeto Err para determinar se um erro retornado por um objeto de Automação foi definido pelo objeto ou se foi mapeado para um erro definido pelo Visual Basic. Observe que a constante vbObjectError é um número negativo muito grande que um objeto adiciona ao seu próprio código de erro, para indicar que o erro é definido pelo servidor. Portanto, subtraí-lo de Err.Number o exclui do resultado. Se o erro for definido pelo objeto, o número base será deixado em MyError, que é exibido em uma caixa de mensagem junto com a fonte original do erro. Se Err.Number representa um erro do Visual Basic, então o número do erro do Visual Basic é exibido na caixa de mensagem.

' Uso típico da propriedade Number

Sub test()

On Error GoTo out

Dim x, y

x = 1 / y	' Criar o erro de divisão por zero

Exit Sub

out:

MsgBox Err.Number

MsgBox Err.Description

' Procurar pelo erro de divisão por zero

If Err.Number = 11 Then

y = y + 1

End If

Resume

End Sub

' Usando a propriedade Number com um erro de um

' objeto Automation

Dim MyError, Msg

' Primeiro exclua a constante adicionada pelo objeto para indicar um dos

' seus próprios erros.

MyError = Err.Number - vbObjectError

' Se você subtrair a constante vbObjectError e o número continuar

' no intervalo 0-65,535, trata-se de um código de erro definido pelo objeto.

If MyError > 0 And MyError < 65535 Then

Msg = "O objeto que você acessou atribuiu este número ao erro: " _

 	& MyError & ". O erro foi originado por: " _

& Err.Source & ". Pressione F1 para ver o tópico da Ajuda que deu origem".

' Caso contrário, é um número de erro do Visual Basic.

Else

Msg = "Este erro (# " & Err.Number & ") é um número de erro" & _

" Visual Basic. Pressione o botão Ajuda ou F1 para obter o " _

& "tópico da Ajuda do Visual Basic sobre este erro."

End If

MsgBox Msg, , "Erro de objeto", Err.HelpFile, Err.HelpContext


Exemplo da propriedade Source

Este exemplo atribui a identificação programática de um objeto de Automação criado no Visual Basic à variável MyObjectID e, em seguida, o atribui à propriedade Source do objeto Err quando gera um erro com o método Raise. Quando estiver tratando de erros, você não deve usar a propriedade Source (nem nenhuma propriedade Err diferente de Number) programaticamente. O único uso válido de propriedades diferentes de Number é a exibição de informações ricas para um usuário final nos casos em que você não conseguir tratar um erro. O exemplo assume que App e MyClass são referências válidas.

Dim MyClass, MyObjectID, MyHelpFile, MyHelpContext

' Um objeto do tipo MyClass gera um erro e preenche todas as propriedades do objeto Err,

' inclusive Source, que recebe MyObjectID, que é uma

' combinação da propriedade Title do objeto App e da

' propriedade Name do objeto MyClass.

MyObjectID = App.Title & "." & MyClass.Name

Err.Raise	Number := vbObjectError + 894, Source := MyObjectID, _

Description := "Não foi possível completar a sua tarefa", _

HelpFile := MyHelpFile, HelpContext := MyHelpContext


Propriedade Calendar

Retorna ou define um valor especificando o tipo de calendário a ser usado com o seu projeto.

Você pode usar uma das duas definições para Calendar:

Definição	Valor	Descrição
vbCalGreg	0	Usa o calendário Gregoriano (padrão).
vbCalHijri	1	Usa o calendário Hijri.
Comentários

Você pode definir apenas a propriedade Calendar de forma programática. Por exemplo, para usar o calendário Hijri, utilize:

Calendar = vbCalHijri


Propriedade Count (Visual Basic for Applications)
Propriedade Count

Retorna um Long (número inteiro longo) que contém o número de objetos de uma coleção. Somente leitura.


Propriedade Description (Visual Basic for Applications)
Propriedade Description

Retorna ou define uma expressão de seqüência, que contém uma seqüência de caracteres descritiva associada a um objeto. Leitura/gravação.

Para o objeto Err, retorna ou define uma seqüência descritiva associada a um erro.

Comentários

A definição da propriedade Description consiste em uma breve descrição do erro. Use essa propriedade para alertar o usuário sobre um erro que você não pode ou não deseja tratar. Quando gerar um erro definido pelo usuário, atribua uma breve descrição do erro à propriedade Description. Se Description não estiver preenchida e o valor de Number corresponder a um erro em tempo de execução do Visual Basic, a seqüência retornada pela função Error será colocada em Description, quando o erro for gerado.


Propriedade HelpContext  (Visual Basic for Applications)
Propriedade HelpContext

Retorna ou define uma expressão de seqüência contendo a ID do contexto, para um tópico em um arquivo de Ajuda. Leitura/gravação.

Comentários

A propriedade HelpContext é usada para exibir automaticamente o tópico de Ajuda especificado na propriedade HelpFile. Se tanto HelpFile quanto HelpContext estiverem vazios, o valor de Number será marcado. Se Number corresponder a um valor de erro em tempo de execução do Visual Basic, a ID de contexto da Ajuda do Visual Basic para o erro será usada. Se o valor de Number não corresponder a um erro do Visual Basic, a tela de conteúdo do arquivo de Ajuda do Visual Basic será exibida.

Observação   Você deve escrever rotinas de tratamento de erros típicos no seu aplicativo. Ao programar com um objeto, você pode usar o arquivo de Ajuda do objeto para melhorar a qualidade do tratamento de erro ou para exibir uma mensagem significativa para seu usuário, se o erro não for recuperável.


Propriedade HelpFile

Retorna ou define, em uma expressão de seqüência, o caminho completo para um arquivo de Ajuda. Leitura/gravação.

Comentários

Se um arquivo de Ajuda for especificado em HelpFile, ele será automaticamente chamado quando o usuário pressionar o botão Help (ou a TECLA F1 no Windows ou a tecla HELP no Macintosh) na caixa de diálogo da mensagem de erro. Se a propriedade HelpContext contiver uma identificação de contexto, válida para o arquivo especificado, aquele tópico será exibido automaticamente. Se nenhum HelpFile for especificado, o arquivo de Ajuda do Visual Basic será exibido.

Observação   Você deve escrever rotinas de tratamento de erros típicos no seu aplicativo. Ao programar com um objeto, você pode usar o arquivo de Ajuda do objeto para melhorar a qualidade do tratamento de erro ou para exibir uma mensagem significativa para seu usuário, se o erro não for recuperável.


Propriedade LastDLLError

Retorna um código de erro de sistema produzido por uma chamada a uma biblioteca de vínculo dinâmico (DLL). Somente leitura. LastDLLError sempre retorna zero no Macintosh.

Comentários

A propriedade LastDLLError aplica-se somente a chamadas a DLL feitas a partir de código do Visual Basic. Quando tal chamada é feita, a função chamada retorna um código indicando êxito ou falha, e a propriedade LastDLLError é preenchida. Verifique a documentação das funções da DLL para determinar os valores de retorno que indicam êxito ou falha. Sempre que o código de falha é retornado, o aplicativo do Visual Basic deve verificar imediatamente a propriedade LastDLLError. Nenhuma exceção é ativada quando a propriedade LastDLLError está definida.


Propriedade Number (Visual Basic for Applications)
Propriedade Number

Retorna ou define um valor numérico que especifica um erro. Number é a propriedade padrão do objeto Err. Leitura/gravação.

Comentários

Quando retornar um erro definido pelo usuário a partir de um objeto, defina Err.Number adicionando o número selecionado, como um código de erro, à constante vbObjectError. Por exemplo, você usa o código a seguir para retornar o número 1051 como um código de erro:

Err.Raise Number := vbObjectError + 1051, Source:= "AlgumaClasse"


Propriedade Source (Visual Basic for Applications)
Propriedade Source

Retorna ou define uma expressão de seqüência, que especifica o nome do objeto ou aplicativo que originalmente gerou o erro. Leitura/gravação.

Comentários

A propriedade Source especifica uma expressão de seqüência que representa o objeto que gerou o erro; a expressão geralmente é o nome da classe do objeto ou a ID programática. Use Source para fornecer as informações quando seu código não puder tratar um erro gerado em um objeto acessado. Por exemplo, se você acessar o Microsoft Excel e ele gerar um erro de Divisão por zero, o Microsoft Excel definirá Err.Number para seu código de erro correspondente e definirá Source como Excel.Application.

Quando gerar um erro de código, Source será a ID programática do seu aplicativo. Para módulos de classe, Source deve conter um nome tendo o formato projeto.classe. Quando ocorre um erro inesperado em seu código, a propriedade Source é preenchida automaticamente. Para erros em um módulo padrão, Source contém o nome do projeto. Para erros em um módulo de classe, Source contém um nome com o formato projeto.classe.


Exemplo da instrução DeleteSetting

O exemplo a seguir primeiro usa a instrução SaveSetting para criar entradas no Registro do Windows (ou no arquivo .ini nas plataformas Windows de 16 bits) para o aplicativo MyApp e, em seguida, usa a instrução DeleteSetting para removê-las. Como não há argumento key especificado, toda a seção é excluída, inclusive o nome da seção e todas as suas chaves.

' Inserir algumas definições no Registro.

SaveSetting appname := "MyApp", section := "Inicialização", _

            key := "Superior", setting := 75

SaveSetting "MyApp","Inicialização", "Esquerda", 50

' Remover a seção e todas as suas definições do Registro.

DeleteSetting "MyApp", "Inicialização"


Exemplo da função GetAllSettings

Este exemplo primeiramente usa a instrução SaveSetting para criar entradas no Registro do Windows (ou no arquivo .ini nas plataformas Windows de 16 bits), para o aplicativo especificado como appname, depois usa a função GetAllSettings para exibir as configurações. Observe que os nomes de aplicativo e os nomes de section não podem ser recuperados com GetAllSettings. Por fim, a instrução DeleteSetting remove as entradas do aplicativo.

' Variant para conter uma matriz bidimensional retornada por GetAllSettings

' Integer para conter o contador.

Dim MySettings As Variant, intSettings As Integer

' Inserir algumas definições no Registro.

SaveSetting appname := "MyApp", section := "Inicialização", _

key := "Superior", setting := 75

SaveSetting "MyApp","Inicialização", "Esquerda", 50

' Recuperar as configurações.

MySettings = GetAllSettings(appname := "MyApp", section := "Inicialização")

For intSettings = LBound(MySettings, 1) To UBound(MySettings, 1)

Debug.Print MySettings(intSettings, 0), MySettings(intSettings, 1)

Next intSettings

DeleteSetting "MyApp", "Startup"


Exemplo da função GetSetting

Este exemplo primeiro usa a instrução SaveSetting para criar entradas no Registro do Windows (ou no arquivo .ini nas plataformas Windows de 16 bits) para o aplicativo especificado como appname e, em seguida, utiliza a função GetSetting para exibir uma das definições. Como o argumento default é especificado, algum valor certamente será retornado. Observe que os nomes de section não podem ser recuperados com GetSetting. Por fim, a instrução DeleteSetting remove todas as entradas do aplicativo.

' Variant para conter uma matriz bidimensional retornada por GetSetting.

Dim MySettings As Variant

' Inserir algumas definições no Registro.

SaveSetting "MyApp","Inicialização", "Superior", 75

SaveSetting "MyApp","Inicialização", "Esquerda", 50

Debug.Print GetSetting(appname := "MyApp", section := "Inicialização", _

                       key := "Esquerda", default := "25")

DeleteSetting "MyApp", "Inicialização"


Exemplo da instrução SaveSetting

O exemplo a seguir primeiro usa a instrução SaveSetting para criar entradas no Registro do Windows (ou no arquivo .ini nas plataformas Windows de 16 bits) para o aplicativo MyApp e, em seguida, usa a instrução DeleteSetting para removê-las.

' Inserir algumas definições no Registro.

SaveSetting appname := "MyApp", section := "Inicialização", _

            key := "Superior", setting := 75

SaveSetting "MyApp","Inicialização", "Esquerda", 50

' Remover a seção e todas as suas definições do Registro.

DeleteSetting "MyApp", "Inicialização"


Instrução DeleteSetting

Exclui uma definição de seção ou chave da entrada de um aplicativo, no Registro do Windows ou (no Macintosh) informações no arquivo de inicialização do aplicativo.

Sintaxe

DeleteSetting appname, section[, key]

A sintaxe da instrução DeleteSetting tem os seguintes argumentos nomeados:

Parte	Descrição
appname	Obrigatória. Expressão de seqüência que contém o nome do aplicativo ou projeto ao qual se aplica a definição de seção ou de chave. No Macintosh, este é o nome do arquivo de inicialização na pasta Preferências, da pasta Sistema.
section	Obrigatória. Expressão de seqüência de caracteres que contém o nome da seção da qual a definição da chave está sendo excluída. Se forem fornecidos somente appname e section, a seção especificada será excluída juntamente com todas as definições de chave relacionadas.
key	Opcional. Expressão de seqüência de caracteres que contém o nome da definição da chave sendo excluída.
Comentários

Se todos os argumentos forem fornecidos, a definição especificada será excluída. Ocorrerá um erro em tempo de execução se você tentar usar a instrução DeleteSetting, em uma seção ou definição de chave não existente.


Função GetAllSettings

Retorna uma lista de definições de chave e seus respectivos valores (originalmente criados com SaveSetting) da entrada de um aplicativo, no Registro do Windows ou (no Macintosh) informações, no arquivo de inicialização do aplicativo.

Sintaxe

GetAllSettings(appname, section)

A sintaxe da função GetAllSettings tem os seguintes argumentos nomeados:

Parte	Descrição
appname	Obrigatória. Expressão de seqüência que contém o nome do aplicativo ou projeto cujas definições de chave são solicitadas. No Macintosh, este é o nome do arquivo de inicialização na pasta Preferências da pasta Sistema.
section	Obrigatória. Expressão de seqüência que contém o nome da seção cujas definições de chave são solicitadas. GetAllSettings retorna um Variant cujo conteúdo é uma matriz bidimensional de seqüências de caracteres contendo todas as definições de chave da seção especificada e seus valores correspondentes.
Comentários

GetAllSettings retorna um Variant não inicializado, se appname ou section não existir.


Função GetSetting

Retorna um valor de definição de chave da entrada de um aplicativo, no Registro do Windows ou (no Macintosh) informações, no arquivo de inicialização do aplicativo.

Sintaxe

GetSetting(appname, section, key[, default])

A sintaxe da função GetSetting tem os seguintes argumentos nomeados:

Parte	Descrição
appname	Obrigatória. Expressão de seqüência que contém o nome do aplicativo ou projeto cuja definição de chave é solicitada. No Macintosh, este é o nome do arquivo de inicialização na pasta Preferências da pasta Sistema.
section	Obrigatória. Expressão de seqüência de caracteres que contém o nome da seção onde se encontra a definição de chave.
key	Obrigatória. Expressão de seqüência de caracteres que contém o nome da definição de chave a ser retornada.
default	Opcional. Expressão que contém o valor a retornar se nenhum valor for definido na configuração de chave. Se for omitido, default será assumido como uma seqüência de caracteres de comprimento zero ("").
Comentários

Se algum dos itens nomeados nos argumentos de GetSetting não existir, GetSetting retornará o valor de default.


Instrução SaveSetting

Salva ou cria uma entrada do aplicativo, no Registro do Windows ou (no Macintosh) informações, no arquivo de inicialização do aplicativo.

Sintaxe

SaveSetting appname, section, key, setting

A sintaxe da instrução SaveSetting tem os seguintes argumentos nomeados:

Parte	Descrição
appname	Obrigatória. Expressão de seqüência que contém o nome do aplicativo ou projeto ao qual se aplica a definição. No Macintosh, este é o nome do arquivo de inicialização na pasta Preferências da pasta Sistema.
section	Obrigatória. Expressão de seqüência de caracteres que contém o nome da seção em que a definição de chave está sendo salva.
key	Obrigatória. Expressão de seqüência de caracteres que contém o nome da definição de chave que está sendo salva.
setting	Obrigatória. Expressão que contém o valor com que key está sendo definido.
Comentários

Ocorrerá um erro se, por qualquer motivo, a definição de chave não puder ser salva.


Exemplo da função Chr

Este exemplo usa a função Chr para retornar o caractere associado ao código de caractere especificado.

Dim MyChar

MyChar = Chr(65)	' Retorna A.

MyChar = Chr(97)	' Retorna a.

MyChar = Chr(62)	' Retorna >.

MyChar = Chr(37)	' Retorna %.


Exemplo da função Format

Este exemplo mostra os diversos usos da função Format para formatar valores, usando formatos nomeados e formatos definidos pelo usuário. Para o separador de data (/), separador de hora (:) e literal AM/ PM, o resultado real formatado, exibido pelo sistema, depende das configurações da localidade em que o código está sendo executado. Ao exibir datas e horas no ambiente de desenvolvimento, são usados os formatos de hora e data abreviados da localidade do código. Quando exibidas pelo código em execução, são usados os formatos de hora e data abreviados da localidade do sistema, que podem ser diferentes da localidade do código. Neste exemplo, foi considerado o inglês dos Estados Unidos.

MyTime e MyDate são exibidas no ambiente de desenvolvimento, usando as configurações de hora e data abreviadas do sistema atual.

Dim MyTime, MyDate, MyStr

MyTime = #17:04:23#

MyDate = #January 27, 1993#

' Retorna a hora atual do sistema no formato longo de hora definido pelo sistema.

MyStr = Format(Time, "Hora longa")

' Retorna a data do sistema atual no formato longo de data definido pelo sistema.

MyStr = Format(Date, "Data longa")

MyStr = Format(MyTime, "h:m:s")	' Retorna "17:4:23".

MyStr = Format(MyTime, "hh:mm:ss AMPM")	' Retorna "05:04:23 PM".

MyStr = Format(MyDate, "dddd, mmm d yyyy")	' Retorna "Quarta-feira,

' Jan 27 1993".

' Se o formato não for especificado, será retornada uma seqüência de caracteres.

MyStr = Format(23)	' Retorna "23".

' Formatos definidos pelo usuário.

MyStr = Format(5459.4, "##,##0.00")	' Retorna "5.459,40".

MyStr = Format(334.9, "###0.00")	' Retorna "334,90".

MyStr = Format(5, "0.00%")	' Retorna "500,00%".

MyStr = Format("OLÁ", "<")	' Retorna "olá".

MyStr = Format("Isto é tudo", ">")	' Retorna "ISTO É TUDO".


Exemplo da função Hex

Este exemplo usa a função Hex para retornar o valor hexadecimal de um número.

Dim MyHex

MyHex = Hex(5)	' Retorna 5.

MyHex = Hex(10)	' Retorna A.

MyHex = Hex(459)	' Retorna 1CB.


Exemplo da função InStr

Este exemplo usa a função InStr para retornar a posição da primeira ocorrência de uma seqüência de caracteres dentro de outra.

Dim SearchString, SearchChar, MyPos

SearchString ="XXpXXpXXPXXP"	' Seqüência de caracteres a ser pesquisada.

SearchChar = "P"	' Procurar por "P".

' Uma comparação de texto iniciando na posição 4. Retorna 6.

MyPos = Instr(4, SearchString, SearchChar, 1)

' Uma comparação binária iniciando na posição 1. Retorna 9.

MyPos = Instr(1, SearchString, SearchChar, 0)

' A comparação é binária, como padrão (o último argumento é omitido).

MyPos = Instr(SearchString, SearchChar)	' Retorna 9.

MyPos = Instr(1, SearchString, "W")	' Retorna 0.


Exemplo da função LCase

Este exemplo usa a função LCase para retornar uma versão em letras minúsculas de uma seqüência de caracteres.

Dim UpperCase, LowerCase

Uppercase = "Olá mundo 1234"	' Seqüência de caracteres a ser convertida.

Lowercase = Lcase(UpperCase)	' Retorna "olá mundo 1234".


Exemplo da função Left

Este exemplo usa a função Left para retornar um número especificado de caracteres, a partir do lado esquerdo de uma seqüência de caracteres.

Dim AnyString, MyStr

AnyString = "Olá Mundo"	' Definir a seqüência de caracteres.

MyStr = Left(AnyString, 1)	' Retorna "O".

MyStr = Left(AnyString, 7)	' Retorna "Olá Mun".

MyStr = Left(AnyString, 20)	' Retorna "Olá Mundo".


Exemplo da função Len

O primeiro exemplo usa a função Len para retornar o número de caracteres em uma seqüência de caracteres ou o número de bytes necessários para armazenar uma variável. O bloco Type...End Type, que define CustomerRecord, deve ser precedido pela palavra-chave Private se aparecer em um módulo de classe. Em um módulo padrão, uma instrução Type pode ser Public.

Type CustomerRecord	' Define o tipo definido pelo usuário.

ID As Integer	' Inserir esta definição em um

Name As String * 10	' módulo padrão.

Endereço As String * 30

End Type

Dim Customer As CustomerRecord	' Declara as variáveis.

Dim MyInt As Integer, MyCur As Currency

Dim MyString, MyLen

MyString = "Olá mundo"	' Inicialize variável.

MyLen = Len(MyInt)	' Retorna 2.

MyLen = Len(Customer)	' Retorna 42.

MyLen = Len(MyString)	' Retorna 11.

MyLen = Len(MyCur)	' Retorna 8.

O segundo exemplo usa LenB e uma função definida pelo usuário (LenMbcs) para retornar o número de caracteres de bytes existentes em uma seqüência de caracteres, se for usado ANSI para representar a seqüência de caracteres.

Function LenMbcs (ByVal str as String)

LenMbcs = LenB(StrConv(str, vbFromUnicode))

End Function

Dim MyString, MyLen

MyString = "ABc"

' Onde "A" e "B" são DBCS e "c" é SBCS.

MyLen = Len(MyString)

' Retorna 3 - 3 caracteres na seqüência de caracteres.

MyLen = LenB(MyString)

' Retorna 6 - 6 bytes usados para Unicode.

MyLen = LenMbcs(MyString)

' Retorna 5 - 5 bytes usados para ANSI.


Exemplo da instrução LSet

Este exemplo usa a instrução LSet para alinhar uma seqüência de caracteres à esquerda, dentro de uma variável de seqüência de caracteres. Embora a instrução LSet também possa ser usada para copiar uma variável de um tipo definido pelo usuário para outra variável de outro tipo definido pelo usuário, mas compatível, essa prática não é recomendável. Devido às diversas implementações de estruturas de dados entre plataformas, não é possível assegurar a portabilidade desse uso de LSet.

Dim MyString

MyString = "0123456789"	' Inicializar a seqüência de caracteres.

Lset MyString = "<-Left"	' MyString contém "<-Left    ".


Exemplo das funções LTrim, RTrim e Trim

Este exemplo usa a função LTrim para eliminar os espaços à esquerda e a função  RTrim para eliminar os espaços precedentes de uma variável de seqüência de caracteres. O exemplo usa a função Trim para eliminar os dois tipos de espaços.

Dim MyString, TrimString

MyString = "  <-Trim->  "	' Inicializar a seqüência de caracteres.

TrimString = LTrim(MyString)	' TrimString = "<-Trim->  ".

TrimString = RTrim(MyString)	' TrimString = "  <-Trim->".

TrimString = LTrim(RTrim(MyString))	' TrimString = "  <-Trim->".

' Usar a função Trim isoladamente consegue-se o mesmo resultado.

TrimString = Trim(MyString)	' TrimString = "  <-Trim->".


Exemplo da função Mid

O primeiro exemplo usa a função Mid para retornar um número especifico de caracteres de uma seqüência de caracteres.

Dim MyString, FirstWord, LastWord, MidWords

MyString = "Demonstração da função Mid"	' Criar a seqüência de texto.

FirstWord = Mid(MyString, 1, 3)	' Retorna "Mid".

LastWord = Mid(MyString, 14, 4)	' Retorna "Demo".

MidWords = Mid(MyString, 5)	' Retorna "Demonstração da função".

O segundo exemplo usa MidB e uma função definida pelo usuário (MidMbcs) para  retornar caracteres de seqüência de caracteres também. Nesse caso, a diferença reside no fato de que a seqüência de caracteres de entrada está em ANSI e o tamanho em bytes.

Function MidMbcs(ByVal str as String, start, length)

MidMbcs = StrConv(MidB(StrConv(str, vbFromUnicode), start, length), vbUnicode)

End Function

Dim MyString

MyString = "AbCdEfG"

' Onde "A", "C", "E" e "G" são DBCS e "b", "d"

' e "f" são SBCS.

MyNewString = Mid(MyString, 3, 4)

' Retorna ""CdEf"

MyNewString = MidB(MyString, 3, 4)

' Retorna ""bC"

MyNewString = MidMbcs(MyString, 3, 4)

' Retorna "bCd"


Exemplo da instrução Mid

Este exemplo usa a instrução Mid para substituir um número especificado de caracteres de uma variável de seqüência de caracteres, por caracteres de outra seqüência.

Dim MyString

MyString = "O cachorro pula"	' Inicializar a seqüência de caracteres.

Mid(MyString, 5, 3) = "raposa"	' MyString = "A raposa pula".

Mid(MyString, 5) = "vaca"	' MyString = "A vaca pula".

Mid(MyString, 5) = "a vaca pulou sobre"	' MyString = "O pulo da vaca".

Mid(MyString, 5, 3) = "pato"	' MyString = "O pato pula".


Exemplo da função Oct

Este exemplo usa a função Oct para retornar o valor octal de um número.

Dim MyOct

MyOct = Oct(4) 	' Retorna 4.

MyOct = Oct(8)	' Retorna 10.

MyOct = Oct(459)	' Retorna 713.


Exemplo da função Right

Este exemplo usa a função Right para retornar um número especificado de caracteres, a partir do lado direito de uma seqüência de caracteres.

Dim AnyString, MyStr

AnyString = "Olá Mundo"	' Definir a seqüência de caracteres.

MyStr = Right(AnyString, 1)	' Retorna "o".

MyStr = Right(AnyString, 6)	' Retorna " Mundo".

MyStr = Right(AnyString, 20)	' Retorna "Olá Mundo".


Exemplo da instrução RSet

Este exemplo usa a instrução RSet para alinhar uma seqüência de caracteres à direita,  dentro de uma variável de seqüência de caracteres.

Dim MyString

MyString = "0123456789"	' Inicializar a seqüência de caracteres.

Rset MyString = "Right->"	' MyString contém "   Right->".


Exemplo da função Space

Este exemplo usa a função Space para retornar uma seqüência de caracteres que consiste de um número especificado de espaços.

Dim MyString

' Retorna uma seqüência de caracteres com 10 espaços.

MyString = Space(10)

' Inserir 10 espaços entre duas seqüências de caracteres.

MyString = "Olá" & Space(10) & "Mundo"


Exemplo da função Str

Este exemplo usa a função Str para retornar uma representação de um número, em uma seqüência de caracteres. Quando um número é convertido para uma seqüência de caracteres, é sempre reservado um espaço à esquerda para o sinal do número.

Dim MyString

MyString = Str(459)	' Retorna " 459".

MyString = Str(-459.65)	' Retorna " 459,65".

MyString = Str(459.001)	' Retorna " 459,001".


Exemplo da função StrComp

Este exemplo usa a função StrComp para retornar os resultados de uma comparação de seqüências de caracteres. Se o terceiro argumento for 1, será executada uma comparação de texto; se o terceiro argumento for 0 ou se for omitido, será executada uma comparação binária.

Dim MyStr1, MyStr2, MyComp

MyStr1 = "ABCD": MyStr2 = "abcd"	' Definir variáveis.

MyComp = StrComp(MyStr1, MyStr2, 1)	' Retorna 0.

MyComp = StrComp(MyStr1, MyStr2, 0)	' Retorna -1.

MyComp = StrComp(MyStr2, MyStr1)	' Retorna 1.


Exemplo da função String

Este exemplo usa a função String para retornar seqüências de caracteres repetidas, no tamanho especificado.

Dim MyString

MyString = String(5, "*")	' Retorna "*****".

MyString = String(5, 42)	' Retorna "*****".

MyString = String(10, "ABC")	' Retorna "AAAAAAAAAA".


Exemplo da função UCase

Este exemplo usa a função UCase para retornar uma versão de uma seqüência de caracteres em letras maiúsculas.

Dim LowerCase, UpperCase

LowerCase = "Olá mundo 1234"	' Seqüência de caracteres a ser convertida.

UpperCase = UCase(LowerCase)	' Retorna "OLÁ MUNDO 1234".


Exemplo da função StrConv

Este exemplo usa a função StrConv para converter uma seqüência de caracteres Unicode em uma seqüência ANSI.

Dim i As Long

Dim x() As Byte

x = StrConv("ABCDEFG", vbFromUnicode)	' Converter seqüência de caracteres.

For i = 0 To UBound(x)

Debug.Print x(i)

Next


Função Chr

Retorna uma seqüencia de caracteres que contém o caractere associado ao código de caractere especificado.

Sintaxe

Chr(charcode)

O argumento charcode necessário é um Long que identifica um caractere.

Comentários

Os números de 0 – 31 são os mesmos que os códigos padrão ASCII não imprimíveis. Por exemplo, Chr(10) retorna um caractere de alimentação de linha. O intervalo normal do  charcode é 0 – 255. Contudo, nos sistemas DBCS, o intervalo real de charcode é de -32768 a 65535.

Observação   A função ChrB é usada com os dados de byte contidos em uma String. Em vez de retornar um caractere, que pode ter um ou dois bytes, ChrB retorna sempre um único byte. A função ChrW retorna uma String que contém o caractere Unicode, exceto em plataformas onde o Unicode não é suportado, caso em que o comportamento é idêntico ao da função Chr.

Observação   O Visual Basic para o Macintosh não dá suporte às seqüências Unicode. Portanto, ChrW(n) não pode retornar todos os caracteres Unicode, para valores n no intervalo de 128 a 65.535, como ocorre no ambiente Windows. Em vez disso, ChrW(n) busca a "melhor estimativa" para valores n Unicode maiores que 127. Portanto, você não deve usar ChrW no ambiente Macintosh.


Função Format

Retorna uma Variant (String) que contém uma expressão formatada segundo instruções contidas em uma expressão de formato.

Sintaxe

Format(expression[, format[, firstdayofweek[, firstweekofyear]]])

A sintaxe da função Format tem as seguintes partes:

Parte	Descrição
Expression	Obrigatória. Qualquer expressão válida.
Format	Opcional. Uma expressão de formato válida nomeada ou definida pelo usuário.
Firstdayofweek	Opcional. Uma constante que especifica o primeiro dia da semana.
firstweekofyear	Opcional. Uma constante que especifica a primeira semana do ano.
Definições

O argumento firstdayofweek tem as seguintes configurações:

Constante	Valor	Descrição
vbUseSystem	0	Use a configuração NLS API.
VbSunday	1	Domingo (padrão)
vbMonday	2	Segunda-feira
vbTuesday	3	Terça-feira
vbWednesday	4	Quarta-feira
vbThursday	5	Quinta-feira
vbFriday	6	Sexta-feira
vbSaturday	7	Sábado
O argumento firstweekofyear tem as seguintes configurações:

Constante	Valor	Descrição
vbUseSystem	0	Use a configuração NLS API.
vbFirstJan1	1	Inicie com a semana na qual ocorre o dia 1  de janeiro (padrão).
vbFirstFourDays	2	Inicie com a primeira semana que tem pelo menos quatro dias no ano.
vbFirstFullWeek	3	Inicie com a primeira semana completa do ano.
Comentários

Para formatar	Faça isto
Números	Usa formatos numéricos nomeados predefinidos ou crie formatos numéricos definidos pelo usuário.
Datas e horas	Use formatos de data/hora nomeados predefinidos ou crie formatos de data/hora definidos pelo usuário.
Números de série de data e hora	Use formatos de data e hora ou formatos numéricos.
Seqüências de caracteres	Crie seus próprios formatos de seqüências de caracteres definidos pelo usuário.
Se você tentar formatar um número sem especificar o argumento format, a função  Format fornecerá uma funcionalidade semelhante à da função Str, embora seja conhecida internacionalmente. Contudo, os números positivos formatados como seqüências de caracteres, através da função Format não incluem um espaço à esquerda reservado para o sinal do valor; os números convertidos através da função Str mantêm o espaço à esquerda.

Se você estiver formatando uma seqüência de caracteres numéricos não localizada, use um formato numérico definido pelo usuário para garantir a aparência desejada.

Observação   Se a definição da propriedade Calendar for Gregoriano e format especificar a formatação de data, a expression fornecida deve ser Gregoriana. Se a propriedade Calendar do Visual Basic for Hijri, a expression fornecida deverá ser Hijri.

Se o calendário for Gregoriano, o significado dos símbolos da expressão format não é alterado. Se o calendário for Hijri, todos os símbolos de formato de data (por exemplo, dddd, mmmm, aaaa) terão o mesmo significado, mas se aplicarão ao calendário Hijri. Os símbolos de formato permanecem em Inglês; os símbolos que resultam em exibição de texto (por exemplo, AM e PM) exibem a seqüência de caracteres (Inglês ou Árabe) associada a esse símbolo. O intervalo de certos símbolos é alterado quando o calendário é Hijri.

Símbolo	Intervalo
d	1-30
dd	1-30
ww	1-51
mmm	Exibe nomes completos de meses (os nomes de meses Hijri não são abreviados).
y	1-355
yyyy	100-9666


Formatos numéricos nomeados (função Format)

A tabela a seguir identifica os nomes de formatos numéricos predefinidos:

Nome do formato	Descrição
General Number	Exibir o número sem separador de milhar.
Moeda	Exibir o número com separador de milhar, se for o caso; exibir dois dígitos à direita do separador decimal. A saída é baseada nas configurações de localidade do sistema.
Fixed	Exibir pelo menos um dígito à esquerda e dois dígitos à direita do separador decimal.
Padrão	Exibir o número com o separador de milhar, pelo menos um dígito à esquerda e dois dígitos à direita do separador decimal.
Percent	Exibir o número multiplicado por 100 com um sinal de porcentagem (%) à direita; exibir sempre dois dígitos à direita do separador decimal.
Scientific	Usa a notação científica padrão.
Yes/No	Exibir No, se o número for 0; caso contrário, exibir Yes.
True/False	Exibir False se o número for 0; caso contrário, exibir True.
On/Off	Exibir Off, se o número for 0; caso contrário, exibir On.


Formatos numéricos definidos pelo usuário (função Format)

A tabela a seguir identifica os caracteres que você pode usar para criar formatos numéricos definidos pelo usuário:

Caractere	Descrição
Nenhum	Exibir o número sem formatação.
(0)	Espaço reservado para dígito. Exibe um dígito ou zero. Se a expressão possuir um dígito na posição em que aparece o 0 na seqüência de caracteres de formato, esse dígito será exibido; caso contrário, exibirá um zero nessa posição. Se o número possuir menos dígitos do que zeros (em qualquer lado do decimal) na expressão de formato, exibirá zeros à esquerda ou precedentes. Se o número possuir mais dígitos à direita do separador decimal do que os zeros, se houver, à direita desse mesmo separador, na expressão de formato, arredondará o número para uma quantidade de casas decimais igual à quantidade de zeros. Se o número possuir mais dígitos à esquerda do separador decimal do que a quantidade de zeros existentes à esquerda desse mesmo separador, na expressão de formato, os dígitos adicionais são exibidos sem modificação.
(#)	Espaço reservado para dígito. Exibe um dígito ou nada. Se a expressão possuir um dígito na posição em que aparece o símbolo # na seqüência de caracteres de formato, esse dígito será exibido; caso contrário, não exibirá nada nessa posição. Este símbolo funciona como o espaço reservado para o dígito 0, exceto pelo fato de que os zeros à esquerda e precedentes não serão exibidos, se o número possuir a mesma quantidade de dígitos, ou menos que os caracteres # que houver em um dos lados do separador decimal, na expressão de formato.
(.)	Espaço reservado para decimal. Em algumas localidades, emprega-se uma vírgula como separador decimal. O espaço reservado para decimal determina a quantidade de dígitos exibidos à esquerda e à direita do separador decimal. Se a expressão de formato contiver somente sinais numéricos à esquerda desse símbolo, os números menores que 1 iniciarão com um separador decimal. Para exibir um zero à esquerda com números fracionários, use um 0 como primeiro espaço reservado para dígito à esquerda do separador decimal. O caractere real, usado como um espaço reservado para decimal no resultado formatado, depende do Formato de números reconhecido pelo sistema.
(%)	Espaço reservado para porcentagem. A expressão é multiplicada por 100. O caractere de porcentagem (%) é inserido na posição que lhe corresponde, na seqüência de caracteres de formato.
(,)	Separador de milhar. Em algumas localidades, emprega-se um ponto como separador de milhar. O separador de milhar separa milhares de centenas em um número com quatro casas ou mais, à esquerda do separador decimal. O uso padrão do separador de milhar será especificado se o formato contiver um separador de milhar circundado por espaços reservados para dígitos (0 ou #). Dois separadores de milhar adjacentes ou um separador de milhar imediatamente à esquerda do separador decimal (com um decimal especificado ou não) significam "escalar o número, dividindo-o por 1000 e arredondando, se necessário". Por exemplo, é possível usar a seqüência de caracteres de formato "##0,," para representar 100 milhões como 100. Os números menores que 1 milhão são exibidos como 0. Dois separadores de milhar adjacentes, em qualquer posição, exceto imediatamente à esquerda do separador decimal, são interpretados apenas como especificação do emprego de um separador de milhar. O caractere real, usado como separador de milhar no resultado formatado, depende do Formato de números reconhecido pelo sistema.
(:)	Separador de hora. Em algumas localidades, podem ser empregados outros caracteres para representar o separador de hora. O separador de hora separa horas, minutos e segundos, quando os valores de hora são formatados. O caractere real, usado como separador de horas na saída formatada, é determinado pelas configurações do sistema.
(/)	Separador de data. Em algumas localidades, podem ser empregados outros caracteres para representar o separador de data. O separador de data separa o dia, mês e ano, quando os valores de data são formatados. O caractere real, usado como separador de data no resultado formatado, é determinado pelas configurações do sistema.
(E- E+ e- e+)	Formato científico. Se a expressão de formato contiver pelo menos um espaço reservado para dígito (0 ou #) à direita de E-, E+, e- ou e+, o número será exibido em formato científico e será inserido E ou e entre o número e o respectivo expoente. O número de espaços reservados para dígitos à direita determina o número de dígitos no expoente. Use E- ou e- para colocar um sinal de subtração ao lado dos expoentes negativos. Use E+ ou e+ para colocar um sinal menos, ao lado dos expoentes negativos, e um sinal mais, ao lado dos expoentes positivos.
- + $ ( )	Exibe um caractere literal. Para exibir um caractere diferente dos listados, preceda-o com uma barra invertida (\) ou coloque-o entre aspas duplas (" ").
(\)	Exibe o caractere seguinte na seqüência de caracteres de formato. Para exibir um caractere, que possui um significado especial, como um caractere literal, preceda-o com uma barra invertida (\). A barra invertida não será exibida. Usar uma barra invertida equivale a colocar o caractere seguinte entre aspas duplas. Para exibir uma barra invertida, use duas barras invertidas (\\). Exemplos de caracteres que não podem ser exibidos como caracteres literais são os caracteres de formatação de data e hora (a, c, d, h, m, n, p, q, s, t, w, y, /, :), os caracteres de formatação de números (#, 0, %, E, e, vírgula e ponto) e os caracteres de formatação de seqüências (@, &, <, >, !).
("ABC")	Exibe a seqüência de caracteres contida entre aspas duplas (" "). Para incluir uma seqüência em format dentro do código, use Chr(34) para inserir o texto entre aspas (34 é o código de caractere de aspas (")).


Formatos diferentes para  valores numéricos diferentes(função Format)

Uma expressão de formato definida pelo usuário para números pode ter de uma a quatro seções separadas por ponto-e-vírgula. Se o argumento format contiver um dos formatos numéricos nomeados, será permitida somente uma seção.

Se você usar	O result será
Uma única seção	A expressão de formato se aplicará a todos os valores.
Duas seções	A primeira seção se aplicará a valores positivos e zeros; a segunda, a valores negativos.
Três seções	A primeira seção se aplicará a valores positivos; a segunda, a valores negativos; e a terceira, a zeros.
Quatro seções	A primeira seção se aplicará a valores positivos; a segunda, a valores negativos; a terceira, a zeros; e a quarta, a valores Null.
O exemplo a seguir tem duas seções: a primeira define o formato de valores positivos e zeros; a segunda define o formato de valores negativos.

"$#,##0;($#,##0)"

Se você incluir pontos-e-vírgulas sem nada entre eles, a seção ausente será impressa com o formato do valor positivo. Por exemplo, o formato a seguir exibe valores positivos e negativos com o formato especificado na primeira seção e exibe "Zero", se o valor for zero.

"$#,##0;;\Z\e\r\o"


Exemplo de expressões de formato numérico definido pelo usuário

A tabela a seguir apresenta alguns exemplos de expressões de formato de números. (Todos esses exemplos pressupõem que a configuração da localidade do sistema seja inglês dos Estados Unidos). A primeira coluna contém as seqüências de caracteres de formato; as outras colunas mostram a saída resultante, se os dados formatados possuírem o valor fornecido nos títulos da coluna.

Formato (format)	5 positivo	5 negativo	.5 decimal	Null
Seqüência de caracteres de comprimento zero ("")	5	-5	0.5
0	5	-5	1
0.00	5.00	-5.00	0.50
#,##0	5	-5	1
#,##0.00;;;Nil	5.00	-5.00	0.50	Nil
$#,##0;($#,##0)	$5	($5)	$1
$#,##0.00;($#,##0.00)	$5.00	($5.00)	$0.50
0%	500%	-500%	50%
0.00%	500.00%	-500.00%	50.00%
0.00E+00	5.00E+00	-5.00E+00	5.00E-01
0.00E-00	5.00E00	-5.00E00	5.00E-01


Formatos nomeados de data/hora (função Format)

A tabela a seguir identifica os nomes de formatos predefinidos de data e hora:

Nome do formato	Descrição
General Date	Exibir uma data e/ou hora. Para números reais, exibe uma data e hora, como 4/3/93 05:34 PM.Se não existir uma parte fracionária, exibirá somente uma data, como 4/3/93. Se não existir uma parte inteira, exibirá somente a hora, como 05:34 PM. A exibição da data é determinada pelas configurações do sistema.
Long Date	Exibe uma data de acordo com o formato de data longa do sistema.
Medium Date	Exibe uma data com o formato de data média, adequado à versão do idioma do aplicativo host.
Short Date	Exibe uma data com o formato de data abreviada do sistema.
Long Time	Exibe um horário usando o formato de hora longa do sistema; inclui horas, minutos, segundos.
Medium Time	Exibe a hora no formato de 12 horas, usando horas e minutos e a designação AM/PM.
Short Time	Exibe uma hora no formato de 24 horas, como, por exemplo, 17:45.


Formatos de data/hora definidos pelo usuário (função Format)

A tabela a seguir identifica os caracteres que você pode usar para criar formatos de data/hora definidos pelo usuário:

Caractere	Descrição
(:)	Separador de hora. Em algumas localidades, podem ser empregados outros caracteres para representar o separador de hora. O separador de hora separa horas, minutos e segundos, quando os valores de hora são formatados. O caractere real, usado como separador de horas na saída formatada, é determinado pelas configurações do sistema.
(/)	Separador de data. Em algumas localidades, podem ser empregados outros caracteres para representar o separador de data. O separador de data separa o dia, mês e ano, quando os valores de data são formatados. O caractere real, usado como separador de data no resultado formatado, é determinado pelas configurações do sistema.
c	Exibe a data como ddddd e a hora como  ttttt, nessa ordem. Exibirá somente a informação da data, se não existir uma parte fracionária para o número de série de data; exibirá somente a informação da hora, se não existir uma parte inteira.
d	Exibe o dia como um número sem o zero à esquerda (1 – 31).
dd	Exibe o dia como um número com o zero à esquerda (01 – 31).
ddd	Exibe o dia abreviado (dom – sáb).
dddd	Exibe o nome completo do dia (domingo – sábado).
ddddd	Exibe a data como uma data completa (incluindo dia, mês e ano), formatada de acordo com a configuração de formato de data abreviada do sistema. O formato padrão de data abreviada é d/m/aa.
dddddd	Exibe um número de série de data como uma data completa (incluindo dia, mês e ano), formatado de acordo com a configuração de data longa reconhecida pelo sistema. O formato padrão de data longa é mmmm dd, aaaa.
aaaa	Igual a dddd, apenas é a versão localizada da seqüência.
w	Exibe o dia da semana como um número (1 para domingo até 7 para sábado).
ww	Exibe a semana do ano como um número (1 – 54).
m	Exibe o mês como um número sem um zero à esquerda (1 – 12). Se m vier imediatamente depois de h ou hh, será exibido o minuto em vez do mês.
mm	Exibe o mês como um número sem um zero à esquerda (01 – 12). Se m vier imediatamente depois de h ou hh, será exibido o minuto em vez do mês.
mmm	Exibe o mês como uma abreviação (jan – dez).
mmmm	Exibe o nome completo do mês (janeiro – dezembro).
oooo	Igual a mmmm, apenas é a versão localizada da seqüência.
q	Exibe o trimestre do ano como um número (1 – 4).
y	Exibe o dia do ano como um número (1 – 366).
yy	Exibe o ano como um número de dois dígitos (00 – 99).
yyyy	Exibe o ano como um número de 4 dígitos (100 – 9999).
h	Exibe a hora como um número sem zeros à esquerda (0 – 23).
Hh	Exibe a hora como um número com zeros à esquerda (00 – 23).
N	Exibe o minuto como um número sem zeros à esquerda (0 – 59).
Nn	Exibe o minuto como um número com zeros à esquerda (00 – 59).
S	Exibe o segundo como um número sem zeros à esquerda (0 – 59).
Ss	Exibe o segundo como um número com zeros à esquerda (00 – 59).
t t t t t	Exibe um horário como uma hora completa (com hora, minuto e segundo), formatada com o separador de hora definido pelo formato de hora reconhecido pelo sistema. Será exibido um zero à esquerda, se a opção de zero à esquerda estiver marcada e a hora for anterior a 10:00 A.M. ou P.M. O formato de hora padrão é h:mm:ss.
AM/PM	Usa um relógio de 12 horas e exibe AM em maiúsculas, com qualquer hora anterior ao meio-dia; exibe PM em maiúsculas, com qualquer hora entre meio-dia e 11:59 da noite.
am/pm	Usa um relógio de 12 horas e exibe AM em minúsculas, com qualquer hora anterior ao meio-dia; exibe PM em minúsculas, com qualquer hora entre meio-dia e 11:59 da noite.
A/P	Usa um relógio de 12 horas e exibe um A maiúsculo, com qualquer hora antes do meio-dia; exibe um P maiúsculo, com qualquer hora entre meio-dia e 11:59 da noite.
a/p	Usa um relógio de 12 horas e exibe um A minúsculo, com qualquer hora antes do meio-dia; exibe um P minúsculo, com qualquer hora entre meio-dia e 11:59 da noite.
AMPM	Usa um relógio de 12 horas e exibe o literal de seqüência de caracteres AM, conforme definido pelo sistema, com qualquer hora antes do meio-dia; exibe o literal de seqüência de caracteres PM, conforme definido pelo sistema, com qualquer hora entre meio-dia e 11:59 da noite. AMPM podem estar em maiúsculas ou minúsculas, mas o tamanho das letras da seqüência exibida corresponde ao da seqüência de caracteres definida pelas configurações do sistema. O formato padrão é AM/PM.


Exemplo de formatos de data/hora definidos pelo usuário

Examine a seguir exemplos de formatos de data e hora definidos pelo usuário, para 7 de dezembro de 1958:

Formato	Exibição
m/d/yy	12/7/58
d-mmm	7-Dec
d-mmmm-yy	7-December-58
d mmmm	7 December
mmmm yy	December 58
hh:mm AM/PM	08:50 PM
h:mm:ss a/p	8:50:35 p
h:mm	20:50
h:mm:ss	20:50:35
m/d/aa h:mm	12/7/58 20:50


Formatos de seqüência de caracteres definidos pelo usuário (função Format)

É possível usar qualquer um dos caracteres a seguir para criar uma expressão de formato para seqüências de caracteres:

Caractere	Descrição
@	Espaço reservado para caractere. Exibe um caractere ou um espaço. Se a seqüência possuir um caractere na posição em que aparece o símbolo de arroba (@), na seqüência de caracteres de formato, esse caractere será exibido; caso contrário, será exibido um espaço nessa posição. Os espaços reservados são preenchidos da direita para a esquerda, a não ser que exista um caractere de ponto de exclamação (!) na seqüência de caracteres de formato.
&	Espaço reservado para caractere. Exibe um caractere ou nada. Se a seqüência possuir um caractere na posição em que aparece o E comercial (&), esse caractere será exibido; caso contrário, nada será exibido. Os espaços reservados são preenchidos da direita para a esquerda, a não ser que exista um caractere de ponto de exclamação (!) na seqüência de caracteres de formato.
<	Forçar minúsculas. Exibe todos os caracteres em formato de minúsculas.
>	Forçar maiúsculas. Exibe todos os caracteres em formato de maiúsculas.
!	Forçar preenchimento de espaços reservados, da esquerda para a direita. O padrão é preencher os espaços reservados, da direita para a esquerda.


Formatos diferentes para  valores de seqüências de caracteres diferentes(função Format)

Uma expressão de formato para seqüências de caracteres pode ter uma seção ou duas seções separadas por um ponto-e-vírgula (;).

Se você usar	O result será
Uma única seção	O formato se aplicará a todos os dados da seqüência de caracteres.
Duas seções	A primeira seção se aplicará aos dados da seqüência de caracteres; a segunda, a valores Null e a seqüências de caracteres de comprimento zero ("").


Função Hex

Retorna uma String que representa o valor hexadecimal de um número.

Sintaxe

Hex(number)

O argumento number necessário é qualquer expressão numérica ou expressão de seqüência de caracteres válida.

Comentários

Se number ainda não for um número inteiro, será arredondado para o número inteiro mais próximo antes de ser avaliado.

Se number for	Hex retornará
Null	Null
Empty	Zero (0)
Qualquer outro número	Até oito caracteres hexadecimais
É possível representar diretamente os números hexadecimais, precedendo-os, no intervalo correto, com &H. Por exemplo, &H10 representa o decimal 16 em notação hexadecimal.


Função InStr

Retorna uma Variant (Long) que especifica a posição da primeira ocorrência de uma seqüência de caracteres dentro de outra.

Sintaxe

InStr([start, ]string1, string2[, compare])

A sintaxe da função InStr tem os seguintes argumentos:

Parte	Descrição
start	Opcional. Expressão numérica que define a posição inicial de cada pesquisa. Se omitido, a pesquisa iniciará na posição do primeiro caractere. Se start contiver Null, ocorrerá um erro. O argumento start será necessário, se compare for especificado.
string1	Obrigatória. Expressão de seqüência sendo pesquisada.
string2	Obrigatória. Expressão de seqüência de caracteres procurada.
compare	Opcional. Especifica o tipo de comparação de seqüência de caracteres. Se compare for Null, ocorrerá um erro. Se compare for omitido, a configuração Option Compare determinará o tipo de comparação. Especifique um LCID (LocaleID) válido para usar regras específicas da localidade na comparação.
Definições

As configurações do argumento compare são as seguintes:

Constante	Valor	Descrição
vbUseCompareOption	-1	Executa uma comparação usando a configuração da instrução Option Compare.
vbBinaryCompare	0	Executa uma comparação binária.
vbTextCompare	1	Executa uma comparação textual.
vbDatabaseCompare	2	Somente Microsoft Access. Efetua uma comparação, com base nas informações existentes no banco de dados.
Valores retornados

Se	A InStr retornará
string1 tiver comprimento zero	0
string1 for Null	Null
string2 tiver comprimento zero	start
string2 for Null	Null
string2 não for encontrado	0
string2 for encontrado dentro de string1	A posição em que a correspondência foi encontrada
start > string2	0
Comentários

A função InStrB é usada com os dados de bytes contidos em uma seqüência de caracteres. Em vez de retornar a posição de caractere da primeira ocorrência de uma seqüência de caracteres dentro de outra, InStrB retorna a posição de byte.


Função LCase

Retorna uma String convertida em letras minúsculas.

Sintaxe

LCase(string)

O argumento string obrigatório é qualquer expressão de seqüência válida. Se string contiver Null, será retornado Null.

Comentários

Somente as letras maiúsculas são convertidas em minúsculas; todas as letras minúsculas e os caracteres diferentes de letras permanecem inalterados.


Função Left

Retorna uma Variant (String) que contém um número especificado de caracteres, a partir do lado esquerdo de uma seqüência de caracteres.

Sintaxe

Left(string, length)

A sintaxe da função Left tem os seguintes argumentos nomeados:

Parte	Descrição
string	Obrigatória. Expressão de seqüência a partir da qual são retornados os caracteres mais à esquerda. Se string contiver Null, será retornado Null.
length	Obrigatória; Variant (Long). Expressão numérica que indica a quantidade de caracteres a ser retornada. Se for 0, será retornada uma seqüência de caracteres de comprimento zero (""). Quando for maior ou igual ao número de caracteres em string, será retornada a seqüência de caracteres inteira.
Comentários

Para determinar o número de caracteres em  string, use a função Len.

Observação   Use a função LeftB com os dados de bytes contidos em uma seqüência de caracteres. Em vez de especificar o número de caracteres a ser retornado, length especifica o número de bytes.


Função Len

Retorna um Long que contém o número de caracteres existentes em uma seqüência de caracteres ou o número de bytes necessários para armazenar uma variável.

Sintaxe

Len(string | varname)

A sintaxe da função Len tem as seguintes partes:

Parte	Descrição
String	Qualquer expressão de seqüência válida. Se string contiver Null, será retornado Null.
Varname	Qualquer nome de variável válido. Se varname contiver Null, será retornado Null. Se varname for uma Variant, Len tratará essa variante como uma String e retornará sempre o número de caracteres nela contidos.
Comentários

Deve ser especificado um (e somente um) dos dois argumentos possíveis. Com tipos definidos pelo usuário, Len retornará o tamanho conforme será gravado no arquivo.

Observação   Use a função LenB com dados de bytes contidos em uma seqüência de caracteres, como em idiomas do conjunto de caracteres de byte duplo (DBCS, Double-Byte Character Set). Em vez de retornar o número de caracteres existentes em uma seqüência de caracteres, LenB retorna o número de bytes usados para representar essa seqüência. Com tipos definidos pelo usuário, LenB retorna o tamanho de memória, inclusive quaisquer preenchimentos entre os elementos. Para obter um exemplo de código que usa a função LenB, examine o segundo exemplo no tópico de exemplos.

Observação   É possível que a função Len não consiga determinar o número real de bytes de armazenamento necessários, quando usada com seqüências de comprimento variável nos tipos de dados definidos pelo usuário.


Instrução LSet

Alinha uma seqüência de caracteres à esquerda dentro de uma variável de seqüência de caracteres ou copia uma variável de um tipo definido pelo usuário para outra variável de outro tipo definido pelo usuário.

Sintaxe

LSet stringvar = string

LSet varname1 = varname2

A sintaxe da instrução LSet tem as seguintes partes:

Parte	Descrição
stringvar	Obrigatória. Nome da variável de seqüência de caracteres.
string	Obrigatória. Expressão de seqüência a ser alinhada à esquerda dentro de stringvar.
varname1	Obrigatória. Nome da variável de destino do tipo definido pelo usuário.
varname2	Obrigatória. Nome da variável de origem do tipo definido pelo usuário.
Comentários

LSet substitui todos os caracteres restantes em stringvar, por espaços .

Se string for mais extenso que stringvar, LSet inserirá somente os caracteres da extrema esquerda, até o comprimento de stringvar, em stringvar.

Aviso   Não é recomendável o uso da função LSet para copiar uma variável de um tipo definido pelo usuário para uma variável de outro tipo definido pelo usuário. Copiar dados de um tipo de dados para um espaço reservado para outro tipo de dados pode provocar resultados imprevisíveis.

Ao copiar uma variável de um tipo definido pelo usuário para outro, os dados binários de uma variável são copiados para o espaço em memória do outro, ignorando os tipos de dados especificados para os elementos.


Funções LTrim, RTrim e Trim

Retorna uma Variant (String) que contém uma cópia de uma seqüência de caracteres especificada, sem espaços à esquerda (LTrim), espaços à direita (RTrim) ou sem espaços à esquerda e precedentes (Trim).

Sintaxe

LTrim(string)

RTrim(string)

Trim(string)

O argumento string obrigatório é qualquer expressão de seqüência válida. Se string contiver Null, será retornado Null.


Função Mid

Retorna uma Variant (String) que contém um número especificado de caracteres de uma seqüência de caracteres.

Sintaxe

Mid(string, start[, length])

A sintaxe da função Mid tem os seguintes argumentos nomeados:

Parte	Descrição
string	Obrigatória. Expressão de seqüência da qual são retornados os caracteres. Se string contiver Null, será retornado Null.
start	Obrigatória; Long. A posição do caractere em string onde a parte a ser considerada começa. Se start for maior que o número de caracteres existentes em string, a função Mid retornará uma seqüência de caracteres de comprimento zero ("").
length	Opcional; Variant (Long). Número de caracteres a ser retornado. Se omitido ou se existirem menos caracteres do que os de length no texto (inclusive  o caractere em start), serão retornados todos os caracteres a partir da posição start até o final da seqüência de caracteres.
Comentários

Para determinar o número de caracteres em  string, use a função Len.

Observação   Use a função MidB com dados de bytes contidos em uma seqüência de caracteres, como em idiomas com conjunto de caracteres de byte duplo. Em vez de especificar o número de caracteres, os argumentos especificam o número de bytes. Para obter um exemplo de código que usa a função MidB, examine o segundo exemplo apresentado no tópico de exemplos.


Instrução Mid

Substitui um número especificado de caracteres em uma variável Variant (String) pelos caracteres de outra seqüência de caracteres.

Sintaxe

Mid(stringvar, start[, length]) = string

A sintaxe da instrução Mid tem as seguintes partes:

Parte	Descrição
stringvar	Obrigatória. Nome da variável de seqüência de caracteres a ser modificado.
start	Obrigatória; Variant (Long). Posição de caractere em stringvar, em que iniciará a substituição do texto.
length	Opcional; Variant (Long). Número de caracteres a ser substituído. Se omitido, será usada a string inteira.
string	Obrigatória. Expressão de seqüência que substitui parte de stringvar.
Comentários

O número de caracteres substituído é sempre menor ou igual ao número de caracteres em stringvar.

Observação   Use a instrução MidB com dados de bytes contidos em uma seqüência de caracteres. Na instrução MidB, start especifica a posição de byte dentro de stringvar, em que iniciará a substituição e length especifica os números de bytes a serem substituídos.


Função Oct

Retorna uma Variant (String) que representa o valor octal de um número.

Sintaxe

Oct(number)

O argumento number necessário é qualquer expressão numérica ou expressão de seqüência de caracteres válida.

Comentários

Se number ainda não for um número inteiro, será arredondado para o número inteiro mais próximo antes de ser avaliado.

Se number for	Oct retornará
Null	Null
Empty	Zero (0)
Qualquer outro número	Até 11 caracteres octais
É possível representar diretamente os números octais, precedendo-os, no intervalo correto, com &O. Por exemplo, &O10 é a notação octal do decimal 8.


Função Right

Retorna uma Variant (String) que contém um número especificado de caracteres, a partir do lado direito de uma seqüência de caracteres.

Sintaxe

Right(string, length)

A sintaxe da função Right tem os seguintes argumentos nomeados:

Parte	Descrição
string	Obrigatória. Expressão de seqüência da qual serão retornados os caracteres da extrema direita. Se string contiver Null, será retornado Null.
length	Obrigatória; Variant (Long). Expressão numérica que indica a quantidade de caracteres a ser retornada. Se for 0, será retornada uma seqüência de caracteres de comprimento zero (""). Quando for maior ou igual ao número de caracteres em string, será retornada a seqüência de caracteres inteira.
Comentários

Para determinar o número de caracteres em  string, use a função Len.

Observação   Use a função RightB com os dados de bytes contidos em uma seqüência de caracteres. Em vez de especificar o número de caracteres a ser retornado, length especifica o número de bytes.


Instrução RSet

Alinha uma seqüência de caracteres à direita dentro de uma variável de seqüência de caracteres.

Sintaxe

RSet stringvar = string

A sintaxe da instrução RSet tem as seguintes partes:

Parte	Descrição
stringvar	Obrigatória. Nome da variável de seqüência de caracteres.
string	Obrigatória. Expressão de seqüência a ser alinhada à direita dentro de stringvar.
Comentários

Se stringvar for mais extensa que string, RSet substituirá todos os caracteres restantes em stringvar por espaços, até o início.

Observação   Não é possível usar a função Rset com tipos definidos pelo usuário.


Função Space

Retorna uma Variant (String) que consiste no número de espaços especificado.

Sintaxe

Space(number)

O argumento number necessário é o número de espaços necessários na seqüência de caracteres.

Comentários

A função Space é adequada para formatar a saída e limpar dados em seqüências de caracteres de comprimento fixo.


Função Str

Retorna uma representação de Variant (String) de um número.

Sintaxe

Str(number)

O argumento number necessário é um Long que contém qualquer expressão numérica válida.

Comentários

Quando os números são convertidos em seqüências de caracteres, é sempre reservado um espaço à esquerda para o sinal do argumento number. Se number for positivo, a seqüência retornada conterá um espaço à esquerda e estará implícito um sinal mais.

Use a função Format para converter os valores numéricos que devem ser formatados como datas, horas ou moeda ou em outros formatos definidos pelo usuário. Ao contrário de  Str, a função Format não inclui um espaço à esquerda para o sinal de number.

Observação   A função Str reconhece somente o ponto (.) como um separador decimal válido. Quando separadores decimais diferentes puderem ser usados (por exemplo, em aplicativos internacionais), use CStr para converter um número em uma seqüência de caracteres.


Função StrComp

Retorna uma Variant (Integer) que indica o resultado de uma comparação de seqüências de caracteres.

Sintaxe

StrComp(string1, string2[, compare])

A sintaxe da função StrComp tem os seguintes argumentos nomeados:

Parte	Descrição
string1	Obrigatória. Qualquer expressão de seqüência válida.
string2	Obrigatória. Qualquer expressão de seqüência válida.
compare	Opcional. Especifica o tipo de comparação de seqüências de caracteres. Se o argumento compare for Null, ocorrerá um erro. Se compare for omitido, a configuração Option Compare determinará o tipo de comparação.
Definições

As configurações do argumento compare são as seguintes:

Constante	Valor	Descrição
vbUseCompareOption	-1	Executa uma comparação usando a configuração da instrução Option Compare.
vbBinaryCompare	0	Executa uma comparação binária.
vbTextCompare	1	Executa uma comparação textual.
vbDatabaseCompare	2	Somente Microsoft Access. Efetua uma comparação, com base nas informações existentes no banco de dados.
Valores retornados

A função StrComp possui os seguintes valores de retorno:

Se	A StrComp retornará
string1 for menor que string2	-1
string1 for igual a string2	0
string1 for maior que o string2	1
string1 ou string2 for Null	Null


Função StrConv

Retorna uma Variant (String) convertida conforme especificado.

Sintaxe

StrConv(string, conversion, LCID)

A sintaxe da função StrConv tem os seguintes argumentos nomeados:

Parte	Descrição
string	Obrigatória. A Expressão de seqüência a ser convertida.
conversion	Obrigatória. Integer. A soma dos valores que especificam o tipo de conversão a ser executada.
LCID	Opcional. A LocaleID, se diferente da LocaleID do sistema. (A LocaleID do sistema é o padrão.)
Definições

As configurações do argumento conversion são as seguintes:

Constante	Valor	Descrição
vbUpperCase	1	Converte a seqüência em caracteres maiúsculos.
vbLowerCase	2	Converte a seqüência em caracteres minúsculos.
vbProperCase	3	Converte a primeira letra de cada palavra na seqüência em letra maiúscula.
vbWide*	4*	Converte os caracteres estreitos (byte único) na seqüência em caracteres largos (byte duplo).
vbNarrow*	8*	Converte os caracteres largos (byte duplo) na seqüência em caracteres estreitos (byte único).
vbKatakana**	16**	Converte os caracteres Hiragana na seqüência em caracteres Katakana.
vbHiragana**	32**	Converte os caracteres Katakana na seqüência em caracteres Hiragana.
vbUnicode	64	Converte a seqüência em Unicode, usando a página de código padrão do sistema. (Não disponível no Macintosh.)
vbFromUnicode	128	Converte a seqüência de Unicode para a página de código padrão do sistema. (Não disponível no Macintosh.)
*	Aplica-se a localidades do Extremo Oriente.

**	Aplica-se somente ao Japão.

Observação   Essas constantes são especificadas pelo Visual Basic for Applications. Conseqüentemente, podem ser usadas em qualquer parte do código, em substituição aos valores reais. A maioria delas pode ser combinada, como em vbUpperCase + vbWide, exceto quando forem mutuamente exclusivas, como em vbUnicode + vbFromUnicode. As constantes vbWide, vbNarrow, vbKatakana e vbHiragana provocam erros de tempo de execução, quando usadas em localidades em que não se aplicam.

Examine a seguir os separadores de palavras válidos para maiúsculas/minúsculas adequadas: Null (Chr$(0)), tab horizontal (Chr$(9)), alimentação de linha (Chr$(10)), tab vertical (Chr$(11)), alimentação de página (Chr$(12)), retorno de carro (Chr$(13)), espaço (SBCS) (Chr$(32)). O valor real de um espaço varia de acordo com o país para DBCS.

Comentários

Ao converter uma matriz de Byte, em formato ANSI, para uma seqüência de caracteres, use a função StrConv. Ao converter uma matriz desse tipo para o formato Unicode, use uma instrução de atribuição.


Função String

Retorna uma Variant (String) que contém uma seqüência de caracteres repetida com o comprimento especificado.

Sintaxe

String(number, character)

A sintaxe da função String tem os seguintes argumentos nomeados:

Parte	Descrição
number	Obrigatória; Long. Comprimento da seqüência de caracteres retornada. Se number contiver Null, será retornado Null.
character	Obrigatória; Variant. Código de caractere especificando o caractere ou  expressão de seqüência cujo primeiro caractere é usado para formar a seqüência de caracteres de retorno. Se character contiver Null, será retornado Null.
Comentários

Se você especificar um número para  character maior que 255,  String converterá esse número em um código de caractere válido, através da fórmula:

character Mod 256


Função UCase

Retorna uma Variant (String) que contém a seqüência de caracteres especificada, convertida em letras maiúsculas.

Sintaxe

UCase(string)

O argumento string obrigatório é qualquer expressão de seqüência válida. Se string contiver Null, será retornado Null.

Comentários

Somente as letras minúsculas são convertidas em maiúsculas; todas as letras maiúsculas e os caracteres diferentes de letras permanecem inalterados.


Palavra-chave por tarefa

Categoria	Descrição
Cálculos matemáticos	Execução de cálculos trigonométricos e matemáticos.
Conversão	Conversão de números e tipos de dados.
Datas e horas	Conversão e uso de expressões de data e hora.
Diretivas de compilador	Controle do comportamento do compilador.
Diretórios e arquivos	Controle do sistema de arquivos e processamento de arquivos.
Entrada e saída	Recebimento de entrada e exibição ou impressão de saída.
Erros	Interceptação e retorno dos valores dos erros.
Finanças	Execução de cálculos financeiros.
Fluxo de controle	Fluxo do procedimento de loop e controle.
Manipulação de seqüência de caracteres	Manipulação de seqüências de caracteres e dados do tipo de seqüência.
Matrizes	Criação, definição e uso de matrizes.
Miscelânea	Início de outros aplicativos e processamento de eventos.
Operadores	Comparação de expressões e outras operações.
Tipos de dados	Tipos de dados e subtipos de variante.
Variáveis e constantes	Declaração e definição de variáveis e constantes.


Resumo de palavra-chave de matrizes

Ação	Palavra-chave
Verificar uma matriz.	IsArray
Criar uma matriz.	Array
Alterar o limite inferior padrão.	Option Base
Declarar e inicializar uma matriz.	Dim, Private, Public, ReDim, Static
Encontrar os limites de uma matriz.	LBound, UBound
Reinicializar uma matriz.	Erase, ReDim


Resumo de palavra-chave do objeto Collection

Ação	Palavra-chave
Criar um objeto Collection.	Collection
Adicionar um objeto a uma coleção.	Add
Remover um objeto de uma coleção.	Remove
Fazer referência a um item em uma coleção.	Item


Resumo de palavra-chave das diretivas de compilador

Ação	Palavra-chave
Definir constante de compilador.	#Const
Compilar blocos selecionados do código.	#If...Then...#Else


Resumo de palavra-chave do fluxo de controle

Ação	Palavra-chave
Desvio.	GoSub...Return, GoTo, On Error, On...GoSub, On...GoTo
Suspender ou sair do programa.	DoEvents, End, Exit, Stop
Efetuar loop.	Do...Loop, For...Next, For Each...Next, While...Wend, With
Tomar decisões.	Choose, If...Then...Else, Select Case, Switch
Usar procedimentos.	Call, Function, Property Get, Property Let, Property Set, Sub


Resumo de palavra-chave de conversão

Ação	Palavra-chave
Valor ANSI para seqüência de caracteres.	Chr
Seqüência de caracteres para minúsculas ou maiúsculas.	Format, LCase, Ucase
Data para número serial.	DateSerial, DateValue
Número decimal para outras bases.	Hex, Oct
Número para seqüência de caracteres.	Format, Str
Um tipo de dados para outro.	CBool, CByte, CCur, CDate, CDbl, CDec, CInt, CLng, CSng, CStr, CVar, CVErr, Fix, Int
Data para dia, mês, dia da semana ou ano.	Day, Month, Weekday, Year
Tempo para hora, minuto ou segundo.	Hour, Minute, Second
Seqüência de caracteres para valor ASCII.	Asc
Seqüência de caracteres para número.	Val
Hora para número serial.	TimeSerial, TimeValue


Resumo de palavra-chave de tipos de dados

Ação	Palavra-chave
Converter entre tipos de dados.	CBool, CByte, CCur, CDate, CDbl, CDec, CInt, CLng, CSng, CStr, CVar, CVErr, Fix, Int
Definir tipos de dados intrínsecos.	Boolean, Byte, Currency, Date, Double, Integer, Long, Object, Single, String, Variant (default)
Verificar tipos de dados.	IsArray, IsDate, IsEmpty, IsError, IsMissing, IsNull, IsNumeric, IsObject


Resumo de palavra-chave de datas e horas

Ação	Palavra-chave
Obter a data ou hora atual.	Date, Now, Time
Executar cálculos de data.	DateAdd, DateDiff, DatePart
Retornar uma data.	DateSerial, DateValue
Retornar um horário.	TimeSerial, TimeValue
Definir a data ou hora.	Date, Time
Temporizar um processo.	Timer


Resumo de palavra-chave de diretórios e arquivos

Ação	Palavra-chave
Alterar diretório ou pasta.	ChDir
Alterar a unidade.	ChDrive
Copiar um arquivo.	FileCopy
Criar diretório ou pasta.	MkDir
Remover diretório ou pasta.	RmDir
Renomear um arquivo, diretório ou pasta.	Name
Retornar caminho atual.	CurDir
Retornar marcação de data/hora do arquivo.	FileDateTime
Retornar atributos de arquivo, diretório, rótulo.	GetAttr
Retornar comprimento de arquivo.	FileLen
Retornar nome de arquivo ou rótulo de volume.	Dir
Definir informações de atributo de um arquivo.	SetAttr


Resumo de palavra-chave de erros

Ação	Palavra-chave
Gerar erros em tempo de execução.	Clear, Error, Raise
Obter mensagens de erro.	Error
Fornecer informações sobre o erro.	Err
Retornar variante Error.	CVErr
Interceptar erros durante tempo de execução.	On Error, Resume
Verificação de tipo.	IsError


Resumo de palavra-chave de finanças

Ação	Palavra-chave
Calcular depreciação.	DDB, SLN, SYD
Calcular valor futuro.	FV
Calcular taxa de juros.	Rate
Calcular taxa de retorno interna.	IRR, MIRR
Calcular número de períodos.	NPer
Calcular pagamentos.	IPmt, Pmt, PPmt
Calcular valor presente.	NPV, PV


Resumo de palavra-chave de entrada e saída

Ação	Palavra-chave
Acessar ou criar um arquivo.	Open
Fechar arquivos.	Close, Reset
Controlar a aparência da saída.	Format, Print, Print #, Spc, Tab, Width #
Copiar um arquivo.	FileCopy
Obter informações sobre um arquivo.	EOF, FileAttr, FileDateTime, FileLen, FreeFile, GetAttr, Loc, LOF, Seek
Gerenciar arquivos.	Dir, Kill, Lock, Unlock, Name
Ler um arquivo.	Get, Input, Input #, Line Input #
Retornar tamanho de um arquivo.	FileLen
Definir ou obter atributos de arquivo	FileAttr, GetAttr, SetAttr
Definir posição de leitura-gravação em um arquivo.	Seek
Gravar em um arquivo.	Print #, Put, Write #


Resumo de palavra-chave de cálculos matemáticos

Ação	Palavra-chave
Derivar funções trigonométricas.	Atn, Cos, Sin, Tan
Cálculos gerais.	Exp, Log, Sqr
Gerar números aleatórios.	Randomize, Rnd
Obter valor absoluto.	Abs
Obter o sinal de uma expressão.	Sgn
Efetuar conversões numéricas.	Fix, Int


Resumo de palavra-chave de miscelânea

Ação	Palavra-chave
Processar eventos pendentes.	DoEvents
Executar outros programas.	AppActivate, Shell
Enviar pressionamentos de teclas para um aplicativo.	SendKeys
Emitir um alarme sonoro a partir do computador.	Beep
Sistema.	Environ
Fornecer uma seqüência de caracteres da linha de comando.	Command
Automação.	CreateObject, GetObject
Cor.	QBColor, RGB


Resumo de palavra-chave de operadores

Ação	Palavra-chave
Aritmética.	^, – , *, /, \, Mod, +, &, =
Comparação.	=, <>, <, >, <=, >=, Like, Is
Operações lógicas.	Not, And, Or, Xor, Eqv, Imp


Resumo de palavra-chave de Registro

Ação	Palavra-chave
Excluir configurações do programa.	DeleteSetting
Ler configurações do programa.	GetSetting, GetAllSettings
Salvar configurações do programa.	SaveSetting


Resumo de palavra-chave de manipulação de seqüência de caracteres

Ação	Palavra-chave
Comparar duas seqüências de caracteres.	StrComp
Converter seqüências de caracteres.	StrConv
Converter para minúsculas ou maiúsculas.	Format, LCase, Ucase
Criar seqüências de caracteres repetidos.	Space, String
Encontrar comprimento de uma seqüência de caracteres.	Len
Formatar uma seqüência de caracteres.	Format
Justificar uma seqüência de caracteres.	LSet, Rset
Manipular seqüências de caracteres.	InStr, Left, LTrim, Mid, Right, RTrim, Trim
Definir regras de comparação de seqüência de caracteres.	Option Compare
Trabalhar com valores ASCII e ANSI.	Asc, Chr


Resumo de palavra-chave de variáveis e constantes

Ação	Palavra-chave
Atribuir valor.	Let
Declarar variáveis ou constantes.	Const, Dim, Private, Public, New, Static
Declarar módulo como particular.	Option Private Module
Obter informações sobre uma variante.	IsArray, IsDate, IsEmpty, IsError, IsMissing, IsNull, IsNumeric, IsObject, TypeName, VarType
Fazer referência ao objeto atual.	Me
Solicitar declarações de variáveis explícitas.	Option Explicit
Definir tipo de dados padrão.	Deftype


Erros interceptáveis

Os erros interceptáveis podem ocorrer quando um aplicativo está sendo executado. Alguns erros interceptáveis podem ocorrer também durante o desenvolvimento ou o tempo de compilação. Você pode testar e responder a erros interceptáveis usando a instrução On Error e o objeto Err. Números de erro, não usados no intervalo 1 – 1000, são reservados para uso futuro do Visual Basic.

Código	Mensagem
3	Retornar sem GoSub
5	Chamada de procedimento inválida
6	Estouro
7	Sem memória
9	Subscrito fora do intervalo
10	Esta matriz está fixa ou temporariamente bloqueada
11	Divisão por zero
13	Tipos incompatíveis
14	Sem espaço para seqüência de caracteres
16	Expressão muito complexa
17	Não é possível executar a operação solicitada
18	Ocorreu uma interrupção do usuário
20	Continuar sem erro
28	Sem espaço para pilha
35	Sub, Function ou Property não definido
47	Clientes de aplicativo da DLL ou de recurso de código em excesso
48	Erro ao carregar recurso de código ou DLL
49	Convenção de chamada de recurso de código ou DLL incorreta
51	Erro interno
52	Nome ou número de arquivo incorreto
53	Arquivo não encontrado
54	Modo de arquivo incorreto
55	Arquivo já aberto
57	Erro de E/S do dispositivo
58	O arquivo já existe
59	Comprimento de registro incorreto
61	Disco cheio
62	Entrada após fim de arquivo
63	Número de registro incorreto
67	Arquivos em excesso
68	Dispositivo não disponível
70	Permissão negada
71	Disco não está pronto
74	Não é possível renomear com unidade diferente
75	Erro de acesso ao Caminho/Arquivo
76	Caminho não encontrado
91	Variável Object ou variável de bloco With não definida
92	For Loop não inicializado
93	Seqüência de caracteres padrão inválida
94	Uso  de Null inválido
97	Não é possível chamar o procedimento Friend ou um objeto que não seja uma ocorrência da classe de definição
98	Uma chamada de propriedade ou método não pode incluir uma referência a um objeto particular, tanto como um argumento ou como um valor de retorno
298	O recurso ou DLL do sistema não pôde ser carregado
320	Não é possível usar nomes de dispositivo de caracteres em nomes de arquivo especificados
321	Formato de arquivo inválido
322	Não é possível criar o arquivo temporário necessário
325	Formato inválido no arquivo de recursos
327	Valor de dados nomeado não encontrado
328	Parâmetro não permitido; não é possível gravar matrizes
335	Não foi possível acessar o Registro do sistema
336	Componente não registrado corretamente
337	Componente não encontrado
338	O componente  não foi executado corretamente
360	Objeto já carregado
361	Não é possível carregar ou descarregar este objeto
363	Controle especificado não encontrado
364	O objeto foi descarregado
365	Não é possível descarregar dentro deste contexto
368	O arquivo especificado está desatualizado. Este programa requer uma versão mais recente
371	O objeto especificado não pode ser usado como um formulário de proprietário para Show
380	Valor de propriedade inválido
381	Índice de matriz de propriedades inválido
382	Property Set não pode ser executado em tempo de execução
383	Property Set não pode ser usado com uma propriedade somente leitura
385	É necessário o índice de matriz de propriedades
387	Property Set não permitido
393	Property Get não pode ser executado em tempo de execução
394	Property Get não pode ser executado na propriedade somente gravação
400	O formulário já está sendo exibido; não é possível exibir de forma modal
402	O código deve fechar primeiro o formulário modal superior
419	Permissão para usar o objeto negada
422	Propriedade não encontrada
423	Propriedade ou método não encontrado
424	Objeto obrigatório
425	Uso inválido de objeto
429	O componente não pode criar objeto ou referência de retorno para este objeto
430	A classe não suporta Automação
432	Nome do arquivo ou nome da classe não encontrado durante a operação de Automação
438	O objeto não suporta esta propriedade ou método
440	Erro de automação
442	A conexão com a biblioteca de tipos ou biblioteca de objetos para o processo remoto foi perdida
443	O objeto de automação não possui um valor padrão
445	O objeto não suporta esta ação
446	O objeto não suporta argumentos nomeados
447	O objeto não aceita a definição  de localidade atual
448	Argumento nomeado não encontrado
449	Argumento não opcional ou atribuição de propriedade inválida
450	Número incorreto de argumentos ou atribuição de propriedade inválida
451	O objeto, não  uma coleção
452	Ordinal inválido
453	Código de  especificado não encontrado
454	Recurso de código não encontrado
455	Erro de bloqueio do recurso de código
457	Esta chave já está associada a um elemento desta coleção
458	A variável usa um tipo não suportado no Visual Basic
459	Este componente não suporta o conjunto de eventos
460	Formato inválido da Área de transferência
461	Método ou membro de dados não encontrado
462	A máquina do servidor remoto não existe ou não está disponível
463	Classe não registrada na máquina local
480	Não é possível criar uma imagem AutoRedraw
481	Figura inválida
482	Erro na impressora
483	A propriedade especificada não é suportada pelo driver da impressora
484	Problemas ao obter informações da impressora a partir do sistema. Certifique-se de que a impressora esteja configurada corretamente
485	Tipo de figura inválido
486	Não é possível imprimir a imagem do formulátio neste tipo de impressora
520	Não é possível esvaziar a Área de transferência
521	Não é possível abrir a Área de transferência
735	Não é possível salvar arquivo no diretório TEMP
744	Texto de pesquisa não encontrado
746	Substituições muito longas
31001	Sem memória
31004	Nenhum objeto
31018	A classe não está definida
31027	Não é possível ativar o objeto
31032	Não é possível criar objeto incorporado
31036	Erro ao salvar no arquivo
31037	Erro ao carregar do arquivo


Operador AddressOf

Um operador unário que faz com que o endereço do procedimento que ele precede seja passado para um procedimento de API(Aplication Programming Interface, Interface de programação de aplicativo) que espera um indicador de função nessa posição na lista de argumentos.

Sintaxe

AddressOf procedurename

O procedurename requerido especifica o procedimento cujo endereço vai ser passado. Ele deve representar um procedimento em um módulo padrão no projeto no qual a chamada é feita.

Comentários

Quando um nome de procedimento aparece em uma lista de argumentos, geralmente o procedimento é avaliado e o endereço do valor de retorno do procedimento é passado. O AddressOf permite que o endereço do procedimento seja passado para uma função API(Aplication Programming Interface, Interface de programação de aplicativo) do Windows em uma biblioteca de vínculo dinâmico (DLL), em vez de passar o valor de retorno do procedimento. A função de API(Aplication Programming Interface, Interface de programação de aplicativo)  pode então usar o endereço para chamar o procedimento Basic, um processo conhecido como retorno de chamada. O operador AddressOf aparece somente na chamada para o procedimento de API(Aplication Programming Interface, Interface de programação de aplicativo) .

Embora você possa usar AddressOf para passar indicadores de procedimento entre procedimentos Basic, não é possível chamar uma função através de um indicador de dentro do Basic. Isso significa, por exemplo, que uma classe escrita em Basic não pode fazer uma chamada de retorno para seu controlador usando um indicador desse tipo. Quando usar AddressOf para passar um indicador de procedimento entre procedimentos dentro do Basic, o parâmetro do procedimento chamado deve ser As Long.

Aviso   O uso de AddressOf pode causar resultados imprevisíveis se você não entender completamente o conceito de chamada de retornos da função. Você deve compreender como funciona a parte Basic da chamada de retorno e também o código da DLL na qual está passando o endereço da função. A depuração de tais interações é difícil porque o programa é executado no mesmo processo que o ambiente de desenvolvimento. Em alguns casos, a depuração sistemática pode não ser possível.

Observação   Você pode criar seus próprios protótipos de função de chamada de retorno em DLLs compiladas com o Microsoft Visual C++ (ou ferramentas similares). Para trabalhar com AddressOf, seu protótipo deve usar a convenção de chamada __stdcall. A convenção de chamada padrão (__cdecl) não funcionará com AddressOf.

Como o emissor de uma chamada de retorno não está dentro de seu programa, é importante que um erro no procedimento de chamada de retorno não seja distribuído novamente para o emissor. Isso pode ser conseguido colocando a instrução On Error Resume Next no início do procedimento de chamada de retorno .


Método Assert

Suspende condicionalmente a execução na linha na qual o método aparece .

Sintaxe

object.Assert booleanexpression

A sintaxe do método Assert possui o seguinte qualificador de objeto e argumento:

Parte	Descrição
Object	Obrigatória. Sempre o objeto Debug.
Booleanexpression	Obrigatória. Uma expressão que avalia como True ou False.
Comentários

As chamadas Assert funcionam somente dentro do ambiente de desenvolvimento. Quando o módulo é compilado para um executável, as chamadas de método no objeto Debug são omitidas.

Toda booleanexpression é sempre avaliada. Por exemplo, mesmo se a primeira parte de uma expressão And for avaliada como False, a expressão inteira será avaliada.


Friend <keyword>
Friend

Modifica a definição de um procedimento em um módulo de formulário ou módulo de classe para que o procedimento possa ser chamado a partir de módulos que estão fora da classe, mas fazem parte do projeto, dentro do qual a classe está definida. Procedimentos Friend não podem ser usados em módulos padrão.

Sintaxe

[Private | Friend | Public] [Static] [Sub | Function | Property] procedurename

O procedurename requerido é o nome do procedimento que está visível em todo o projeto, mas não está visível para os controladores da classe.

Comentários

Procedimentos Public em uma classe podem ser chamados de qualquer parte, mesmo pelos controladores de ocorrências da classe. A declaração de um procedimento Private impede que os controladores do objeto chamem o procedimento, mas também impedem que o procedimento seja chamado de dentro do projeto no qual a própria classe está definida. O Friend torna o procedimento visível em todo o projeto, mas não para um controlador de uma ocorrência do objeto. O Friend pode aparecer apenas em módulos de formulário e módulos de classe e só pode modificar nomes de procedimento, não variáveis ou tipos. Os procedimentos em uma classe podem acessar os procedimentos Friend de todas as outras classes em um projeto. Procedimentos Friend não aparecem na biblioteca de tipos de sua classe. Um procedimento Friend não pode ser de conexão tardia.


Instrução RaiseEvent

Lança um evento declarado em nível de módulo dentro de uma classe, formulário ou documento.

Sintaxe

RaiseEvent eventname [(argumentlist)]

O eventname requerido é o nome de um evento declarado dentro do módulo e segue as convenções de nomenclatura de variáveis do Basic.

A sintaxe da instrução RaiseEvent tem as seguintes partes:

Parte	Descrição
eventname	Obrigatória. Nome do evento a ser lançado.
argumentlist	Opcional. Lista delimitada por vírgulas de variáveis, matrizes ou expressões. A argumentlist deve ser colocada entre parênteses. Se não houver argumentos, os parênteses deverão ser omitidos.
Comentários

Se o evento não tiver sido declarado dentro do módulo no qual ele foi causado, ocorrerá um erro. O trecho abaixo ilustra uma declaração de evento e um procedimento no qual o evento foi provocado.

' Declarar um evento no nível de módulo, de um módulo de classe

Event LogonCompleted (UserName as String)

Sub

' Causar o evento.

RaiseEvent LogonCompleted ("AntoineJan")

End Sub

Se o evento não tiver argumentos, incluindo parênteses vazios, no RaiseEvent, a chamada do evento causará um erro. Você não pode usar RaiseEvent para lançar eventos que não estão explicitamente declarados no módulo. Por exemplo, se um formulário tiver um evento Click, não será possível lançar seu evento Click usando RaiseEvent. Se você declarar um evento Click no módulo de formulário, ele será a sombra do próprio evento Click do formulário. Você pode chamar o evento Click do formulário usando a sintaxe normal para chamar o evento, mas não usando a instrução RaiseEvent.

O lançamento de eventos é feito na ordem em que as conexões são estabelecidas. Como os eventos podem ter parâmetros ByRef, um processo que se conectar mais tarde pode receber parâmetros que foram alterados por um tratamento de eventos anterior.


Exemplo do operador AddressOf

O exemplo a seguir cria um formulário com uma caixa de listagem contendo uma lista classificada por ordem alfabética das fontes existentes em seu sistema.

Para executar este exemplo, crie um formulário contendo uma caixa de listagem. O código para o formulário é o seguinte:

Option Explicit

Private Sub Form_Load()

    Module1.FillListWithFonts List1

End Sub

Coloque o código a seguir em um módulo. O terceiro argumento na definição da função EnumFontFamilies é um Long que representa um procedimento. O argumento deve conter o endereço do procedimento, e não o valor retornado pelo procedimento. Na chamada para EnumFontFamilies, o terceiro argumento requer que o operador AddressOf retorne o endereço do procedimento EnumFontFamProc, que é o nome do procedimento de chamada de retorno fornecido ao chamar a função API do Windows, EnumFontFamilies. O Windows chama EnumFontFamProc uma vez para cada uma das famílias de fontes no sistema quando você passa AddressOf EnumFontFamProc para EnumFontFamilies. O último argumento passado para EnumFontFamilies especifica a caixa de listagem na qual as informações são exibidas.

'Tipos de enumeração de fonte

Public Const LF_FACESIZE = 32

Public Const LF_FULLFACESIZE = 64

Type LOGFONT

        lfHeight As Long

        lfWidth As Long

        lfEscapement As Long

        lfOrientation As Long

        lfWeight As Long

        lfItalic As Byte

        lfUnderline As Byte

        lfStrikeOut As Byte

        lfCharSet As Byte

        lfOutPrecision As Byte

        lfClipPrecision As Byte

        lfQuality As Byte

        lfPitchAndFamily As Byte

        lfFaceName(LF_FACESIZE) As Byte

End Type

Type NEWTEXTMETRIC

        tmHeight As Long

        tmAscent As Long

        tmDescent As Long

        tmInternalLeading As Long

        tmExternalLeading As Long

        tmAveCharWidth As Long

        tmMaxCharWidth As Long

        tmWeight As Long

        tmOverhang As Long

        tmDigitizedAspectX As Long

        tmDigitizedAspectY As Long

        tmFirstChar As Byte

        tmLastChar As Byte

        tmDefaultChar As Byte

        tmBreakChar As Byte

        tmItalic As Byte

        tmUnderlined As Byte

        tmStruckOut As Byte

        tmPitchAndFamily As Byte

        tmCharSet As Byte

        ntmFlags As Long

        ntmSizeEM As Long

        ntmCellHeight As Long

        ntmAveWidth As Long

End Type

' Sinalizadores do campo ntmFlags

Public Const NTM_REGULAR = &H40&

Public Const NTM_BOLD = &H20&

Public Const NTM_ITALIC = &H1&

'  Sinalizadores de tmPitchAndFamily

Public Const TMPF_FIXED_PITCH = &H1

Public Const TMPF_VECTOR = &H2

Public Const TMPF_DEVICE = &H8

Public Const TMPF_TRUETYPE = &H4

Public Const ELF_VERSION = 0

Public Const ELF_CULTURE_LATIN = 0

'  Máscaras de EnumFonts

Public Const RASTER_FONTTYPE = &H1

Public Const DEVICE_FONTTYPE = &H2

Public Const TRUETYPE_FONTTYPE = &H4

Declare Function EnumFontFamilies Lib "gdi32" Alias _
 "EnumFontFamiliesA" _
 (ByVal hDC As Long, ByVal lpszFamily As String, _
 ByVal lpEnumFontFamProc As Long, LParam As Any) As Long

Declare Function GetDC Lib "usuário32" (ByVal hWnd As Long) As Long

Declare Function ReleaseDC Lib "usuário32" (ByVal hWnd As Long, _
 ByVal hDC As Long) As Long

Function EnumFontFamProc(lpNLF As LOGFONT, lpNTM As NEWTEXTMETRIC, _
 ByVal FontType As Long, LParam As ListBox) As Long

Dim FaceName As String

Dim FullName As String

    FaceName = StrConv(lpNLF.lfFaceName, vbUnicode)

    LParam.AddItem Left$(FaceName, InStr(FaceName, vbNullChar) - 1)

    EnumFontFamProc = 1

End Function

Sub FillListWithFonts(LB As ListBox)

Dim hDC As Long

    LB.Clear

    hDC = GetDC(LB.hWnd)

    EnumFontFamilies hDC, vbNullString, AddressOf EnumFontFamProc, LB

    ReleaseDC LB.hWnd, hDC

End Sub


Exemplo do método Assert

O exemplo a seguir mostra como usar o método Assert. O exemplo requer um formulário contendo dois controles de botão. Os nomes de botão padrão são Command1 e Command2.

Quando o exemplo é executado, clicar no botão Command1 alterna o texto no botão entre 0 e 1. Clicando no Command2 não acontece nada ou resulta em uma declaração, dependendo do valor exibido em Command1. A declaração é interrompida com a última instrução executada, a linha Debug.Assert, realçada.

Option Explicit

Private blnAssert As Boolean

Private intNumber As Integer

Private Sub Command1_Click()

    blnAssert = Not blnAssert

    intNumber = IIf(intNumber <> 0, 0, 1)

    Command1.Caption = intNumber

End Sub

Private Sub Command2_Click()

    Debug.Assert blnAssert

End Sub

Private Sub Form_Load()

    Command1.Caption = intNumber

    Command2.Caption = "Testador de declaração"

End Sub


Exemplo da palavra-chave Friend
Exemplo de Friend

Quando colocado em um módulo de classe, o seguinte código torna a variável de membro dblBalance acessível a todos os usuários da classe dentro do projeto. Qualquer usuário da classe pode obter o valor; somente o código dentro do projeto pode atribuir um valor a essa variável.

Private dblBalance As Double

Public Property Get Balance() As Double

    Balance = dblBalance

End Property

Friend Property Let Balance(dblNewBalance As Double)

    dblBalance = dblNewBalance

End Property


Exemplo da instrução RaiseEvent

O exemplo a seguir usa eventos para contar os segundos durante uma demonstração de corrida dos 100 metros mais rápidos. O código ilustra todos os métodos relacionados ao evento, propriedades e instruções, inclusive a instrução RaiseEvent.

A classe que provoca um evento é a origem do evento e as classes que implementam o evento são os receptores. Uma origem de evento pode ter vários receptores para os eventos gerados. Quando a classe provoca o evento, esse evento é lançado em todas as classes eleitas para coletar eventos para essa ocorrência do objeto.

O exemplo também usa um formulário (Form1) com um botão (Command1), um rótulo (Label1) e duas caixas de texto (Text1 e Text2). Quando você clica no botão, a primeira caixa de texto exibe "De agora em diante" e a segunda inicia a contagem de segundos. Após decorrer o tempo total (9,84 segundos), a primeira caixa de texto exibe "Até agora" e a segunda exibe "9,84"

O código para Form1 especifica os estados inicial e terminal do formulário. Também contém o código executado quando os eventos são provocados.

Option Explicit

Private WithEvents mText As TimerState

Private Sub Command1_Click()

    Text1.Text = "A partir de agora"

    Text1.Refresh

    Text2.Text = "0"

    Text2.Refresh

    Call mText.TimerTask(9.84)

End Sub

Private Sub Form_Load()

    Command1.Caption = "Clique para iniciar o cronômetro"

    Text1.Text = ""

    Text2.Text = ""

    Label1.Caption = "Os 100 metros mais rápidos já executados levou:"

    Set mText = New TimerState

    End Sub

Private Sub mText_ChangeText()

    Text1.Text = "Até agora"

    Text2.Text = "9,84"

End Sub

Private Sub mText_UpdateTime(ByVal dblJump As Double)

    Text2.Text = Str(Format(dblJump, "0"))

    DoEvents

End Sub

O código restante está em um módulo de classe denominado TimerState. Estão incluídas entre os comandos deste módulo as instruções Raise Event.

Option Explicit

Public Event UpdateTime(ByVal dblJump As Double)

Public Event ChangeText()

Public Sub TimerTask(ByVal Duration As Double)

    Dim dblStart As Double

    Dim dblSecond As Double

    Dim dblSoFar As Double

    dblStart = Timer

    dblSoFar = dblStart

    Do While Timer < dblStart + Duration

        If Timer - dblSoFar >= 1 Then

            dblSoFar = dblSoFar + 1

            RaiseEvent UpdateTime(Timer - dblStart)

        End If

    Loop

    RaiseEvent ChangeText

End Sub


Conjunto de caracteres (128 a 255) Conjunto de caracteres (128 a 255)
Conjunto de caracteres (128 a 255)

128	•	160	[espaço]	192	À	224	à
129	•	161	¡	193	Á	225	á
130	•	162	¢	194	Â	226	â
131	•	163	£	195	Ã	227	ã
132	•	164	¤	196	Ä	228	ä
133	•	165	¥	197	Å	229	å
134	•	166	¦	198	Æ	230	æ
135	•	167	§	199	Ç	231	ç
136	•	168	¨	200	È	232	è
137	•	169	©	201	É	233	é
138	•	170	ª	202	Ê	234	ê
139	•	171	«	203	Ë	235	ë
140	•	172	¬	204	Ì	236	ì
141	•	173	­	205	Í	237	í
142	•	174	®	206	Î	238	î
143	•	175	¯	207	Ï	239	ï
144	•	176	°	208	Ð	240	ð
145	‘	177	±	209	Ñ	241	ñ
146	’	178	²	210	Ò	242	ò
147	•	179	³	211	Ó	243	ó
148	•	180	´	212	Ô	244	ô
149	•	181	µ	213	Õ	245	õ
150	•	182	¶	214	Ö	246	ö
151	•	183	·	215	×	247	÷
152	•	184	¸	216	Ø	248	ø
153	•	185	¹	217	Ù	249	ù
154	•	186	º	218	Ú	250	ú
155	•	187	»	219	Û	251	û
156	•	188	¼	220	Ü	252	ü
157	•	189	½	221	Ý	253	ý
158	•	190	¾	222	Þ	254	þ
159	•	191	¿	223	ß	255	ÿ
•	Estes caracteres não são suportados pelo Microsoft Windows.

Os valores na tabela são o padrão do Windows. No entanto, os valores no conjunto de caracteres ANSI acima de 127 são determinados pela página de código específica para seu sistema operacional.


Constantes Date Format

Essas constantes estão disponíveis somente quando o seu projeto tem uma referência explícita à biblioteca de tipos apropriada que contém estas definições de constante.

Constante	Valor	Descrição
vbGeneralDate	0	Exibir uma data e/ou hora. Para números reais, exibir uma data e hora. Se não houver parte fracionária, exibir somente uma data. Se não houver parte inteira, exibir somente a hora. A exibição de data e hora é determinada pelas configurações do seu sistema.
vbLongDate	1	Exibir uma data usando o formato extenso de data especificado nas configurações regionais do seu computador.
vbShortDate	2	Exibir uma data usando o formato reduzido de data especificado nas configurações regionais do seu computador.
vbLongTime	3	Exibir uma hora usando o formato extenso de hora especificado nas configurações regionais do seu computador.
vbShortTime	4	Exibir uma hora usando o formato reduzido de hora especificado nas configurações regionais do seu computador.


Constantes DriveType

Essas constantes estão disponíveis somente quando o seu projeto tem uma referência explícita à biblioteca de tipos apropriada que contém estas definições de constante.

Constante	Valor	Descrição
Unknown	0	O tipo da unidade não pode ser determinado.
Removable	1	A unidade tem mídia removível. Isso inclui todas as unidades de disquete e diversos outros tipos de dispositivos de armazenagem.
Fixed	2	A unidade tem mídia fixa (não-removível). Isso inclui todos os discos rígidos, inclusive os que sejam removíveis.
Remote	3	Unidades de rede. Isso inclui unidades compartilhadas em qualquer local, em uma rede.
CDROM	4	A unidade é um CD-ROM. Nenhuma distinção é feita entre unidades de CD-ROM somente leitura e leitura/gravação.
RAMDisk	5	A unidade é um bloco de memória de acesso randômico (RAM, Random Access Memory), no computador local, que se comporta como uma unidade de disco.


Constantes File Attribute

Essas constantes estão disponíveis somente quando o seu projeto tem uma referência explícita à biblioteca de tipos apropriada que contém estas definições de constante.

Constante	Valor	Descrição
Normal	0	Arquivo normal. Nenhum atributo é definido.
ReadOnly	1	Arquivo somente leitura. O atributo é leitura/gravação.
Oculto	2	Arquivo oculto. O atributo é leitura/gravação.
System	4	Arquivo do sistema. O atributo é leitura/gravação.
Volume	8	Rótulo de volume da unidade de disco. O atributo é somente leitura.
Directory	16	Pasta ou diretório. O atributo é somente leitura.
Archive	32	O arquivo foi alterado após o último backup. O atributo é leitura/gravação.
Alias	64	Vínculo ou atalho. O atributo é somente leitura.
Compressed	128	Arquivo compactado. O atributo é somente leitura.


Constantes File Input/Output

Essas constantes estão disponíveis somente quando o seu projeto tem uma referência explícita à biblioteca de tipos apropriada que contém estas definições de constante.

Constante	Valor	Descrição
ForReading	1	Abrir um arquivo para  apenas leitura . Você não pode gravar nesse arquivo.
ForWriting	2	Abrir um arquivo para gravação. Se existir um arquivo com o mesmo nome, seu conteúdo anterior será sobrescrito.
ForAppending	8	Abrir um arquivo e gravar no final do arquivo.


Constantes SpecialFolder

Essas constantes estão disponíveis somente quando o seu projeto tem uma referência explícita à biblioteca de tipos apropriada que contém estas definições de constante.

Constante	Valor	Descrição
WindowsFolder	0	A pasta Windows contém arquivos instalados pelo sistema operacional Windows.
SystemFolder	1	A pasta System contém bibliotecas, fontes e drivers de dispositivo.
TemporaryFolder	2	A pasta Temp é usada para armazenar arquivos temporários. Seu caminho é encontrado na variável de ambiente TMP.


Constantes Tristate

Essas constantes estão disponíveis somente quando o seu projeto tem uma referência explícita à biblioteca de tipos apropriada que contém estas definições de constante.

Constante	Valor	Descrição
vbTrue	–1	True
vbFalse	0	False
vbUseDefault	–2	Usar a configuração padrão


Função Filter

Descrição

Retorna uma matriz de base zero que contém um subconjunto de uma matriz de seqüência de caracteres baseada em critérios de filtro especificados.

Sintaxe

Filter(sourcesrray, match[, include[, compare]])

A sintaxe da função Filter tem os seguintes argumentos nomeados:

Parte	Descrição
sourcearray	Obrigatória. Matriz unidimensional de seqüências de caracteres a ser pesquisada.
match	Obrigatória. Seqüência de caracteres a ser procurada.
include	Opcional. O valor Boolean indicando se devem ou não ser retornadas subseqüências de caracteres que incluem ou excluem match. Se include for True, Filter retornará o subconjunto da matriz que contém match como uma subseqüência de caracteres. Se include for False, Filter retornará o subconjunto da matriz que não contém match como uma subseqüência de caracteres.
compare	Opcional. O valor numérico que indica o tipo de comparação de seqüência de caracteres a ser usado. Consulte a seção Configurações para obter os valores.
Definições

O argumento compare pode ter os seguintes valores:

Constante	Valor	Descrição
vbUseCompareOption	–1	Executa uma comparação usando a configuração da instrução Option Compare.
vbBinaryCompare	0	Executa uma comparação binária.
vbTextCompare	1	Executa uma comparação textual.
vbDatabaseCompare	2	Somente Microsoft Access. Efetua uma comparação, com base nas informações existentes no banco de dados.
Comentários

Se nenhuma correspondência de match for localizada dentro de sourcearray, Filter retornará uma matriz vazia. Ocorrerá um erro se sourcearray for Null ou não for uma matriz unidimensional.

A matriz retornada pela função Filter contém somente elementos suficientes para conter o número de itens coincidentes.


Função FormatCurrency

Descrição

Retorna uma expressão formatada como um valor de moeda usando o símbolo de moeda configurado no Painel de controle do sistema.

Sintaxe

FormatCurrency(Expression[,NumDigitsAfterDecimal [,IncludeLeadingDigit [,UseParensForNegativeNumbers [,GroupDigits]]]])

A sintaxe da função FormatCurrency tem as seguintes partes:

Parte	Descrição
Expression	Obrigatória. A expressão a ser formatada.
NumDigitsAfterDecimal	Opcional. O valor numérico que indica quantas casas à direita da decimal serão exibidas. O valor padrão é –1, que indica que a configuração regional do computador será utilizada.
IncludeLeadingDigit	Opcional. A constante Tristate que indica se os valores fracionários serão ou não precedidos por zero ao serem exibidos. Consulte a seção Configurações para obter os valores.
UseParensForNegativeNumbers	Opcional. A constante Tristate que indica se os valores negativos devem ou não ser colocados entre parênteses. Consulte a seção Configurações para obter os valores.
GroupDigits	Opcional. A constante Tristate que indica se os números são ou não agrupados usando o delimitador de grupo especificado nas configurações regionais do computador. Consulte a seção Configurações para obter os valores.
Definições

Os argumentos IncludeLeadingDigit, UseParensForNegativeNumbers e GroupDigits têm as seguintes configurações:

Constante	Valor	Descrição
vbTrue	–1	True
vbFalse	0	False
vbUseDefault	–2	Usar a definição das configurações regionais do computador.
Comentários

Quando um ou mais argumentos opcionais são omitidos, os valores dos argumentos omitidos são fornecidos pelas configurações regionais do computador.

A posição do símbolo de moeda com relação ao valor de moeda é determinada pelas configurações regionais do sistema.

Observação   Todas as informações sobre configuração vêm da guia Moeda de Configurações regionais, exceto as informações sobre zero à esquerda, que vêm da guia Número.


Função FormatDateTime

Descrição

Retorna uma expressão formatada como uma data ou hora.

Sintaxe

FormatDateTime(Date[,NamedFormat])

A sintaxe da função FormatDateTime tem as seguintes partes:

Parte	Descrição
Date	Obrigatória. A expressão de data a ser formatada.
NamedFormat	Opcional. O valor numérico que indica o formato de data/hora usado. Se for omitido,  será usado vbGeneralDate.
Definições

O argumento NamedFormat tem as seguintes configurações:

Constante	Valor	Descrição
vbGeneralDate	0	Exibir uma data e/ou hora. Se houver uma parte de data, ela será exibida como uma data abreviada. Se houver uma parte de hora, ela será exibida como uma hora longa. Se estiverem presentes, ambas as partes serão exibidas.
vbLongDate	1	Exibir uma data usando o formato extenso de data especificado nas configurações regionais do seu computador.
vbShortDate	2	Exibir uma data usando o formato reduzido de data especificado nas configurações regionais do seu computador.
vbLongTime	3	Exibir uma hora usando o formato de hora especificado nas configurações regionais do seu computador.
vbShortTime	4	Exibir uma hora usando o formato de 24 horas (hh:mm).


Função FormatNumber

Descrição

Retorna uma expressão formatada como um número.

Sintaxe

FormatNumber(Expression[,NumDigitsAfterDecimal [,IncludeLeadingDigit [,UseParensForNegativeNumbers [,GroupDigits]]]])

A sintaxe da função FormatNumber tem as seguintes partes:

Parte	Descrição
Expression	Obrigatória. A expressão a ser formatada.
NumDigitsAfterDecimal	Opcional. O valor numérico que indica quantas casas à direita da decimal serão exibidas. O valor padrão é –1, que indica que a configuração regional do computador será utilizada.
IncludeLeadingDigit	Opcional. A constante Tristate que indica se os valores fracionários serão ou não precedidos por zero ao serem exibidos. Consulte a seção Configurações para obter os valores.
UseParensForNegativeNumbers	Opcional. A constante Tristate que indica se os valores negativos devem ou não ser colocados entre parênteses. Consulte a seção Configurações para obter os valores.
GroupDigits	Opcional. A constante Tristate que indica se os números são ou não agrupados usando o delimitador de grupo especificado nas configurações regionais do computador. Consulte a seção Configurações para obter os valores.
Definições

Os argumentos IncludeLeadingDigit, UseParensForNegativeNumbers e GroupDigits têm as seguintes configurações:

Constante	Valor	Descrição
vbTrue	–1	True
vbFalse	0	False
vbUseDefault	–2	Usar a definição das configurações regionais do computador.
Comentários

Quando um ou mais argumentos opcionais são omitidos, os valores dos argumentos omitidos são fornecidos pelas configurações regionais do computador.

Observação   Todas as informações sobre configuração vêm da guia Número de Configurações regionais.


Função FormatPercent

Descrição

Retorna uma expressão formatada como uma porcentagem (multiplicada por 100) com um caractere % à direita.

Sintaxe

FormatPercent(Expression[,NumDigitsAfterDecimal [,IncludeLeadingDigit [,UseParensForNegativeNumbers [,GroupDigits]]]])

A sintaxe da função FormatPercent tem as seguintes partes:

Parte	Descrição
Expression	Obrigatória. A expressão a ser formatada.
NumDigitsAfterDecimal	Opcional. O valor numérico que indica quantas casas à direita da decimal serão exibidas. O valor padrão é –1, que indica que a configuração regional do computador será utilizada.
IncludeLeadingDigit	Opcional. A constante Tristate que indica se os valores fracionários serão ou não precedidos por zero ao serem exibidos. Consulte a seção Configurações para obter os valores.
UseParensForNegativeNumbers	Opcional. A constante Tristate que indica se os valores negativos devem ou não ser colocados entre parênteses. Consulte a seção Configurações para obter os valores.
GroupDigits	Opcional. A constante Tristate que indica se os números são ou não agrupados usando o delimitador de grupo especificado nas configurações regionais do computador. Consulte a seção Configurações para obter os valores.
Definições

Os argumentos IncludeLeadingDigit, UseParensForNegativeNumbers e GroupDigits têm as seguintes configurações:

Constante	Valor	Descrição
vbTrue	–1	True
vbFalse	0	False
vbUseDefault	–2	Usar a definição das configurações regionais do computador.
Comentários

Quando um ou mais argumentos opcionais são omitidos, os valores dos argumentos omitidos são fornecidos pelas configurações regionais do computador.

Observação   Todas as informações sobre configuração vêm da guia Número de Configurações regionais.


Função InStrRev

Descrição

Retorna a posição de uma ocorrência de uma seqüência de caracteres dentro de outra, a partir do final da seqüência de caracteres.

Sintaxe

InstrRev(stringcheck, stringmatch[, start[, compare]])

A sintaxe da função InstrRev tem os seguintes argumentos nomeados:

Parte	Descrição
stringcheck	Obrigatória. A expressão de seqüência que está sendo pesquisada.
stringmatch	Obrigatória. A expressão de seqüência de caracteres que está sendo procurada.
start	Opcional. A expressão numérica que define a posição inicial para cada pesquisa. Se for omitida, –1 será usado, o que significa que a pesquisa começará na posição do último caractere. Se start contiver Null, ocorrerá um erro.
compare	Opcional. O valor numérico que indica o tipo de comparação a ser usado ao avaliar subseqüências de caracteres. Se for omitido, uma comparação binária será efetuada. Consulte a seção Configurações para obter os valores.
Definições

O argumento compare pode ter os seguintes valores:

Constante	Valor	Descrição
vbUseCompareOption	–1	Executa uma comparação usando a configuração da instrução Option Compare.
vbBinaryCompare	0	Executa uma comparação binária.
vbTextCompare	1	Executa uma comparação textual.
vbDatabaseCompare	2	Somente Microsoft Access. Efetua uma comparação, com base nas informações existentes no banco de dados.
Valores retornados

InStrRev retorna os seguintes valores:

Se	InStrRev retornará
stringcheck tiver comprimento zero	0
stringcheck for Null	Null
stringmatch tiver comprimento zero	Start
stringmatch for Null	Null
stringmatch não for encontrado	0
stringmatch for encontrado dentro de stringcheck	A posição em que a correspondência foi encontrada
start > Len(stringmatch)	0
Comentários

Observe que a sintaxe da função InstrRev não é igual à sintaxe da função Instr.


Função Join

Descrição

Retorna uma seqüência de caracteres criada pela associação de diversas subseqüências de caracteres contidas em uma matriz.

Sintaxe

Join(sourcearray[, delimiter])

A sintaxe da função Join tem os seguintes argumentos nomeados:

Parte	Descrição
sourcearray	Obrigatória. A matriz unidimensional contendo subseqüências de caracteres a serem associadas.
delimiter	Opcional. O caractere de seqüência de caracteres usado para separar as subseqüências de caracteres na seqüência de caracteres retornada. Se for omitido, o caractere de espaço (" ") será usado. Se delimiter for uma seqüência de caracteres de comprimento zero (""), todos os itens na lista serão concatenados sem delimitadores.


Função MonthName

Descrição

Retorna uma seqüência de caracteres indicando o mês especificado.

Sintaxe

MonthName(month[, abbreviate])

A sintaxe da função MonthName tem as seguintes partes:

Parte	Descrição
month	Obrigatória. A designação numérica do mês. Por exemplo, janeiro é 1, fevereiro é 2 e assim por diante.
abbreviate	Opcional. Valor Boolean que indica se o nome do mês deve ser abreviado. Se for omitido, o padrão será False, o que significa que o nome do mês não será abreviado.


Função Replace

Descrição

Retorna uma seqüência de caracteres em que uma subseqüência de caracteres especificada foi substituída por outra subseqüência de caracteres uma quantidade de vezes especificada.

Sintaxe

Replace(expression, find, replace[, start[, count[, compare]]])

A sintaxe da função Replace tem os seguintes argumentos nomeados:

Parte	Descrição
expression	Obrigatória. A expressão de seqüência contendo a subseqüência de caracteres a ser substituída.
find	Obrigatória. A subseqüência de caracteres que está sendo procurada.
replace	Obrigatória. A subseqüência de caracteres de substituição.
start	Opcional. A posição dentro de expression onde a pesquisa da subseqüência de caracteres deve iniciar. Se for omitido, será assumido o valor 1.
count	Opcional. A quantidade de substituições de subseqüências de caracteres a ser efetuada. Se for omitida, o valor padrão será –1, o que significa que todas as substituições possíveis devem ser efetuadas.
compare	Opcional. O valor numérico que indica o tipo de comparação a ser usado ao avaliar subseqüências de caracteres. Consulte a seção Configurações para obter os valores.
Definições

O argumento compare pode ter os seguintes valores:

Constante	Valor	Descrição
vbUseCompareOption	–1	Executa uma comparação usando a configuração da instrução Option Compare.
vbBinaryCompare	0	Executa uma comparação binária.
vbTextCompare	1	Executa uma comparação textual.
vbDatabaseCompare	2	Somente Microsoft Access. Efetua uma comparação, com base nas informações existentes no banco de dados.
Valores retornados

Replace retorna os seguintes valores:

Se	Replace retornará
expression tiver comprimento zero	Seqüência de caracteres de comprimento zero ("")
expression for Null	Um erro.
find tiver comprimento zero	Cópia de expression.
replace tiver comprimento zero	Cópia de expression com todas as ocorrências de find removidas.
start > Len(expression)	Seqüência de caracteres de comprimento zero.
count for 0	Cópia de expression.
Comentários

O valor de retorno da função Replace é uma seqüência de caracteres, com substituições efetuadas, que inicia na posição especificada por start e termina no final da seqüência de caracteres expression. Não é uma cópia da seqüência de caracteres original do início ao fim.


Função Round

Descrição

Retorna um número arredondado para um número especificado de casas decimais.

Sintaxe

Round(expression [,numdecimalplaces])

A sintaxe da função Round tem as seguintes partes:

Parte	Descrição
expression	Obrigatória. A expressão numérica que está sendo arredondada.
numdecimalplaces	Opcional. Número indicando quantas casas à direita da decimal serão incluídas no arredondamento. Se for omitido, inteiros serão retornados pela função Round.


Função Split

Descrição

Retorna uma matriz unidimensional de base zero, contendo um número especificado de subseqüências de caracteres.

Sintaxe

Split(expression[, delimiter[, limit[, compare]]])

A sintaxe da função Split tem os seguintes argumentos nomeados:

Parte	Descrição
expression	Obrigatória. Expressão de seqüência contendo subseqüências de caracteres e delimitadores. Se expression for uma seqüência de caracteres de comprimento zero (""), Split retornará uma matriz vazia, isso é, uma matriz sem elementos ou dados.
delimiter	Opcional. Caractere de seqüência de caracteres usado para identificar limites de subseqüência de caracteres. Se for omitido, presume-se que o caractere de espaço (" ") seja o delimitador. Se delimiter for uma seqüência de caracteres de comprimento zero, uma matriz de elemento único contendo toda a seqüência de caracteres de expression será retornada.
limit	Opcional. O número de subseqüências de caracteres a ser retornado; –1 indica que todas as subseqüências de caracteres serão retornadas.
compare	Opcional. O valor numérico que indica o tipo de comparação a ser usado ao avaliar subseqüências de caracteres. Consulte a seção Configurações para obter os valores.
Definições

O argumento compare pode ter os seguintes valores:

Constante	Valor	Descrição
vbUseCompareOption	–1	Executa uma comparação usando a configuração da instrução Option Compare.
vbBinaryCompare	0	Executa uma comparação binária.
vbTextCompare	1	Executa uma comparação textual.
vbDatabaseCompare	2	Somente Microsoft Access. Efetua uma comparação, com base nas informações existentes no banco de dados.


Função StrReverse

Descrição

Retorna uma seqüência de caracteres em que a ordem dos caracteres de uma seqüência especificada está invertida.

Sintaxe

StrReverse(expression)

O argumento expression é a seqüência cujos caracteres devem ser invertidos. Se expression for uma seqüência de caracteres de comprimento zero (""), uma seqüência de caracteres de comprimento zero será retornada. Se expression for Null, ocorrerá um erro.


Função WeekdayName

Descrição

Retorna uma seqüência de caracteres indicando o dia da semana especificado.

Sintaxe

WeekdayName(weekday, abbreviate, firstdayofweek)

A sintaxe da função WeekdayName tem as seguintes partes:

Parte	Descrição
weekday	Obrigatória. A designação numérica do dia da semana. O valor numérico de cada dia depende da configuração de firstdayofweek.
abbreviate	Opcional. O valor Boolean que indica se o nome do dia da semana deverá ser abreviado. Se for omitido, o padrão será False, o que significa que o nome do dia da semana não será abreviado.
firstdayofweek	Opcional. O valor numérico indicando o primeiro dia da semana. Consulte a seção Configurações para obter os valores.
Definições

O argumento firstdayofweek pode ter os seguintes valores:

Constante	Valor	Descrição
vbUseSystem	0	Usar a configuração de API de NLS (National Language Support).
vbSunday	1	Domingo (padrão)
vbMonday	2	Segunda-feira
vbTuesday	3	Terça-feira
vbWednesday	4	Quarta-feira
vbThursday	5	Quinta-feira
vbFriday	6	Sexta-feira
vbSaturday	7	Sábado


Método Add (Dictionary)

Descrição

Adiciona um par de item e chave a um objeto Dictionary.

Sintaxe

object.Add key, item

O método Add tem as seguintes partes:

Parte	Descrição
object	Obrigatória. Sempre o nome de um objeto Dictionary.
key	Obrigatória. A chave associada ao item que está sendo adicionado.
item	Obrigatória. O item associado à chave que está sendo adicionada.
Comentários

Ocorrerá um erro se a key já existir.


Método AddFolders
Método Add (Folders)

Descrição

Adiciona uma nova Folder a uma coleção Folders.

Sintaxe

object.Add folderName

O método Add tem as seguintes partes:

Parte	Descrição
object	Obrigatória. Sempre o nome de uma coleção Folders.
folderName	Obrigatória. O nome da nova Folder que está sendo adicionada.
Comentários

Ocorrerá um erro se o folderName já existir.


Método BuildPath

Descrição

Acrescenta um nome a um caminho existente.

Sintaxe

object.BuildPath(path, name)

A sintaxe do método BuildPath possui as seguintes partes:

Parte	Descrição
object	Obrigatória. Sempre o nome de um FileSystemObject.
path	Obrigatória. O caminho existente ao qual o name é acrescentado. O caminho pode ser absoluto ou relativo e não é preciso especificar uma pasta existente.
name	Obrigatória. O nome que está sendo acrescentado ao path existente.
Comentários

O método BuildPath inserirá um separador adicional de caminho entre o caminho existente e o nome, somente se for necessário.


Método Close (objeto FileSystemObject)
Método Close

Descrição

Fecha um arquivo TextStream aberto.

Sintaxe

object.Close

O object é sempre o nome de um objeto TextStream.


Método Copy

Descrição

Copia um arquivo ou pasta especificada de um local para outro.

Sintaxe

object.Copy destination[, overwrite]

A sintaxe do método Copy possui as seguintes partes:

Parte	Descrição
object	Obrigatória. Sempre o nome de um objeto File ou Folder.
destination	Obrigatória. O destino onde o arquivo ou pasta será copiado. Não são permitidos caracteres curinga.
overwrite	Opcional. Valor Booleano que será True (padrão) se os arquivos ou pastas existentes tiverem que ser sobrescritos; False, se não tiverem.
Comentários

Os resultados do método Copy em um File ou Folder é idêntico às operações realizadas usando FileSystemObject.CopyFile ou FileSystemObject.CopyFolder onde o arquivo ou pasta referida pelo object é passado como um argumento. Você deve notar, no entanto, que os métodos alternativos possibilitam a cópia de vários arquivos ou pastas.


Método CopyFile

Descrição

Copia um ou mais arquivos de um local para outro.

Sintaxe

object.CopyFile source, destination[, overwrite]

A sintaxe do método CopyFile possui as seguintes partes:

Parte	Descrição
object	Obrigatória. O object é sempre o nome de um FileSystemObject.
source	Obrigatória. A especificação de arquivo da seqüência de caracteres, que pode incluir caracteres curinga, para um ou mais arquivos a serem copiados.
destination	Obrigatória. O destino da seqüência de caracteres onde o arquivo ou arquivos de source serão copiados. Não são permitidos caracteres curinga.
overwrite	Opcional. O valor Booleano que indica se os arquivos existentes têm que ser sobrescritos. Se for True, os arquivos são sobrescritos; se for False, não são sobrescritos. O padrão é True. Observe que o CopyFile falhará se destination tiver o atributo somente leitura definido, não importa qual seja o valor de overwrite.
Comentários

Os caracteres curinga só podem ser usados no último componente de caminho do argumento source. Por exemplo, você pode usar:

FileSystemObject.CopyFile "c:\meusdocumentos\cartas\*.doc", "c:\pastatemp\"

Mas não é possível usar:

FileSystemObject.CopyFile "c:\meusdocumentos\*\R1???97.xls", "c:\pastatemp"

Se source contiver caracteres curinga ou destination terminar com um separador de caminho (\), presume-se que destination seja uma pasta existente na qual serão copiados os arquivos correspondentes. Caso contrário, presume-se que destination seja o nome de um arquivo a ser criado. Em ambos os casos, três possibilidades podem ocorrer quando um arquivo individual é copiado.

•	Se destination não existir, source será copiado . Esse é o caso normal.

•	Se destination for um arquivo existente, ocorrerá um erro, caso overwrite seja False. Caso contrário, será feita uma tentativa de copiar source sobre o arquivo existente.

•	Se destination for um diretório, ocorrerá um erro.

Ocorrerá também um erro  se um source que esteja usando caracteres curinga não corresponder a qualquer arquivo. O método CopyFile é interrompido no primeiro erro encontrado. Nenhuma tentativa é efetuada para reverter ou desfazer quaisquer alterações efetuadas antes da ocorrência de um erro.


Método CopyFolder

Descrição

Copia de maneira recursiva uma pasta de um local para outro.

Sintaxe

object.CopyFolder source, destination[, overwrite]

A sintaxe do método CopyFolder possui as seguintes partes:

Parte	Descrição
object	Obrigatória. Sempre o nome de um FileSystemObject.
source	Obrigatória. A especificação da pasta de seqüência de caracteres, que pode incluir caracteres curinga, para uma ou mais pastas a serem copiadas.
destination	Obrigatória. O destino da seqüência de caracteres onde a pasta e as subpastas de source devem ser copiadas. Não são permitidos caracteres curinga.
overwrite	Opcional. Valor Booleano que indica se pastas existentes devem ser sobrescritas. Se for True, os arquivos são sobrescritos; se for False, não são sobrescritos. O padrão é True.
Comentários

Os caracteres curinga só podem ser usados no último componente de caminho do argumento source. Por exemplo, você pode usar:

FileSystemObject.CopyFolder "c:\meusdocumentos\cartas\*", "c:\pasta temp\"

Mas não é possível usar:

FileSystemObject.CopyFolder "c:\meusdocumentos\*\*", "c:\pastatemp\"

Se source contiver caracteres curinga ou destination terminar com um separador de caminho (\), presume-se que destination seja uma pasta existente na qual serão copiadas pastas e subpastas correspondentes. Caso contrário, presume-se que destination seja o nome de uma pasta a ser criada. Em ambos os casos, quatro possibilidades podem ocorrer quando uma pasta individual é copiada.

•	Se destination não existir, a pasta source e todo seu conteúdo serão copiados. Esse é o caso normal.

•	Se destination for um arquivo existente, ocorrerá um erro.

•	Se destination for um diretório, será feita uma tentativa de copiar a pasta e todo seu conteúdo. Se um arquivo contido em source já existir no destination, ocorrerá um erro caso overwrite seja False. Caso contrário, o método tentará copiar o arquivo sobre o arquivo existente.

•	Se destination estiver em um diretório somente leitura e overwrite for False. ocorrerá um erro se uma tentativa for feita para copiar um arquivo somente leitura existente naquele diretório.

Também ocorrerá um erro se um source, que esteja usando caracteres curinga, não corresponder a qualquer pasta.

O método CopyFolder é interrompido no primeiro erro encontrado. Nenhuma tentativa é feita para reverter quaisquer alterações efetuadas antes da ocorrência de um erro.


Método CreateFolder

Descrição

Cria uma pasta.

Sintaxe

object.CreateFolder(foldername)

O método CreateFolder possui as seguintes partes:

Parte	Descrição
object	Obrigatória. Sempre o nome de um FileSystemObject.
foldername	Obrigatória. A expressão de seqüência que identifica a pasta a ser criada.
Comentários

Ocorrerá um erro se a pasta especificada já existir.


Método CreateTextFile

Descrição

Cria um nome de arquivo especificado e retorna um objeto TextStream que pode ser usado para ler ou gravar no arquivo.

Sintaxe

object.CreateTextFile(filename[, overwrite[, unicode]])

O método CreateTextFile possui as seguintes partes:

Parte	Descrição
object	Obrigatória. Sempre o nome de um objeto FileSystemObject ou Folder.
filename	Obrigatória. A expressão de seqüência que identifica o arquivo a ser criado.
overwrite	Opcional. O valor Booleano que indica se um arquivo existente pode ser sobrescrito. O valor será True se o arquivo puder ser sobrescrito; False se não puder ser sobrescrito. Se for omitido, os arquivos existentes não serão sobrescritos.
unicode	Opcional. O valor Booleano que indica se o arquivo será criado como um arquivo Unicode ou ASCII. O valor será True se o arquivo for criado como um arquivo Unicode; False se for criado como um arquivo ASCII. Se for omitido, presume-se que seja um arquivo ASCII.
Comentários

O código a seguir ilustra como usar o método CreateTextFile para criar e abrir um arquivo de texto:

Sub CreateAfile

    Set fs = CreateObject("Scripting.FileSystemObject")

    Set a = fs.CreateTextFile("c:\arqteste.txt", True)

    a.WriteLine("Isto é um teste.")

    a.Close

End Sub

Se o argumento overwrite for False ou não for fornecido para um filename já existente, ocorrerá um erro.


Método Delete

Descrição

Exclui uma pasta ou arquivo especificado.

Sintaxe

object.Delete force

A sintaxe do método Delete possui as seguintes partes:

Parte	Descrição
object	Obrigatória. Sempre o nome de um objeto File ou Folder.
force	Opcional. O valor Booleano será True se arquivos ou pastas com o atributo somente leitura definido forem ser excluídos; False (padrão) se não forem.
Comentários

Ocorrerá um erro se a pasta ou arquivo especificado não existir.

Os resultados do método Delete em um File ou Folder são idênticos às operações efetuadas usando FileSystemObject.DeleteFile ou FileSystemObject.DeleteFolder.

O método Delete não faz distinção entre pastas que tenham conteúdo das que não tenham. A pasta especificada será excluída não importa se ela tenha ou não conteúdo.


Método DeleteFile

Descrição

Exclui um arquivo especificado.

Sintaxe

object.DeleteFile filespec[, force]

A sintaxe do método DeleteFile possui as seguintes partes:

Parte	Descrição
object	Obrigatória. Sempre o nome de um FileSystemObject.
filespec	Obrigatória. O nome do arquivo a ser excluído. O filespec pode conter caracteres curinga no último componente de caminho.
force	Opcional. O valor Booleano que será True se arquivos com o atributo somente leitura definido forem ser excluídos; False (padrão) se não forem.
Comentários

Ocorrerá um erro se nenhum arquivo correspondente for localizado. O método DeleteFile interromperá no primeiro erro encontrado. Nenhuma tentativa é feita para reverter ou desfazer quaisquer alterações efetuadas antes da ocorrência do erro.


Método DeleteFolder

Descrição

Exclui uma pasta especificada e seu conteúdo.

Sintaxe

object.DeleteFolder folderspec[, force]

A sintaxe do método DeleteFolder possui as seguintes partes:

Parte	Descrição
object	Obrigatória. Sempre o nome de um FileSystemObject.
folderspec	Obrigatória. O nome da pasta a ser excluída. A folderspec pode conter caracteres curinga no último componente de caminho.
force	Opcional. Valor Booleano que é True se pastas com o argumento somente leitura definido devem ser excluídas; False (padrão) se não devem.
Comentários

O método DeleteFolder não faz distinção entre pastas que têm conteúdo das que não têm. A pasta especificada será excluída não importa se ela tenha ou não conteúdo.

Ocorrerá um erro se nenhuma pasta correspondente for localizada. O método DeleteFolder interrompe no primeiro erro encontrado. Nenhuma tentativa é feita para reverter ou desfazer quaisquer alterações efetuadas antes da ocorrência do erro.


Método DriveExists

Descrição

Retorna True se a unidade especificada existir; False se não existir.

Sintaxe

object.DriveExists(drivespec)

A sintaxe do método DriveExists possui as seguintes partes:

Parte	Descrição
object	Obrigatória. Sempre o nome de um FileSystemObject.
drivespec	Obrigatória. Uma letra de unidade ou uma especificação de caminho completo.
Comentários

Para unidades com mídia removível, o método DriveExists retornará True mesmo não houver mídia presente. Use a propriedade IsReady do objeto Drive para determinar há uma unidade pronta.


Método Exists

Descrição

Retornará True se uma chave especificada existir no objeto Dictionary; False se não existir.

Sintaxe

object.Exists(key)

A sintaxe do método Exists possui as seguintes partes:

Parte	Descrição
object	Obrigatória. Sempre o nome de um objeto Dictionary.
key	Obrigatória. O valor de key que está sendo procurado no objeto Dictionary.


Método FileExists

Descrição

Retornará True se um arquivo especificado existir; False se não existir.

Sintaxe

object.FileExists(filespec)

A sintaxe do método FileExists possui as seguintes partes:

Parte	Descrição
object	Obrigatória. Sempre o nome de um FileSystemObject.
filespec	Obrigatória. O nome do arquivo cuja existência deve ser determinada. Uma especificação completa do caminho (absoluto ou relativo) deve ser fornecida caso não se espere que o arquivo exista na pasta atual.


Método FolderExists

Descrição

Retornará True se uma pasta especificada existir; False se não existir.

Sintaxe

object.FolderExists(folderspec)

A sintaxe do método FolderExists possui as seguintes partes:

Parte	Descrição
object	Obrigatória. Sempre o nome de um FileSystemObject.
folderspec	Obrigatória. O nome da pasta cuja existência deve ser determinada. Uma especificação completa do caminho (absoluto ou relativo) deve ser fornecida caso não se espere que a pasta exista na pasta atual.


Método GetAbsolutePathName

Descrição

Retornará um caminho completo e preciso a partir de uma especificação de caminho fornecida.

Sintaxe

object.GetAbsolutePathName(pathspec)

A sintaxe do método GetAbsolutePathName possui as seguintes partes:

Parte	Descrição
object	Obrigatória. Sempre o nome de um FileSystemObject.
pathspec	Obrigatória. A especificação de caminho a ser alterada para um caminho completo e preciso.
Comentários

Um caminho é completo e preciso se fornecer uma referência completa a partir da raiz da unidade especificada. Um caminho completo só pode terminar com um caractere separador de caminho (\) se especificar a pasta raiz de uma unidade mapeada.

Supondo que o diretório atual seja c:\meusdocumentos\reports, a tabela a seguir ilustra o comportamento do método GetAbsolutePathName.

pathspec	Caminho retornado
"c:"	"c:\meusdocumentos\reports"
"c:.."	"c:\meusdocumentos"
"c:\\\"	"c:\"
"c:*.*\maio97"	"c:\meusdocumentos\reports\*.*\maio97"
"região1"	"c:\meusdocumentos\reports\região1"
"c:\..\..\meusdocumentos"	"c:\meusdocumentos"


Método GetBaseName

Descrição

Retorna uma seqüência de caracteres contendo o nome básico do último componente, sem qualquer extensão de arquivo, em um caminho.

Sintaxe

object.GetBaseName(path)

A sintaxe do método GetBaseName possui as seguintes partes:

Parte	Descrição
object	Obrigatória. Sempre o nome de um FileSystemObject.
path	Obrigatória. A especificação de caminho do componente cujo nome básico deverá ser retornado.
Comentários

O método GetBaseName retornará uma seqüência de caracteres de comprimento zero ("") se nenhum componente corresponder ao argumento path.

Observação   O método GetBaseName funciona somente na seqüência de caracteres de path fornecida. Ele não tenta resolver o caminho, nem verifica a existência do caminho especificado.


Método GetDrive

Descrição

Retorna um objeto Drive que corresponde à unidade em um caminho especificado.

Sintaxe

object.GetDrive drivespec

A sintaxe do método GetDrive possui as seguintes partes:

Parte	Descrição
object	Obrigatória. Sempre o nome de um FileSystemObject.
drivespec	Obrigatória. O argumento drivespec pode ser uma letra de unidade (c), uma letra de unidade acrescido de dois-pontos  (c:), uma letra de unidade acrescido de dois-pontos e de um separador de caminho  (c:\) ou qualquer especificação de compartilhamento de rede (\\computer2\share1).
Comentários

Para compartilhamentos de rede, uma verificação é sempre efetuada para garantir  existência dele.

Ocorrerá um erro se drivespec não estiver em conformidade com um dos formatos aceitos ou se não existir.

Para chamar o método GetDrive em uma seqüência de caminho normal, use a seqüência de caracteres a seguir para obter a seqüência que seja adequada de ser usada como drivespec:

DriveSpec = GetDriveName(GetAbsolutePathName(Path))


Método GetDriveName

Descrição

Retorna uma seqüência de caracteres contendo o nome da unidade de um caminho especificado.

Sintaxe

object.GetDriveName(path)

A sintaxe do método GetDriveName possui as seguintes partes:

Parte	Descrição
object	Obrigatória. Sempre o nome de um FileSystemObject.
path	Obrigatória. A especificação de caminho do componente cujo nome de unidade deve ser retornado.
Comentários

O método GetDriveName retornará uma seqüência de caracteres de comprimento zero ("") se a unidade não puder ser determinada.

Observação   O método GetDriveName funciona somente na seqüência de caracteres de path especificada. Ele não tenta resolver o caminho, nem verifica a existência do caminho especificado.


Método GetExtensionName

Descrição

Retorna uma seqüência de caracteres contendo o nome da extensão do último componente em um caminho.

Sintaxe

object.GetExtensionName(path)

A sintaxe do método GetExtensionName possui as seguintes partes:

Parte	Descrição
object	Obrigatória. Sempre o nome de um FileSystemObject.
path	Obrigatória. A especificação de caminho do componente cujo nome de extensão deve ser retornado.
Comentários

Para unidades de rede, o diretório raiz (\) é considerado como sendo um componente.

O método GetExtensionName retornará uma seqüência de caracteres de comprimento zero ("") se nenhum componente corresponder ao argumento path.


Método GetFile

Descrição

Retorna um objeto File que corresponde ao arquivo em um caminho especificado.

Sintaxe

object.GetFile(filespec)

A sintaxe do método GetFile possui as seguintes partes:

Parte	Descrição
object	Obrigatória. Sempre o nome de um FileSystemObject.
filespec	Obrigatória. O filespec é o caminho (absoluto ou relativo) para um arquivo específico.
Comentários

Ocorrerá um erro se o arquivo especificado não existir.


Método GetFileName

Descrição

Retorna o último componente do caminho especificado que não seja parte da especificação da unidade.

Sintaxe

object.GetFileName(pathspec)

A sintaxe do método GetFileName possui as seguintes partes:

Parte	Descrição
object	Obrigatória. Sempre o nome de um FileSystemObject.
pathspec	Obrigatória. O caminho (absoluto ou relativo) para um arquivo específico.
Comentários

O método GetFileName retornará uma seqüência de caracteres de comprimento zero ("") se pathspec não terminar com o componente nomeado.

Observação   O método GetFileName funciona somente na seqüência de caracteres de path especificada. Ele não tenta resolver o caminho, nem verifica a existência do caminho especificado.


Método GetFolder

Descrição

Retorna um objeto Folder que corresponde à pasta em um caminho especificado.

Sintaxe

object.GetFolder(folderspec)

A sintaxe do método GetFolder possui as seguintes partes:

Parte	Descrição
object	Obrigatória. Sempre o nome de um FileSystemObject.
folderspec	Obrigatória. O folderspec é o caminho (absoluto ou relativo) para uma pasta específica.
Comentários

Ocorrerá um erro se a pasta especificada não existir.


Método GetParentFolderName

Descrição

Retorna uma seqüência de caracteres que contém o nome da pasta pai do último componente em um caminho especificado.

Sintaxe

object.GetParentFolderName(path)

A sintaxe do método GetParentFolderName possui as seguintes partes:

Parte	Descrição
object	Obrigatória. Sempre o nome de um FileSystemObject.
path	Obrigatória. A especificação de caminho do componente cujo nome da pasta pai deve ser retornado.
Comentários

O método GetParentFolderName retornará uma seqüência de caracteres de comprimento zero ("") se não houver uma pasta pai do componente especificado no argumento path.

Observação   O método GetParentFolderName funciona somente na seqüência de caracteres de path especificada. Ele não tenta resolver o caminho, nem verifica a existência do caminho especificado.


Método GetSpecialFolder

Descrição

Retorna a pasta especial especificada.

Sintaxe

object.GetSpecialFolder(folderspec)

A sintaxe do método GetSpecialFolder possui as seguintes partes:

Parte	Descrição
object	Obrigatória. Sempre o nome de um FileSystemObject.
folderspec	Obrigatória. O nome da pasta especial a ser retornado. Pode ser qualquer das constantes mostradas na seção Configurações.
Definições

O argumento folderspec pode ter qualquer dos seguintes valores:

Constante	Valor	Descrição
WindowsFolder	0	A pasta Windows contém arquivos instalados pelo sistema operacional Windows.
SystemFolder	1	A pasta System contém bibliotecas, fontes e drivers de dispositivo.
TemporaryFolder	2	A pasta Temp é usada para armazenar arquivos temporários. Seu caminho é encontrado na variável de ambiente TMP.


Método GetTempName

Descrição

Retorna um nome temporário de arquivo ou pasta gerado aleatoriamente que é útil para a execução de operações que exigem uma pasta ou arquivo temporário.

Sintaxe

object.GetTempName

O object opcional é sempre o nome de um FileSystemObject.

Comentários

O método GetTempName não cria um arquivo. Ele fornece somente um nome de arquivo temporário que pode ser usado com  CreateTextFile para criar um arquivo.


Método Items

Descrição

Retorna uma matriz contendo todos os itens em um objeto Dictionary.

Sintaxe

object.Items

O object é sempre o nome de um objeto Dictionary.

Comentários

O código a seguir ilustra o uso do método Items:

Dim a, d, i             'Criar algumas variáveis

Set d = CreateObject("Scripting.Dictionary")

d.Add "a", "Atenas"     'Adicionar algumas chaves e itens

d.Add "b", "Belgrado"

d.Add "c", "Cairo"

a = d.Items             'Obter os itens

For i = 0 To d.Count -1 'Iterar a matriz

    Print a(i)          'Imprimir o item

Next

...


Método Keys

Descrição

Retorna uma matriz que contém todas as chaves existentes em um objeto Dictionary.

Sintaxe

object.Keys

O object é sempre o nome de um objeto Dictionary.

Comentários

O código a seguir ilustra o uso do método Keys:

Dim a, d, i             'Criar algumas variáveis

Set d = CreateObject("Scripting.Dictionary")

d.Add "a", "Atenas"     'Adicionar algumas chaves e itens.

d.Add "b", "Belgrado"

d.Add "c", "Cairo"

a = d.keys              'Obter as chaves

For i = 0 To d.Count -1 'Iterar a matriz

    Print a(i)          'Imprimir a chave

Next

...


Método Move (objeto FileSystemObject)
Método Move

Descrição

Move um arquivo ou pasta especificada de um local para outro.

Sintaxe

object.Move destination

A sintaxe do método Move possui as seguintes partes:

Parte	Descrição
object	Obrigatória. Sempre o nome de um objeto File ou Folder.
destination	Obrigatória. O destino para onde o arquivo ou pasta deve ser movido. Não são permitidos caracteres curinga.
Comentários

Os resultados do método Move em um File ou Folder são idênticos às operações efetuadas usando FileSystemObject.MoveFile ou FileSystemObject.MoveFolder. Você deve notar, no entanto, que os métodos alternativos são capazes de mover vários arquivos ou pastas.


Método MoveFile

Descrição

Move um ou mais arquivos de um local para outro.

Sintaxe

object.MoveFile source, destination

A sintaxe do método MoveFile possui as seguintes partes:

Parte	Descrição
object	Obrigatória. Sempre o nome de um FileSystemObject.
source	Obrigatória. O caminho para o arquivo ou arquivos a serem movidos. A seqüência de caracteres do argumento source pode conter caracteres curinga somente no último componente do caminho.
destination	Obrigatória. O caminho para onde o arquivo ou arquivos devem ser movidos. O argumento destination não pode conter caracteres curinga.
Comentários

Se source contiver curingas ou destination terminar com um separador de caminho (\), presume-se que destination especifique uma pasta existente para onde os arquivos correspondentes devem ser movidos. Caso contrário, presume-se que destination seja o nome de um arquivo de destino a ser criado. Em ambos os casos, quando um arquivo individual é movido existem três possibilidades:

•	Se destination não existir, o arquivo é movido. Esse é o caso normal.

•	Se destination for um arquivo existente, ocorrerá um erro.

•	Se destination for um diretório, ocorrerá um erro.

Também ocorrerá um erro se um caractere curinga usado em source não corresponder a qualquer arquivo. O método MoveFile será interrompido no primeiro erro encontrado. Nenhuma tentativa é feita para reverter as alterações efetuadas antes da ocorrência do erro.

Importante   Esse método permite a movimentação de arquivos entre volumes somente se isso for suportado pelo sistema operacional.


Método MoveFolder

Descrição

Move uma ou mais pastas de um local para outro.

Sintaxe

object.MoveFolder source, destination

A sintaxe do método MoveFolder possui as seguintes partes:

Parte	Descrição
object	Obrigatória. Sempre o nome de um FileSystemObject.
source	Obrigatória. O caminho para a pasta ou pastas a serem movidas. A seqüência de caracteres do argumento source pode conter caracteres curinga somente no último componente do caminho.
destination	Obrigatória. O caminho para onde a pasta ou pastas devem ser movidas. O argumento destination não pode conter caracteres curinga.
Comentários

Se source contiver curingas ou destination terminar com um separador de caminho (\), presume-se que destination especifique uma pasta existente para onde os arquivos correspondentes devem ser movidos. Caso contrário, presume-se que destination seja o nome de uma pasta de destino a ser criada. Em qualquer dos casos, três possibilidades podem ocorrer quando uma pasta individual é movida:

•	Se destination não existir, a pasta é movida. Esse é o caso normal.

•	Se destination for um arquivo existente, ocorrerá um erro.

•	Se destination for um diretório, ocorrerá um erro.

Também ocorrerá um erro se um caractere curinga que seja usado em source não corresponder a qualquer pasta. O método MoveFolder será interrompido no primeiro erro encontrado. Nenhuma tentativa é feita para reverter as alterações efetuadas antes da ocorrência do erro.

Importante   Esse método permite a movimentação de pastas entre volumes somente se isso for suportado pelo sistema operacional.


Método OpenAsTextStream

Descrição

Abre um arquivo especificado e retorna um objeto TextStream que pode ser usado para leitura, gravação ou acréscimo ao arquivo.

Sintaxe

object.OpenAsTextStream([iomode, [format]])

A sintaxe do método OpenAsTextStream possui as seguintes partes:

Parte	Descrição
object	Obrigatória. Sempre o nome de um objeto File.
iomode	Opcional. Indica modo de entrada/saída. Pode ser uma das três constantes: ForReading, ForWriting ou ForAppending.
format	Opcional. Um dos três valores Tristate usados para indicar o formato do arquivo aberto. Se for omitido, o arquivo será aberto como ASCII.
Definições

O argumento iomode pode ter qualquer das seguintes configurações:

Constante	Valor	Descrição
ForReading	1	Abrir um arquivo para  apenas leitura . Você não pode gravar nesse arquivo.
ForWriting	2	Abrir um arquivo para gravação. Se existir um arquivo com o mesmo nome, seu conteúdo anterior será sobrescrito.
ForAppending	8	Abrir um arquivo e gravar no final do arquivo.
O argumento format pode ter qualquer das seguintes configurações:

Constante	Valor	Descrição
TristateUseDefault	–2	Abre o arquivo usando o padrão do sistema.
TristateTrue	–1	Abre o arquivo como Unicode.
TristateFalse	0	Abre o arquivo como ASCII.
Comentários

O método OpenAsTextStream proporciona a mesma funcionalidade do método OpenTextFile de FileSystemObject. Além disso, o método OpenAsTextStream pode ser usado para gravar em um arquivo.

O código a seguir ilustra o uso do método OpenAsTextStream:

Sub TextStreamTest

    Const ForReading = 1, ForWriting = 2, ForAppending = 3

    Const TristateUseDefault = -2, TristateTrue = -1, TristateFalse = 0

    Dim fs, f, ts, s

    Set fs = CreateObject("Scripting.FileSystemObject")

    fs.CreateTextFile "test1.txt"            'Criar um arquivo

    Set f = fs.GetFile("test1.txt")

    Set ts = f.OpenAsTextStream(ForWriting, TristateUseDefault)

    ts.Write "Olá Mundo"

    ts.Close

    Set ts = f.OpenAsTextStream(ForReading, TristateUseDefault)

    s = ts.ReadLine

    MsgBox s

    ts.Close

End Sub


Método OpenTextFile

Descrição

Abre um arquivo especificado e retorna um objeto TextStream que pode ser usado para leitura ou acréscimo ao arquivo.

Sintaxe

object.OpenTextFile(filename[, iomode[, create[, format]]])

A sintaxe do método OpenTextFile possui as seguintes partes:

Parte	Descrição
Object	Obrigatória. Sempre o nome de um FileSystemObject.
Filename	Obrigatória. A expressão de seqüência que identifica o arquivo a ser aberto.
iomode	Opcional. Indica modo de entrada/saída. Pode ser uma das duas constantes, ForReading ou ForAppending.
create	Opcional. Valor Booleano que indica se um novo arquivo poderá ser criado caso o filename especificado não exista. O valor será True se um novo arquivo for criado; False se não for criado. O padrão é False.
format	Opcional. Um dos três valores Tristate usados para indicar o formato do arquivo aberto. Se for omitido, o arquivo será aberto como ASCII.
Definições

O argumento iomode pode ter qualquer das configurações a seguir:

Constante	Valor	Descrição
ForReading	1	Abrir um arquivo para  apenas leitura . Você não pode gravar nesse arquivo.
ForAppending	8	Abrir um arquivo e gravar no final do arquivo.
O argumento format pode ter qualquer das seguintes configurações:

Constante	Valor	Descrição
TristateUseDefault	–2	Abre o arquivo usando o padrão do sistema.
TristateTrue	–1	Abre o arquivo como Unicode.
TristateFalse	0	Abre o arquivo como ASCII.
Comentários

O código a seguir ilustra o uso do método OpenTextFile para abrir um arquivo para acrescentar texto:

Sub OpenTextFileTest

    Const ForReading = 1, ForWriting = 2, ForAppending = 3

    Dim fs, f

    Set fs = CreateObject("Scripting.FileSystemObject")

    Set f = fs.OpenTextFile("c:\arqteste.txt", ForAppending,TristateFalse)

    f.Write "Olá mundo!"

    f.Close

End Sub


Método Read

Descrição

Lê um número de caracteres especificado de um arquivo TextStream e retorna a seqüência de caracteres resultante.

Sintaxe

object.Read(characters)

A sintaxe do método Read possui as seguintes partes:

Parte	Descrição
object	Obrigatória. Sempre o nome de um objeto TextStream.
characters	Obrigatória. O número de caracteres a serem lidos no arquivo.


Método ReadAll

Descrição

Lê um arquivo TextStream inteiro e retorna a seqüência de caracteres resultante.

Sintaxe

object.ReadAll

O object é sempre o nome de um objeto TextStream.

Comentários

Para arquivos grandes, o uso do método ReadAll desperdiça recursos de memória. Outras técnicas devem ser usadas para entrada de um arquivo, como leitura de um arquivo linha por linha.


Método ReadLine

Descrição

Lê uma linha inteira (até, porém,sem incluir o caractere de nova linha) de um arquivo TextStream e retorna a seqüência de caracteres resultante.

Sintaxe

object.ReadLine

O argumento object é sempre o nome de um objeto TextStream.


Método Remove (objeto FileSystemObject)
Método Remove

Descrição

Remove um par de item e chave de um objeto Dictionary.

Sintaxe

object.Remove(key)

A sintaxe do método Remove possui as seguintes partes:

Parte	Descrição
object	Obrigatória. Sempre o nome de um objeto Dictionary.
key	Obrigatória. Key associada ao par de item e chave que você deseja remover do Dictionary.
Comentários

Ocorrerá um erro se o par de item e chave especificado não existir.

O código a seguir ilustra o uso do método Remove:

Dim a, d, i             'Criar algumas variáveis

Set d = CreateObject("Scripting.Dictionary")

d.Add "a", "Atenas"     'Adicionar algumas chaves e itens

d.Add "b", "Belgrado"

d.Add "c", "Cairo"

...

a = d.Remove()          'Remover o segundo par


Método RemoveAll

Descrição

O método RemoveAll remove todos os pares de itens e chaves de um objeto Dictionary.

Sintaxe

object.RemoveAll

O object é sempre o nome de um objeto Dictionary.

Comentários

O código a seguir ilustra o uso do método RemoveAll:

Dim a, d, i             'Criar algumas variáveis

Set d = CreateObject("Scripting.Dictionary")

d.Add "a", "Atenas"     'Adicionar algumas chaves e itens

d.Add "b", "Belgrado"

d.Add "c", "Cairo"

...

a = d.RemoveAll         'Limpar o dicionário


Método Skip

Descrição

Ignora um número especificado de caracteres ao ler um arquivo TextStream.

Sintaxe

object.Skip(characters)

A sintaxe do método Skip possui as seguintes partes:

Parte	Descrição
object	Obrigatória. Sempre o nome de um objeto TextStream.
characters	Obrigatória. Número de caracteres a serem ignorados durante a leitura de um arquivo.
Comentários

Os caracteres ignorados são descartados.


Método SkipLine

Descrição

Ignora a linha seguinte ao ler um arquivo TextStream.

Sintaxe

object.SkipLine

O object é sempre o nome de um objeto TextStream.

Comentários

Ignorar uma linha significa ler e descartar todos os caracteres na linha até, e incluindo, o próximo caractere de nova linha.

Ocorrerá um erro se o arquivo não estiver aberto para leitura.


Método Write

Descrição

Grava uma seqüência de caracteres especificada em um arquivo TextStream.

Sintaxe

object.Write(string)

A sintaxe do método Write possui as seguintes partes:

Parte	Descrição
object	Obrigatória. Sempre o nome de um objeto TextStream.
string	Obrigatória. O texto a ser gravado no arquivo.
Comentários

As seqüências de caracteres especificadas são gravadas no arquivo sem ocorrência de espaços ou caracteres entre cada seqüência. Use o método WriteLine para gravar um caractere de nova linha ou uma seqüência de caracteres que termine com um caractere de nova linha.


Método WriteBlankLines

Descrição

Grava um número especificado de caracteres de nova linha em um arquivo TextStream.

Sintaxe

object.WriteBlankLines(lines)

A sintaxe do método WriteBlankLines possui as seguintes partes:

Parte	Descrição
object	Obrigatória. Sempre o nome de um objeto TextStream.
lines	Obrigatória. O número de caracteres de nova linha que você deseja gravar no arquivo.


Método WriteLine

Descrição

Grava uma seqüência de caracteres especificada e caractere de nova linha em um arquivo TextStream.

Sintaxe

object.WriteLine([string])

A sintaxe do método WriteLine possui as seguintes partes:

Parte	Descrição
object	Obrigatória. Sempre o nome de um objeto TextStream.
string	Opcional. O texto a ser gravado no arquivo. Se for omitido, um caractere de nova linha será gravado no arquivo.


Objeto Dictionary

Descrição

Objeto que armazena os pares item e chave dos dados.

Sintaxe

Scripting.Dictionary

Comentários

Um objeto Dictionary é o equivalente de uma matriz associativa PERL(Practical Extraction and Report Language, Linguagem prática para extração e relatórios). Os itens, que podem ser qualquer formato de dados, são armazenados na matriz. Cada item é associado a uma chave exclusiva. A chave é usada para recuperar um item individual e geralmente é um número inteiro ou uma seqüência de caracteres, mas pode ser qualquer coisa exceto uma matriz.

O código a seguir ilustra como criar um objeto Dictionary:

Dim d                   'Criar uma variável

Set d = CreateObject(Scripting.Dictionary)

d.Add "a", "Atenas"     'Adicionar algumas chaves e itens

d.Add "b", "Belgrado"

d.Add "c", "Cairo"

...


Objeto Drive

Descrição

Fornece acesso às propriedades de uma determinada unidade de disco ou compartilhamento de rede.

Comentários

O código a seguir ilustra o uso do objeto Drive para acessar propriedades da unidade:

Sub ShowFreeSpace(drvPath)

    Dim fs, d, s

    Set fs = CreateObject("Scripting.FileSystemObject")

    Set d = fs.GetDrive(fs.GetDriveName(drvPath))

    s = "Unidade " & UCase(drvPath) & " - "

    s = s & d.VolumeName  & vbCrLf

    s = s & "Espaço livre: " & FormatNumber(d.FreeSpace/1024, 0)

    s = s & " Kbytes"

    MsgBox s

End Sub


Coleção Drives

Descrição

Coleção somente leitura de todas as unidades disponíveis.

Comentários

Unidades de mídia removível não precisam ter a mídia inserida para aparecer na coleção Drives.

O código a seguir ilustra como obter a coleção Drives e iterar a coleção usando a instrução For Each...Next:

Sub ShowDriveList

    Dim fs, d, dc, s, n

    Set fs = CreateObject("Scripting.FileSystemObject")

    Set dc = fs.Drives

    For Each d in dc

        s = s & d.DriveLetter & " - "

        If d.DriveType = Remote Then

            n = d.ShareName

        Else

            n = d.VolumeName

        End If

        s = s & n & vbCrLf

    Next

    MsgBox s

End Sub


Objeto File

Descrição

Fornece acesso a todas as propriedades de um arquivo.

Comentários

O código a seguir ilustra como obter um objeto File e como visualizar uma de suas propriedades.

Sub ShowFileInfo(filespec)

    Dim fs, f, s

    Set fs = CreateObject("Scripting.FileSystemObject")

    Set f = fs.GetFile(filespec)

    s = f.DateCreated

    MsgBox s

End Sub


Coleção Files

Descrição

Coleção de todos os objetos File dentro de uma pasta.

Comentários

O código a seguir ilustra como obter uma coleção Files e iterar a coleção usando a instrução For Each...Next:

Sub ShowFolderList(folderspec)

    Dim fs, f, f1, fc, s

    Set fs = CreateObject("Scripting.FileSystemObject")

    Set f = fs.GetFolder(folderspec)

    Set fc = f.Files

    For Each f1 in fc

        s = s & f1.name

        s = s & vbCrLf

    Next

    MsgBox s

End Sub


Objeto FileSystemObject

Descrição

Fornece acesso ao sistema de arquivos de um computador.

Sintaxe

Scripting.FileSystemObject

Comentários

O código a seguir ilustra como o FileSystemObject é usado para retornar um objeto TextStream que pode ser lido de ou gravado para:

Set fs = CreateObject("Scripting.FileSystemObject")

Set a = fs.CreateTextFile("c:\arqteste.txt", True)

a.WriteLine("Isto é um teste.")

a.Close

No código mostrado acima, a função CreateObject retorna o FileSystemObject (fs). O método CreateTextFile cria então arquivo como um objeto TextStream (a) e o método WriteLine escreve uma linha de texto para o arquivo de texto criado. O método Close libera o buffer e fecha o arquivo.


Objeto Folder

Descrição

Fornece acesso a todas as propriedades de uma pasta.

Comentários

O código a seguir ilustra como obter um objeto Folder e como retornar uma de suas propriedades:

Sub ShowFolderInfo(folderspec)

    Dim fs, f, s,

    Set fs = CreateObject("Scripting.FileSystemObject")

    Set f = fs.GetFolder(folderspec)

    s = f.DateCreated

    MsgBox s

End Sub


Coleção Folders

Descrição

Coleção de todos os objetos Folder contidos em um objeto Folder.

Comentários

O código a seguir ilustra como obter uma coleção Folders e iterar a coleção usando a instrução For Each...Next:

Sub ShowFolderList(folderspec)

    Dim fs, f, f1, fc, s

    Set fs = CreateObject("Scripting.FileSystemObject")

    Set f = fs.GetFolder(folderspec)

    Set fc = f.SubFolders

    For Each f1 in fc

        s = s & f1.name

        s = s & vbCrLf

    Next

    MsgBox s

End Sub


Objeto TextStream

Descrição

Facilita o acesso seqüencial ao arquivo.

Sintaxe

TextStream.{property | method}

Os argumentos property e method podem ser qualquer uma das propriedades e métodos associados ao objeto TextStream. Observe que no uso real, TextStream é substituído por um espaço reservado para variável representando o objeto TextStream retornado do FileSystemObject.

Comentários

No código a seguir, a é o objeto TextStream retornado pelo método CreateTextFile no FileSystemObject:

Set fs = CreateObject("Scripting.FileSystemObject")

Set a = fs.CreateTextFile("c:\arqteste.txt", True)

a.WriteLine("Isto é um teste.")

a.Close

WriteLine e Close são dois métodos do Objeto TextStream.


Operador =

Descrição

Usado para atribuir um valor a uma variável ou propriedade.

Sintaxe

variable = value

A sintaxe do operador = possui as seguintes partes:

Parte	Descrição
variable	Qualquer variável ou propriedade gravável.
value	Qualquer literal numérico ou de seqüência de caracteres, constante ou expressão.
Comentários

O nome no lado esquerdo do sinal de igual pode ser uma variável escalar simples ou um elemento de uma matriz. As propriedades no lado esquerdo do sinal de igual só podem ser as propriedades que são graváveis no tempo de execução.


Propriedade AtEndOfLine

Descrição

Propriedade somente leitura que retorna True se o indicador de arquivo preceder imediatamente a marca de fim de linha em um arquivo TextStream; caso contrário, será False.

Sintaxe

object.AtEndOfLine

O object é sempre o nome de um objeto TextStream.

Comentários

A propriedade AtEndOfLine aplica-se somente a arquivos TextStream que são abertos para leitura; caso contrário, ocorrerá um erro.

O código a seguir ilustra o uso da propriedade AtEndOfLine:

Dim fs, a, retstring

Set fs = CreateObject("Scripting.FileSystemObject")

Set a = fs.OpenTextFile("c:\arqteste.txt", ForReading, False)

Do While a.AtEndOfLine <> True

    retstring = a.Read(1)

    ...

Loop

a.Close


Propriedade AtEndOfStream

Descrição

Propriedade somente leitura que retorna True se o indicador de arquivo estiver no fim de um arquivo TextStream; caso contrário, será False.

Sintaxe

object.AtEndOfStream

O object é sempre o nome de um objeto TextStream.

Comentários

A propriedade AtEndOfStream aplica-se somente a arquivos TextStream que são abertos para leitura; caso contrário, ocorrerá um erro.

O código a seguir ilustra o uso da propriedade AtEndOfStream:

Dim fs, a, retstring

Set fs = CreateObject("Scripting.FileSystemObject")

Set a = fs.OpenTextFile("c:\arqteste.txt", ForReading, False)

Do While a.AtEndOfStream <> True

    retstring = a.ReadLine

    ...

Loop

a.Close


Propriedade Attributes

Descrição

Define ou retorna os atributos de arquivos ou pastas. Leitura/gravação ou somente leitura, dependendo do atributo.

Sintaxe

object.Attributes [= newattributes]

A propriedade Attributes tem as seguintes partes:

Parte	Descrição
object	Obrigatória. Sempre o nome de um objeto File ou Folder.
newattributes	Opcional. Se fornecido, newattributes será o novo valor para os atributos do object especificado.
Definições

O argumento newattributes pode ter qualquer um dos seguintes valores ou qualquer combinação lógica dos seguintes valores:

Constante	Valor	Descrição
Normal	0	Arquivo normal. Nenhum atributo é definido.
ReadOnly	1	Arquivo somente leitura. O atributo é leitura/gravação.
Oculto	2	Arquivo oculto. O atributo é leitura/gravação.
System	4	Arquivo do sistema. O atributo é leitura/gravação.
Volume	8	Rótulo de volume da unidade de disco. O atributo é somente leitura.
Directory	16	Pasta ou diretório. O atributo é somente leitura.
Archive	32	O arquivo foi alterado após o último backup. O atributo é leitura/gravação.
Alias	64	Vínculo ou atalho. O atributo é somente leitura.
Compressed	128	Arquivo compactado. O atributo é somente leitura.
Comentários

O código a seguir ilustra o uso da propriedade Attributes com um arquivo:

Sub SetClearArchiveBit(filespec)

    Dim fs, f, r

    Set fs = CreateObject("Scripting.FileSystemObject")

    Set f = fs.GetFile(fs.GetFileName(filespec))

    If f.attributes and 32 Then

        r = MsgBox("O bit de arquivo-morto está definido, deseja desmarcá-lo?", vbYesNo, "Definir/desmarcar bit de arquivo-morto")

        If r = vbYes Then

            f.attributes = f.attributes - 32

            MsgBox "O bit de arquivo-morto foi removido."

        Else

            MsgBox "O bit de arquivo-morto permanece definido."

        End If

    Else

        r = MsgBox("O bit de arquivo-morto não está definido. Deseja defini-lo?", vbYesNo, "Definir/desmarcar bit de arquivo-morto")

        If r = vbYes Then

            f.attributes = f.attributes ++32

            MsgBox "O bit de arquivo-morto está definido."

        Else

            MsgBox "O bit de arquivo-morto permanece desmarcado."

        End If

    End If

End Sub


Propriedade AvailableSpace

Descrição

Retorna a quantidade de espaço disponível para um usuário na unidade especificada ou compartilhamento de rede.

Sintaxe

object.AvailableSpace

O object é sempre um objeto Drive.

Comentários

O valor retornado pela propriedade AvailableSpace geralmente é o mesmo daquele retornado pela propriedade FreeSpace. Podem ocorrer diferenças entre os dois valores para sistemas de computador que suportam cotas.

O código a seguir ilustra o uso da propriedade AvailableSpace:

Sub ShowAvailableSpace(drvPath)

    Dim fs, d, s

    Set fs = CreateObject("Scripting.FileSystemObject")

    Set d = fs.GetDrive(fs.GetDriveName(drvPath))

    s = "Unidade " & UCase(drvPath) & " - "

    s = s & d.VolumeName  & vbCrLf

    s = s & "Espaço disponível: " & FormatNumber(d.AvailableSpace/1024, 0)

    s = s & " Kbytes"

    MsgBox s

End Sub


Propriedade Column

Descrição

Propriedade somente leitura que retorna o número de coluna da posição de caractere atual em um arquivo TextStream.

Sintaxe

object.Column

O object é sempre o nome de um objeto TextStream.

Comentários

Após um caractere de nova linha ter sido escrito, mas antes de qualquer outro caractere, Column será igual a 1.


Propriedade CompareMode

Descrição

Define e retorna o modo de comparação para comparar chaves de seqüência de caracteres em um objeto Dictionary.

Sintaxe

object.CompareMode[ = compare]

A propriedade CompareMode tem as seguintes partes:

Parte	Descrição
object	Obrigatória. Sempre o nome de um objeto Dictionary.
compare	Opcional. Se fornecido, compare será um valor que representa o modo de comparação usado pelas funções, como StrComp.
Definições

O argumento compare pode ter os seguintes valores:

Constante	Valor	Descrição
vbUseCompareOption	–1	Executa uma comparação usando a configuração da instrução Option Compare.
vbBinaryCompare	0	Executa uma comparação binária.
vbTextCompare	1	Executa uma comparação textual.
vbDatabaseCompare	2	Somente Microsoft Access. Efetua uma comparação, com base nas informações existentes no banco de dados.
Comentários

Ocorrerá um erro se você tentar alterar o modo de comparação de um objeto Dictionary que já contém dados.

A propriedade CompareMode usa os mesmos valores que o argumento compare para a função StrComp. Os valores maiores que 2 podem ser usados para fazer referências a comparações usando IDs de localidade específicos (LCID).


Propriedade Count (objeto FileSystemObject)
Propriedade Count

Descrição

Retorna o número de itens em uma coleção ou objeto Dictionary. Somente leitura.

Sintaxe

object.Count

O object é sempre o nome de um dos itens da lista Aplica-se a.

Comentários

O código a seguir ilustra o uso da propriedade Count:

Dim a, d, i             'Criar algumas variáveis

Set d = CreateObject("Scripting.Dictionary")

d.Add "a", "Atenas"     'Adicionar algumas chaves e itens.

d.Add "b", "Belgrado"

d.Add "c", "Cairo"

a = d.Keys              'Obter as chaves

For i = 0 To d.Count -1 'Iterar a matriz

    Print a(i)          'Imprimir a chave

Next

...


Propriedade DateCreated

Descrição

Retorna a data e hora em que o arquivo ou a pasta especificada foi criada. Somente leitura.

Sintaxe

object.DateCreated

O object é sempre um objeto File ou Folder.

Comentários

O código a seguir ilustra o uso da propriedade DateCreated com um arquivo:

Sub ShowFileInfo(filespec)

    Dim fs, f, s

    Set fs = CreateObject("Scripting.FileSystemObject")

    Set f = fs.GetFile(filespec)

    s = "Criado em: " & f.DateCreated

    MsgBox s

End Sub


Propriedade DateLastAccessed

Descrição

Retorna a data e hora em que o arquivo ou a pasta especificada foi acessada pela última vez. Somente leitura.

Sintaxe

object.DateLastAccessed

O object é sempre um objeto File ou Folder.

Comentários

O código a seguir ilustra o uso da propriedade DateLastAccessed com um arquivo:

Sub ShowFileAccessInfo(filespec)

    Dim fs, f, s

    Set fs = CreateObject("Scripting.FileSystemObject")

    Set f = fs.GetFile(filespec)

    s = UCase(filespec) & vbCrLf

    s = s & "Criado em: " & f.DateCreated & vbCrLf

    s = s & "Data do último acesso: " & f.DateLastAccessed & vbCrLf

    s = s & "Data da última modificação: " & f.DateLastModified

    MsgBox s, 0, "Informações de acesso ao arquivo"

End Sub

Importante   O comportamento deste método depende do sistema operacional base. Se o sistema operacional não suportar o fornecimento de informações de hora, nada será retornado.


Propriedade DateLastModified

Descrição

Retorna a data e hora em que o arquivo ou a pasta especificada foi modificada pela última vez. Somente leitura.

Sintaxe

object.DateLastModified

O object é sempre um objeto File ou Folder.

Comentários

O código a seguir ilustra o uso da propriedade DateLastModified com um arquivo:

Sub ShowFileAccessInfo(filespec)

    Dim fs, f, s

    Set fs = CreateObject("Scripting.FileSystemObject")

    Set f = fs.GetFile(filespec)

    s = UCase(filespec) & vbCrLf

    s = s & "Criado em: " & f.DateCreated & vbCrLf

    s = s & "Data do último acesso: " & f.DateLastAccessed & vbCrLf

    s = s & "Data da última modificação: " & f.DateLastModified

    MsgBox s, 0, "Informações de acesso ao arquivo"

End Sub


Propriedade Drive

Descrição

Retorna a letra da unidade na qual o arquivo ou a pasta especificada reside. Somente leitura.

Sintaxe

object.Drive

O object é sempre um objeto File ou Folder.

Comentários

O código a seguir ilustra o uso da propriedade Drive:

Sub ShowFileAccessInfo(filespec)

    Dim fs, f, s

    Set fs = CreateObject("Scripting.FileSystemObject")

    Set f = fs.GetFile(filespec)

    s = f.Name & " na unidade " & UCase(f.Drive) & vbCrLf

    s = s & "Criado em: " & f.DateCreated & vbCrLf

    s = s & "Data do último acesso: " & f.DateLastAccessed & vbCrLf

    s = s & "Data da última modificação: " & f.DateLastModified

    MsgBox s, 0, "Informações de acesso ao arquivo"

End Sub


Propriedade DriveLetter

Descrição

Retorna a letra da unidade de uma unidade local física ou um compartilhamento de rede. Somente leitura.

Sintaxe

object.DriveLetter

O object é sempre um objeto Drive.

Comentários

A propriedade DriveLetter retorna uma seqüência de caracteres de comprimento zero ("") se a unidade especificada não estiver associada a uma letra de unidade, por exemplo, um compartilhamento de rede que não tenha sido mapeado para uma letra de unidade.

O código a seguir ilustra o uso da propriedade DriveLetter:

Sub ShowDriveLetter(drvPath)

    Dim fs, d, s

    Set fs = CreateObject("Scripting.FileSystemObject")

    Set d = fs.GetDrive(fs.GetDriveName(drvPath))

    s = "Unidade " & d.DriveLetter & ": - "

    s = s & d.VolumeName  & vbCrLf

    s = s & "Espaço livre: " & FormatNumber(d.FreeSpace/1024, 0)

    s = s & " Kbytes"

    MsgBox s

End Sub


Propriedade Drives

Descrição

Retorna uma coleção Drives que consiste em todos os objetos Drive disponíveis na máquina local.

Sintaxe

object.Drives

O object é sempre um objeto FileSystemObject.

Comentários

Unidades de mídia removível não precisam ter a mídia inserida para aparecer na coleção Drives.

Você pode iterar os membros da coleção Drives usando uma construção For Each...Next conforme ilustrado no código a seguir:

Sub ShowDriveList

    Dim fs, d, dc, s, n

    Set fs = CreateObject("Scripting.FileSystemObject")

    Set dc = fs.Drives

    For Each d in dc

        s = s & d.DriveLetter & " - "

        If d.DriveType = 3 Then

            n = d.ShareName

        Else

            n = d.VolumeName

        End If

        s = s & n & vbCrLf

    Next

    MsgBox s

End Sub


Propriedade DriveType

Descrição

Retorna um valor indicando o tipo de uma unidade especificada.

Sintaxe

object.DriveType

O object é sempre um objeto Drive.

Comentários

O código a seguir ilustra o uso da propriedade DriveType:

Sub ShowDriveType(drvpath)

    Dim fs, d, s, t

    Set fs = CreateObject("Scripting.FileSystemObject")

    Set d = fs.GetDrive(drvpath)

    Select Case d.DriveType

        Case 0: t = "Desconhecido"

        Case 1: t = "Removível"

        Case 2: t = "Fixo"

        Case 3: t = "Rede"

        Case 4: t = "CD-ROM"

        Case 5: t = "Disco RAM"

    End Select

    s = "Unidade " & d.DriveLetter & ": - " & t

    MsgBox s

End Sub


Propriedade Files

Descrição

Retorna uma coleção Files que consiste em todos os objetos File contidos na pasta especificada, incluindo aqueles com os atributos oculto e arquivo do sistema definidos.

Sintaxe

object.Files

O object é sempre um objeto Folder.

Comentários

O código a seguir ilustra o uso da propriedade Files:

Sub ShowFileList(folderspec)

    Dim fs, f, f1, fc, s

    Set fs = CreateObject("Scripting.FileSystemObject")

    Set f = fs.GetFolder(folderspec)

    Set fc = f.Files

    For Each f1 in fc

        s = s & f1.name

        s = s & vbCrLf

    Next

    MsgBox s

End Sub


Propriedade FileSystem

Descrição

Retorna o tipo de sistema de arquivos em uso para a unidade especificada.

Sintaxe

object.FileSystem

O object é sempre um objeto Drive.

Comentários

Tipos de retorno disponíveis incluem FAT, NTFS e CDFS.

O código a seguir ilustra o uso da propriedade FileSystem:

Sub ShowFileSystemType

    Dim fs,d, s

    Set fs = CreateObject("Scripting.FileSystemObject")

    Set d = fs.GetDrive("e:")

    s = d.FileSystem

    MsgBox s

End Sub


Propriedade FreeSpace

Descrição

Retorna a quantidade de espaço livre disponível para um usuário na unidade especificada ou compartilhamento de rede. Somente leitura.

Sintaxe

object.FreeSpace

O object é sempre um objeto Drive.

Comentários

O valor retornado pela propriedade FreeSpace geralmente é o mesmo daquele retornado pela propriedade AvailableSpace. Podem ocorrer diferenças entre os dois valores para sistemas de computador que suportam cotas.

O código a seguir ilustra o uso da propriedade FreeSpace:

Sub ShowFreeSpace(drvPath)

    Dim fs, d, s

    Set fs = CreateObject("Scripting.FileSystemObject")

    Set d = fs.GetDrive(fs.GetDriveName(drvPath))

    s = "Unidade " & UCase(drvPath) & " - "

    s = s & d.VolumeName  & vbCrLf

    s = s & "Espaço livre: " & FormatNumber(d.FreeSpace/1024, 0)

    s = s & " Kbytes"

    MsgBox s

End Sub


Propriedade IsReady

Descrição

Retorna True se a unidade especificada estiver preparada; caso contrário, retorna False.

Sintaxe

object.IsReady

O object é sempre um objeto Drive.

Comentários

Para unidades de meio removível e unidades de CD-ROM, IsReady retorna True somente quando o meio apropriado é inserido e preparado para acesso.

O código a seguir ilustra o uso da propriedade IsReady:

Sub ShowDriveInfo(drvpath)

    Dim fs, d, s, t

    Set fs = CreateObject("Scripting.FileSystemObject")

    Set d = fs.GetDrive(drvpath)

    Select Case d.DriveType

        Case 0: t = "Desconhecido"

        Case 1: t = "Removível"

        Case 2: t = "Fixo"

        Case 3: t = "Rede"

        Case 4: t = "CD-ROM"

        Case 5: t = "Disco RAM"

    End Select

    s = "Unidade " & d.DriveLetter & ": - " & t

    If d.IsReady Then

        s = s & vbCrLf & "A unidade está preparada."

    Else

        s = s & vbCrLf & "A unidade não está preparada."

    End If

    MsgBox s

End Sub


Propriedade IsRootFolder

Descrição

Retorna True se a pasta especificada for a pasta raiz; caso contrário, retorna False.

Sintaxe

object.IsRootFolder

O object é sempre um objeto Folder.

Comentários

O código a seguir ilustra o uso da propriedade IsRootFolder:

Dim fs

Set fs = CreateObject("Scripting.FileSystemObject")

Sub DisplayLevelDepth(pathspec)

    Dim f, n

    Set f = fs.GetFolder(pathspec)

    If f.IsRootFolder Then

        MsgBox "A pasta especificada é a pasta raiz."

    Else

        Do Until f.IsRootFolder

            Set f = f.ParentFolder

            n = n + 1

        Loop

        MsgBox "A pasta especificada está aninhada em " & n & " níveis."

    End If

End Sub


Propriedade Item (objeto FileSystemObject)
Propriedade Item

Descrição

Define ou retorna um item para uma chave especificada em um objeto Dictionary. Para coleções, retorna um item baseado na key especificada. Leitura/gravação.

Sintaxe

object.Item(key) [= newitem]

A propriedade Item tem as seguintes partes:

Parte	Descrição
object	Obrigatória. Sempre o nome de uma coleção ou objeto Dictionary.
key	Obrigatória. Key associada ao item que está recuperado ou adicionado.
newitem	Opcional. Usado somente para o objeto Dictionary; nenhum aplicativo para coleções. Se fornecido, newitem será o novo valor associado à key especificada.
Comentários

Se key não for encontrada ao alterar um item, uma nova key será criada com o newitem especificado. Se key não for encontrada ao tentar retornar um item existente, uma nova key será criada e seu item correspondente será deixado vazio.


Propriedade Key

Descrição

Define uma key em um objeto Dictionary.

Sintaxe

object.Key(key) = newkey

A propriedade Key tem as seguintes partes:

Parte	Descrição
object	Obrigatória. Sempre o nome de um objeto Dictionary.
key	Obrigatória. Valor Key que está sendo alterado.
newkey	Obrigatória. Novo valor que substitui key especificada.
Comentários

Se key não for encontrada ao alterar uma key, ocorrerá um erro em tempo de execução.


Propriedade Line

Descrição

A propriedade somente leitura que retorna o número de linha atual em um arquivo TextStream.

Sintaxe

object.Line

O object é sempre o nome de um objeto TextStream.

Comentários

Após um arquivo ser inicialmente aberto, e antes de escrever algo, Line é igual a 1.


Propriedade Name (objeto FileSystemObject)
Propriedade Name

Descrição

Define ou retorna o nome de um arquivo ou pasta especificada. Leitura/gravação.

Sintaxe

object.Name [= newname]

A propriedade Name tem as seguintes partes:

Parte	Descrição
object	Obrigatória. Sempre o nome de um objeto File ou Folder.
newname	Opcional. Se fornecido, newname será o novo nome do object especificado.
Comentários

O código a seguir ilustra o uso da propriedade Name:

Sub ShowFileAccessInfo(filespec)

    Dim fs, f, s

    Set fs = CreateObject("Scripting.FileSystemObject")

    Set f = fs.GetFile(filespec)

    s = f.Name & " na unidade " & UCase(f.Drive) & vbCrLf

    s = s & "Criado em: " & f.DateCreated & vbCrLf

    s = s & "Data do último acesso: " & f.DateLastAccessed & vbCrLf

    s = s & "Data da última modificação: " & f.DateLastModified

    MsgBox s, 0, "Informações de acesso ao arquivo"

End Sub


Propriedade ParentFolder

Descrição

Retorna o objeto Folder para o pai do arquivo ou pasta especificada. Somente leitura.

Sintaxe

object.ParentFolder

O object é sempre um objeto File ou Folder.

Comentários

O código a seguir ilustra o uso da propriedade ParentFolder com um arquivo:

Sub ShowFileAccessInfo(filespec)

    Dim fs, f, s

    Set fs = CreateObject("Scripting.FileSystemObject")

    Set f = fs.GetFile(filespec)

    s = UCase(f.Name) & " em " & UCase(f.ParentFolder) & vbCrLf

    s = s & "Criado em: " & f.DateCreated & vbCrLf

    s = s & "Data do último acesso: " & f.DateLastAccessed & vbCrLf

    s = s & "Data da última modificação: " & f.DateLastModified

    MsgBox s, 0, "Informações de acesso ao arquivo"

End Sub


Propriedade Path (objeto FileSystemObject)
Propriedade Path

Descrição

Retorna o caminho para um arquivo, pasta ou unidade especificada.

Sintaxe

object.Path

O object é sempre um objeto File, Folder ou Drive.

Comentários

Para letras de unidade, a unidade raiz não é incluída. Por exemplo, o caminho para a unidade C é C:, não C:\.

O código a seguir ilustra o uso da propriedade Path com um objeto File:

Sub ShowFileAccessInfo(filespec)

    Dim fs, d, f, s

    Set fs = CreateObject("Scripting.FileSystemObject")

    Set f = fs.GetFile(filespec)

    s = UCase(f.Path) & vbCrLf

    s = s & "Criado em: " & f.DateCreated & vbCrLf

    s = s & "Data do último acesso: " & f.DateLastAccessed & vbCrLf

    s = s & "Data da última modificação: " & f.DateLastModified

    MsgBox s, 0, "Informações de acesso ao arquivo"

End Sub


Propriedade RootFolder

Descrição

Retorna um objeto Folder que representa a pasta raiz de uma unidade especificada. Somente leitura.

Sintaxe

object.RootFolder

O object é sempre um objeto Drive.

Comentários

Todos os arquivos e pastas contidos na unidade podem ser acessados usando o objeto Folder retornado.


Propriedade SerialNumber

Descrição

Retorna o número de série decimal usado para identificar exclusivamente um volume de disco.

Sintaxe

object.SerialNumber

O object é sempre um objeto Drive.

Comentários

Você pode usar a propriedade SerialNumber para garantir que o disco correto seja inserido em uma unidade com meio removível.

O código a seguir ilustra o uso da propriedade SerialNumber:

Sub ShowDriveInfo(drvpath)

    Dim fs, d, s, t

    Set fs = CreateObject("Scripting.FileSystemObject")

    Set d = fs.GetDrive(fs.GetDriveName(fs.GetAbsolutePathName(drvpath)))

    Select Case d.DriveType

        Case 0: t = "Desconhecido"

        Case 1: t = "Removível"

        Case 2: t = "Fixo"

        Case 3: t = "Rede"

        Case 4: t = "CD-ROM"

        Case 5: t = "Disco RAM"

    End Select

    s = "Unidade " & d.DriveLetter & ": - " & t

    s = s & vbCrLf & "SN: " & d.SerialNumber

    MsgBox s

End Sub


Propriedade ShareName

Descrição

Retorna o nome do compartilhamento de rede para uma unidade especificada.

Sintaxe

object.ShareName

O object é sempre um objeto Drive.

Comentários

Se object não for uma unidade de rede, a propriedade ShareName retornará uma seqüência de caracteres de comprimento zero ("").

O código a seguir ilustra o uso da propriedade ShareName:

Sub ShowDriveInfo(drvpath)

    Dim fs, d, s

    Set fs = CreateObject("Scripting.FileSystemObject")

    Set d = fs.GetDrive(fs.GetDriveName(fs.GetAbsolutePathName(drvpath)))

    s = "Unidade " & d.DriveLetter & ": - " & d.ShareName

    MsgBox s

End Sub


Propriedade ShortName

Descrição

Retorna o nome abreviado usado pelos programas que requerem a convenção de nomenclatura 8.3 anterior.

Sintaxe

object.ShortName

O object é sempre um objeto File ou Folder.

Comentários

O código a seguir ilustra o uso da propriedade ShortName com um objeto File:

Sub ShowShortName(filespec)

    Dim fs, f, s

    Set fs = CreateObject("Scripting.FileSystemObject")

    Set f = fs.GetFile(filespec)

    s = "O nome abreviado para " & "" & UCase(f.Name)

    s = s & "" & vbCrLf

    s = s & "é: " & "" & f.ShortName & ""

    MsgBox s, 0, "Informações sobre o nome abreviado"

End Sub


Propriedade ShortPath

Descrição

Retorna o caminho reduzido usado pelos programas que requerem a convenção de nomenclatura 8.3 anterior.

Sintaxe

object.ShortPath

O object é sempre um objeto File ou Folder.

Comentários

O código a seguir ilustra o uso da propriedade ShortName com um objeto File:

Sub ShowShortPath(filespec)

    Dim fs, f, s

    Set fs = CreateObject("Scripting.FileSystemObject")

    Set f = fs.GetFile(filespec)

    s = "O caminho reduzido para " & "" & UCase(f.Name)

    s = s & "" & vbCrLf

    s = s & "é: " & "" & f.ShortPath & ""

    MsgBox s, 0, "Informações sobre o caminho reduzido"

End Sub


Propriedade Size (objeto FileSystemObject)
Propriedade Size

Descrição

Para arquivos, retorna o tamanho em bytes do arquivo especificado. Para pastas, retorna o tamanho em bytes de todos os arquivos e subpastas contidos na pasta.

Sintaxe

object.Size

O object é sempre um objeto File ou Folder.

Comentários

O código a seguir ilustra o uso da propriedade Size com um objeto Folder:

Sub ShowFolderSize(filespec)

    Dim fs, f, s

    Set fs = CreateObject("Scripting.FileSystemObject")

    Set f = fs.GetFolder(filespec)

    s = UCase(f.Name) & " usa " & f.size & " bytes."

    MsgBox s, 0, "Informações sobre o tamanho da pasta"

End Sub


Propriedade SubFolders

Descrição

Retorna uma coleção Folders que consiste em todas as pastas contidas em uma pasta especificada, incluindo aquelas com os atributos de arquivo Hidden e System definidos.

Sintaxe

object.SubFolders

O object é sempre um objeto Folder.

Comentários

O código a seguir ilustra o uso da propriedade SubFolders:

Sub ShowFolderList(folderspec)

    Dim fs, f, f1, s, sf

    Set fs = CreateObject("Scripting.FileSystemObject")

    Set f = fs.GetFolder(folderspec)

    Set sf = f.SubFolders

    For Each f1 in sf

        s = s & f1.name

        s = s & vbCrLf

    Next

    MsgBox s

End Sub


Propriedade TotalSize

Descrição

Retorna o espaço total, em bytes, de uma unidade ou compartilhamento de rede.

Sintaxe

object.TotalSize

O object é sempre um objeto Drive.

Comentários

O código a seguir ilustra o uso da propriedade TotalSize:

Sub ShowSpaceInfo(drvpath)

    Dim fs, d, s

    Set fs = CreateObject("Scripting.FileSystemObject")

    Set d = fs.GetDrive(fs.GetDriveName(fs.GetAbsolutePathName(drvpath)))

    s = "Unidade " & d.DriveLetter & ":"

    s = s & vbCrLf

    s = s & "Tamanho total: " & FormatNumber(d.TotalSize/1024, 0) & " Kbytes"

    s = s & vbCrLf

    s = s & "Disponível: " & FormatNumber(d.AvailableSpace/1024, 0) & " Kbytes"

    MsgBox s

End Sub


Propriedade Type (objeto FileSystemObject)
Propriedade Type

Descrição

Retorna informações sobre o tipo de um arquivo ou pasta. Por exemplo, para arquivos que terminam em .TXT, "Documento de texto" é retornado.

Sintaxe

object.Type

O object é sempre um objeto File ou Folder.

Comentários

O código a seguir ilustra o uso da propriedade Type para retornar um tipo de pasta. Neste exemplo, tente fornecer o caminho da Lixeira ou de outra pasta exclusiva para o procedimento.

Sub ShowFileSize(filespec)

    Dim fs, f, s

    Set fs = CreateObject("Scripting.FileSystemObject")

    Set f = fs.GetFolder(filespec)

    s = UCase(f.Name) & " é um " & f.Type

    MsgBox s, 0, "Informações sobre o tamanho do arquivo"

End Sub


Propriedade VolumeName

Descrição

Define ou retorna o nome do volume da unidade especificada. Leitura/gravação.

Sintaxe

object.VolumeName [= newname]

A propriedade VolumeName tem as seguintes partes:

Parte	Descrição
object	Obrigatória. Sempre o nome de um objeto Drive.
newname	Opcional. Se fornecido, newname será o novo nome do object especificado.
Comentários

O código a seguir ilustra o uso da propriedade VolumeName:

Sub ShowVolumeInfo(drvpath)

    Dim fs, d, s

    Set fs = CreateObject("Scripting.FileSystemObject")

    Set d = fs.GetDrive(fs.GetDriveName(fs.GetAbsolutePathName(drvpath)))

    s = "Unidade " & d.DriveLetter & ": - " & d.VolumeName

    MsgBox s

End Sub


Seleção ambígua

Você não selecionou uma palavra-chave ou solicitou Ajuda sobre um componente do ambiente de desenvolvimento integrado (IDE, Integrated Development Environment). Se você estava tentando selecionar uma palavra-chave, tente selecionar novamente uma única palavra-chave. Se você estava tentando obter informações sobre o IDE, clique em uma das opções a seguir:

Janela Code ou Módulo

Janela ou painel Verificação imediata

Janelas ou painel Variáveis locais

Pesquisador de objeto

Janela ou painel Inspeção de variáveis