Cenario:O usuario seleciona uma pasta de trabalho e precisamos importar alguma das planilhas contidas nelaAlem disto,ele tambem precisa selecionar quais sao as planilhas disponiveis.Opcao 1: Abrir a pasta de trabalho, percorrer todas as planilhas e lista-las em algum controle para que ele possa realizar a selecao.Opcao 2: Realizar a leitura de todas as planilhas que estao naquela pasta atraves do ADO e lista-las no mesmo controle.A opcao 2 sera o assunto deste topico, ela e muito mais rapida que a primeira opcao, uma grande vantagem em relacao a primeira.Para isto, construi uma Function que retorna uma string separada por ";", mas cada um pode adaptar ao seu gosto, podendo inclusive retornas arrays ou collections.Vamos ao codigo :Function ListAllSheetsInWb(wbname As String)'officevb.com'Listando as planilhas numa pasta de trabalho com o ADODim cn As ObjectDim rs As ObjectDim strCn As String, TmpStr As String'create objectsSet cn = CreateObject("ADODB.Connection")Set rs = CreateObject("ADODB.Recordset")'String connectionstrCn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & wbname & ";Extended Properties=Excel 8.0"'open connectioncn.Open strCn'open SchemaTables of Excel FileSet rs = cn.OpenSchema(adSchemaTables, Array(Empty, Empty, Empty, Empty))'While exist SheetsDo While Not rs.EOF If InStr(1, rs("Table_name"), "$") > 0 And InStr(1, rs("Table_name"), "FilterDatabase") = 0 Then TmpStr = TmpStr & Replace(rs.Fields("table_name").Value, "$", "") & ";" End If rs.MoveNextLoopTmpStr = Replace(TmpStr, "'", "")'return a stringListAllSheetsInWb = Left(TmpStr, Len(TmpStr) - 1)Set cn = NothingEnd FunctionPara utiliza-lo e bem simples basta realizar a chamada da function:Dim Plans as variant, i as integerPlans=split(ListAllSheetsInWorkbook("\\path\of\your\file"),";")for i=0 to ubound(Plans)-1 yourComboBox.AddItem plans(i)next i`Desta maneira podemos facilmente oferecer as opcoes para a importacao dos dados pelo usuario, selecionando a planilha que devemos utilizar na importacao. Utilizo o ADO para diversas operacoes que de outra maneira levariam muito para serem realizadas.Neste codigo demonstro como alimentar uma lista do Sharepoint com os dados vindos de uma pasta de trabalho.Uma observacao interessante e que o nome da lista nao e utilizado na sintaxe T-SQL qualquer nome colocado na mesma ira funcionar pois a definicao da tabela e feita string de conexao com o parametro LIST.Utilizo esta mesma logica para qualquer tipo de transacao como SELECT,DELETE , UPDATE e como nesse caso INSERTPublic Const strSharePointInfo = "Provider=Microsoft.ACE.OLEDB.12.0;WSS;IMEX=0;RetrieveIds=Yes;DATABASE=http://sharepoint.server.com/Path/;LIST={12312456-124A-78BC-B8E7-1E526B74A015};"Sub InsertRecordSetOnSharePoint(Rg as Range,ShtName as String)'Bruno Leite'http://officevb.comDim cn As ADODB.Connection 'Conexao para a Lista do SharePointDim i As Integer,SQL as string'sql to insertSQL = "INSERT INTO [ESSENOMENAOEUSADO] (SELECT * FROM [Excel 12.0;DATABASE=" & ShtName & "].["& rg.name &"$])"'open connectioncn.Open strSharePointInfo'run SQLcn.Execute SQLSet cn = NothingDebug.Print "Insert OK"End Sub Me deparei com um bug bem chato no Excel e que ate o momento nao encontrei uma solucao, se encontrar volto aqui para compartilhar.O que acontece e o seguinte, costumo utilizar o ADO para operacoes de importacao de dados de uma planilha Excel com esse codigo:SELECT * INTO TBL_PRECO FROM [Excel 12.0;DATABASE=G:\Projetos 2013\xpto\Novos Precos\6.Precos Finais.xlsx].[PrecosPonderados$K:AB]Nesse caso estou inserindo todos os dados das coluna K ate a AB, selecionando todos os dados. Este codigo funciona perfeitamente.Porem mesmo utilizando o ISAM do Excel 12.0, que suporta mais de 1 milhao de linhas, o limite de dados importados e de 65535 linhas.Voce se lembra desse numero? Ele era o limite de linhas do Excel ate a versao 2003, porem mesmo utilizando