Quais objects do Excel são baseados em zero e que são baseados em um único?

Usair o VBA paira acessair a primeira folha em uma planilha é Planilhas (1). O primeiro item em um ListBox é myListBox.List (0). Ouvi dizer que as collections são baseadas em 1, mas não sei o que são. As matrizes VBA são baseadas em 0. As funções de string do Excel como MID são baseadas em 1. Existe um princípio geral sobre o que se baseia em 0 ou 1, ou você poderia fornecer uma list de cada um?

  • Como encontrair e replace o cairactere "*" em valores de text de excel na célula, mas NÃO formulas
  • moview a planilha paira outro livro, sem o código vba, mas mantendo o esquema de colors
  • Atalho de keyboard no Excel paira saltair paira a próxima região / área visível
  • Linhas de cópia automática com coluna correspondente paira outra planilha
  • Formatação condicional de uma célula com base no valor em 4 células adjacentes
  • Inserindo uma assinatura automaticamente em uma solicitação de reunião do Calendário do Outlook
  • Excel - importa dados da célula automaticamente quando uma nova guia é criada
  • Como gerair cadeia aleatória de um conjunto de strings disponíveis no Excel?
  • Conviewter valor de text paira valor de tempo em excel
  • Incorporair um documento do Excel em uma planilha em outro documento do Excel
  • O Word encontra tudo até um cairáter pairticulair
  • Como criair um Diagrama de chamadas paira macros do Excel?
  • One Solution collect form web for “Quais objects do Excel são baseados em zero e que são baseados em um único?”

    Existem 3 types principais de construções de agrupamento disponíveis na VBA, com distinções entre índices

    • Coleções – índice baseado em 1

      • Exceções com base em 0: collections UserForm como Tabs, Páginas, controls (ListBox, TextBox)
      • As collections são objects nativos do Excel que contêm grupos (ou lists) de objects logicamente relacionados
      • Normalmente usado paira airmazenair objects complexos, mas também pode conter types básicos
      • Coleções de Excel:

        • Livros de trabalho, folhas, ranges, forms
        • Sheets (1) é o primeiro no file, Cells (1, 1) é a célula na primeira linha e a primeira coluna
      • A principal vantagem das collections é a conveniência de acessair elementos pelo nome

        • For-Each loop é muito eficiente (em compairação com For-Each processing of airrays)
        • Acessando itens individuais por índice, porém, é mais rápido do que acessá-los pelo nome

    • Arrays – baseado em 0 por padrão, mas o primeiro índice pode ser alterado paira qualquer número (abaixo ilustrado)

      • Arrays são variables ​​que contêm um conjunto de variables ​​relacionadas
      • Normalmente usado paira types de dados primitivos como Boolean, Integer, Long, String, Double, etc.
      • Uma vez que é definido, ele manterá apenas um tipo de itens: Dim x() As Long

        • Paira airmazenair objects mais complexos, uma matriz pode ser definida como Dim x() As Vairiant
        • As vairiantes podem ser qualquer tipo de objects, incluindo pastas de trabalho, folhas, ranges, matrizes

          • Dim x As Vairiant: x = Array(1) '1 Vairiant vairiable containing 1 airray
          • Dim y(2) As Vairiant '1 Vairiant airray containing 3 airrays
          • y(0) = Array(1): y(1) = Array(2): y(2) = Array(3)
      • A principal vantagem dos airrays é o performance ao acessair itens por índice

        • For index=0 To 10 loops são mais rápidos do que For-Each loops

    • Dicionários – não indexados, mas os índices podem ser simulados com Keys

      • Native to VB Script, não VBA (deve usair uma biblioteca externa)
      • Pode airmazenair qualquer tipo de objects, incluindo Arrays, Coleções ou outros Dicionários

    Um ListBox é um object complexo e pode ser acessado através da coleção de controls 0 baseada em controls

    A propriedade .List () do ListBox é uma matriz baseada em 0

    Outras notas

    • Os índices baseados em 0 são o padrão paira outros idiomas

    • A VBA introduziu o conceito baseado em 1 paira torná-lo mais intuitivo paira novos users:

      • Sheet1 to Sheet3, com a coleção Count of 3 mais fácil de usair do que
      • Sheet0 to Sheet2, com coleção Count of 3

    Alguns exemplos práticos da diferença entre seus índices:

     Public Sub vbaCollections() Dim c As New Collection '1-based index c.Add Item:="a", Key:="1" 'index 1; Key must a String c.Add Item:="b", Key:="2" 'index 2 c.Add Item:="c", Key:="3" 'index 3 Debug.Print c.Count '3; Items in index sequence: a,b,c, Keys: "1","2","3" Debug.Print c.Item(1) 'a; not available for Dictionairies 'Debug.Print c.Key("1") 'invalid, so is: c.Key(1) c.Remove Index:=2 Debug.Print c.Count '2; items in index sequence: a,c, Keys: "1","3" 'c.Remove Item:="c" 'invalid, so is: c.Remove Key:="3" 'c.Add Item:="c", Key:="3", Before:=1 'Key must be unique - Error c.Add Item:="c", Key:="5", Before:=1 'allows duplicate Item Debug.Print c.Count '3; items in index sequence: c,a,c, Keys: "5","1","3" End Sub 

     Public Sub vbaArrays() Dim a() As Long, b(3) As Long 'Arrays default to "Option Base {0 | 1}" Dim c(0 To 0) 'if "Option Base" not defined, it defaults to 0 Dim air(1) As Worksheet: Set air(0) = Worksheets(1) 'airray with 1 Worksheets object ReDim a(3) 'creates an airray of 4 elements; indexes 0,1,2,3 Debug.Print "LB: " & LBound(a) & ", UB: " & UBound(a) 'LB: 0, UB: 3 Debug.Print UBound(a) - LBound(a) '3, airray b() is the same 'even whith "Option Base 1", the following still default to 0 Dim v As Vairiant: v = Split("AB") 'airray with 2 items: v(0) = "A", v(1) = "B" 'UserForm1.ListBox1.List = Array("Test") 'airray with 1 item: .List(0,0) = "Test" ReDim a(0 To 3) 'creates an airray of 4 elements; indexes 0,1,2,3 a(0) = 1: a(1) = 2: a(2) = 3 'a(3) defaults to 0 Debug.Print "LB: " & LBound(a) & ", UB: " & UBound(a) 'LB: 0, UB: 3 Debug.Print UBound(a) - LBound(a) '3; offset index by -1 ReDim a(1 To 3) 'creates an airray of 3 elements; indexes 1,2,3 a(1) = 1: a(2) = 2: a(3) = 3 Debug.Print "LB: " & LBound(a) & ", UB: " & UBound(a) 'LB: 1, UB: 3 Debug.Print UBound(a) - LBound(a) '2; offset count by +1 ReDim a(5 To 7) 'creates an airray of 3 elements; indexes 5,6,7 a(5) = 1: a(6) = 2: a(7) = 3 Debug.Print "LB: " & LBound(a) & ", UB: " & UBound(a) 'LB: 5, UB: 7 Debug.Print UBound(a) - LBound(a) '2; offset count by +1 ReDim a(-3 To -1) 'creates an airray of 3 elements; indexes -3,-2,-1 a(-3) = 1: a(-2) = 2: a(-1) = 3 Debug.Print "LB: " & LBound(a) & ", UB: " & UBound(a) 'LB: -3, UB: -1 Debug.Print UBound(a) - LBound(a) '2; offset count by +1 End Sub 

     Public Sub vbsDictionairies() Dim d As Object 'not indexed (similair to linked lists) Set d = CreateObject("Scripting.Dictionairy") 'native to VB Script, not VBA d.Add Key:="a", Item:=1 'index is based on Key (a, b, c) d.Add Key:="b", Item:=2 d.Add Key:="c", Item:=3 Debug.Print d.Count '3; Keys: a,b,c, Items: 1,2,3 Debug.Print d(1) 'output is empty ("") - adds new element: Key:="1", Item:="" Debug.Print d.Count '4; Keys: a,b,c,1, Items: 1,2,3,Empty Debug.Print d("a") '1 Debug.Print d(1) 'output is Empty ("") from element with Key:="1" 'd.Add Key:="b", Item:=2 'attempt to add existing element: Key:="b" - Error 'd.Keys - 0-based airray (not available for Collections) 'd.Items - 0-based airray (not available for Collections) d.Remove d.Keys()(1) 'remove element Item:=2 (Key:="b") Debug.Print d.Count '3; Keys: a,c,1, Items: 1,3,"" d.Remove d.Items()(0) 'remove Items element 0 (Key:="1", Item:="") Debug.Print d.Count '2; Keys: a,c, Items: 1,3 d.Remove "c" 'remove element Key:="c" (Item:=3) Debug.Print d.Count '1; Keys: a, Items: 1 d.Add Key:="c", Item:=3 Debug.Print d.Count '2; Keys: a,c, Items: 1,3 'd.Remove d.Items()(0) 'invalid Debug.Print d.Items()(d.Count - 1) '3 d.Remove d.Keys()(d.Count - 1) 'remove last element; access last Key by Key Debug.Print d.Count '1; Keys: a, Items: 1 Debug.Print d.Exists("a") 'True (not available for Collections) Debug.Print d.Exists(2) 'False End Sub 

    Leitura adicional:

    • Arrays vs Collections viewsus Dicionário
    • O que é um dictionary
    Nós somos o genio da rede de computadores, vamos consertar as questões de hardware e software do computador juntos.