Сообщение об ошибке VBA sheet1 $

Привет, сообщество stackoverflow,

Я использую макрос, чтобы извлекать данные из одного листа в другой, но я все время получаю сообщение об ошибке «Механизм базы данных доступа к Microsoft не смог найти объект« sheet1 $ ». Я точно знаю, что ссылочный файл имеет Sheet1, и путь правильный. В чем может быть проблема, так это то, что файлы с несколькими ссылками были созданы в одной книге и впоследствии сохранены в виде отдельных файлов. Поэтому, когда я открываю один из ссылочных файлов, он отображается как, скажем, Sheet2343 (Sheet1), и вот что я думаю, создает проблему: макрос ищет Sheet1 в рабочей книге, но находит только Sheet2343 и поэтому возвращает сообщение об ошибке. Ниже приведен код, который я использую. Мог ли кто-нибудь, пожалуйста, предложить обходной путь?

Благодаря!

Sub Pull_Data() Dim rsData As ADODB.Recordset rsFile$ = ThisWorkbook.Path & "\" & Sheet1.Range("C1") & ".xlsx" strConn$ = "Provider=Microsoft.ACE.OLEDB.12.0;" & _ "Data Source=" & rsFile & ";" & _ "Extended Properties=""Excel 12.0;HDR=Yes"";" rsSQL$ = "SELECT * FROM [Sheet1$]" Set rsData = New ADODB.Recordset rsData.Open rsSQL, strConn, , adOpenUnspecified, adLockUnspecified Sheet1.Range("F4").CopyFromRecordset rsData End Sub 

EDIT: для вашего случая использования что-то вроде этого

 Sub Pull_Data() Dim rsData As ADODB.Recordset, sheetName Dim rsFile As String, strConn, rsSQL rsFile = ThisWorkbook.Path & "\" & Sheet1.Range("C1") & ".xlsx" strConn = "Provider=Microsoft.ACE.OLEDB.12.0;" & _ "Data Source=" & rsFile & ";" & _ "Extended Properties=""Excel 12.0;HDR=Yes"";" sheetName = GetSheetName(rsFile) rsSQL = "SELECT * FROM [" & sheetName & "]" Set rsData = New ADODB.Recordset rsData.Open rsSQL, strConn, , adOpenUnspecified, adLockUnspecified Sheet1.Range("F4").CopyFromRecordset rsData End Sub 'return the worksheet name from a closed single-sheet Excel file Function GetSheetName(fPath As String) Dim cn As ADODB.Connection Dim rsT As ADODB.Recordset Set cn = New ADODB.Connection With cn .Provider = "Microsoft.ACE.OLEDB.12.0" .ConnectionString = "Data Source=" & fPath & _ ";Extended Properties=Excel 12.0;" .CursorLocation = adUseClient .Open End With Set rsT = cn.OpenSchema(adSchemaTables) GetSheetName = rsT.Fields("TABLE_NAME").Value rsT.Close: Set rsT = Nothing cn.Close: Set cn = Nothing End Function 

Вот как использовать ADOX для запроса структуры книги Excel:

 Sub Tester() Dim cn As ADODB.Connection Dim rsT As ADODB.Recordset Dim intTblCnt As Integer, intTblFlds As Integer Dim strTbl As String Dim rsC As ADODB.Recordset Dim intColCnt As Integer, intColFlds As Integer Dim strCol As String Dim t As Integer, c As Integer, f As Integer Set cn = New ADODB.Connection With cn 'edit: updated to work with .xlsx-format files .Provider = "Microsoft.ACE.OLEDB.12.0" .ConnectionString = "Data Source=" & ThisWorkbook.Path & _ "\ADOXSource.xlsx;Extended Properties=Excel 12.0;" .CursorLocation = adUseClient .Open End With Set rsT = cn.OpenSchema(adSchemaTables) intTblCnt = rsT.RecordCount intTblFlds = rsT.Fields.Count Debug.Print "Tables: " & intTblCnt Debug.Print "--------------------" For t = 1 To intTblCnt strTbl = rsT.Fields("TABLE_NAME").Value Debug.Print vbTab & "Table #" & t & ": " & strTbl Debug.Print vbTab & "--------------------" For f = 0 To intTblFlds - 1 Debug.Print vbTab & rsT.Fields(f).Name & _ vbTab & rsT.Fields(f).Value Next Debug.Print "--------------------" Set rsC = cn.OpenSchema(adSchemaColumns, _ Array(Empty, Empty, strTbl, Empty)) intColCnt = rsC.RecordCount intColFlds = rsC.Fields.Count For c = 1 To intColCnt strCol = rsC.Fields("COLUMN_NAME").Value Debug.Print vbTab & vbTab & "Column #" & c & ": " & strCol Debug.Print vbTab & vbTab & "--------------------" For f = 0 To intColFlds - 1 Debug.Print vbTab & vbTab & rsC.Fields(f).Name & _ vbTab & rsC.Fields(f).Value Next Debug.Print vbTab & vbTab & "--------------------" rsC.MoveNext Next rsC.Close Debug.Print "--------------------" rsT.MoveNext Next rsT.Close cn.Close End Sub 

Моя первоначальная проблема была вызвана тем, что не заметили, что после определенной строки было пробел. Просто так, но мне потребовалось некоторое время, чтобы понять это. Спасибо всем за ценные материалы!

  • Старые данные Excel - слияние с журналом транзакций SQL
  • Экспорт большой таблицы MySql
  • Программа Visual Studio с использованием Excel на ПК, не имеющем Excel
  • phpMyAdmin Импорт таблицы Excel с датой и временем
  • С SQL, как я могу обновить список записей в таблице?
  • Динамический запрос таблицы SQL в Excel
  • Как связать вывод sql-запроса teradata с листом excel?
  • BeforeDoubleClick для запуска макроса со значением ячейки в качестве переменной
  • Можно ли форматировать дату в MSQuery, прежде чем вернуть данные в Excel?
  • MS Access быстро запускает запросы, замедляет другие времена
  • Как периодически экспортировать данные Excel на SQL-сервер
  • Interesting Posts
    Давайте будем гением компьютера.