Colocar instrução

Grava dados de uma variável em um arquivo de disco.

Sintaxe

Put [ # ] filenumber, [ recnumber ], varname

A sintaxe de instrução Put tem estas partes:

Sair Descrição
númerodoarquivo Obrigatório. Qualquer número de arquivo válido.
renumeração Opcional. Variant (Long). Número de registro (arquivos de modo aleatório ) ou número de bytes (arquivos de modo binário ) no qual a gravação começa.
nomedavariável Obrigatório. Nome da variável que contém dados a serem gravados em disco.

Comentários

Os dados gravados com Put geralmente são lidos de um arquivo com Get.

O primeiro registro ou byte em um arquivo está na posição 1, o segundo registro ou byte está na posição 2 e assim por diante. Se você omitir o renumeração, 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 vírgulas de delimitadoras, por exemplo:

Put #4,,FileBuffer 

Para arquivos abertos no modo Aleatório , as seguintes regras se aplicam:

  • Se o comprimento dos dados que estão sendo gravados for menor do que o comprimento especificado na cláusula Len da instrução Open , coloque gravações de registros subsequentes em limites de comprimento de registro. O espaço entre o final de um registro e o início do próximo registro é acolchoado com o conteúdo existente do buffer de arquivo. Como a quantidade de dados de preenchimento não pode ser determinada com certeza, geralmente é uma boa ideia fazer com que o comprimento do registro corresponda ao comprimento dos dados que estão sendo gravados. Se o comprimento dos dados que estão sendo gravados for maior do que o comprimento especificado na cláusula Len da instrução Open , ocorrerá um erro.

  • Se a variável que está sendo escrita for uma cadeia de caracteres de comprimento variável, Coloque grava um descritor de 2 bytes que contém o comprimento da cadeia de caracteres e, em seguida, a variável. O comprimento do registro especificado pela cláusula Len na instrução Open deve ser pelo menos 2 bytes maior que o comprimento real da cadeia de caracteres.

  • Se a variável que está sendo escrita for uma Variant de um tipo numérico, coloque gravações 2 bytes identificando o VarType da Variant e, em seguida, grava a variável. Por exemplo, ao escrever uma Variant de VarType 3, Coloque grava 6 bytes: 2 bytes identificando 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

    Use a instrução Put para gravar uma matrizVariant em disco, mas você não pode usar Put para gravar uma Variante escalar contendo uma matriz em disco. Você também não pode usar Colocar para gravar objetos em disco.

  • Se a variável que está sendo escrita for uma Variant de VarType 8 (String), coloque gravações 2 bytes identificando o VarType, 2 bytes indicando o comprimento da cadeia de caracteres e, em seguida, grava os dados da cadeia de caracteres. O comprimento do registro especificado pela cláusula Len na instrução Open deve ser pelo menos 4 bytes maior que o comprimento real da cadeia de caracteres.

  • Se a variável que está sendo escrita for uma matriz dinâmica, Coloque grava um descritor cujo comprimento é igual a 2 mais 8 vezes o número de dimensões, ou seja, 2 + 8 * NumberOfDimensions. O comprimento de 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 da matriz e o descritor da matriz. Por exemplo, a seguinte declaração de matriz requer 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 maneira: 18 bytes para o descritor (2 + 8 * 2) e 100 bytes para os dados (5 * 10 * 2).

  • Se a variável que está sendo escrita for uma matriz de tamanho fixo, Coloque grava somente os dados. Nenhum descritor é gravado em disco.

  • Se a variável que está sendo escrita for qualquer outro tipo de variável (não uma cadeia de caracteres de comprimento variável ou uma Variant), Coloque grava apenas 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.

  • Coloque elementos de gravação de tipos definidos pelo usuário como se cada um fosse escrito individualmente, exceto que não há preenchimento entre elementos. No disco, uma matriz dinâmica em um tipo definido pelo usuário escrito 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 quaisquer matrizes e seus descritores.

Para arquivos abertos no modo Binário , todas as regras aleatórias se aplicam, exceto:

  • A cláusula Len na instrução Open não tem efeito. Coloque grava todas as variáveis no disco de forma contígua; ou seja, sem preenchimento entre registros.

  • Para qualquer matriz diferente de uma matriz em um tipo definido pelo usuário, Coloque grava apenas os dados. Nenhum descritor foi escrito.

  • Coloque grava cadeias de caracteres de comprimento variável que não são elementos de 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 na cadeia de caracteres. Por exemplo, as seguintes instruções gravam 10 bytes no arquivo número 1:

      VarString$ = String$(10," ") 
      Put #1,,VarString$ 
    
    

Exemplo

Este exemplo usa a instrução Put para gravar dados em um arquivo. Cinco registros do tipo definido pelo usuário são gravados no arquivo.

Type Record ' Define user-defined type. 
 ID As Integer 
 Name As String * 20 
End Type 
 
Dim MyRecord As Record, RecordNumber ' Declare variables. 
' Open file for random access. 
Open "TESTFILE" For Random As #1 Len = Len(MyRecord) 
For RecordNumber = 1 To 5 ' Loop 5 times. 
 MyRecord.ID = RecordNumber ' Define ID. 
 MyRecord.Name = "My Name" & RecordNumber ' Create a string. 
 Put #1, RecordNumber, MyRecord ' Write record to file. 
Next RecordNumber 
Close #1 ' Close file. 

Confira também

Suporte e comentários

Tem dúvidas ou quer enviar comentários sobre o VBA para Office ou sobre esta documentação? Confira Suporte e comentários sobre o VBA para Office a fim de obter orientação sobre as maneiras pelas quais você pode receber suporte e fornecer comentários.