Я написал код в Excel 2007 VBA, который включает в себя некоторую сортировку и отлично работает в Excel. Теперь я пытаюсь заставить его работать с Access 2007, автоматизируя Excel.Excel VBA Sort - ошибка при автоматическом доступе из Access 2007
Когда я к методу Применить, я получаю эту ошибку:.
«Ссылка рода не является допустимой Убедитесь, что оно находится в пределах данных, которые вы хотите отсортировать, и первые Сортировать по коробке не то же или пустое "
Но два ключа сортировки находятся в пределах данных, которые я хочу сортировать. Кроме того, ключевые параметры метода Add полностью соответствуют требованиям.
Вот мой код. Во-первых, это то, что работает в Excel: (data_sheet является ссылкой лист)
With data_sheet.AutoFilter.Sort
With .SortFields
.Clear
.Add Key:=data_sheet.Cells(2, iColTicker), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
.Add Key:=data_sheet.Cells(2, iColTempfieldDate), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
End With
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.Apply
End With
Это отлично работает в Excel. Но я получаю ошибку на этом коде работает с Access 2007: (data_sheet снова ссылка рабочего листа, а также встроенные в Excel константа теперь явные константы в Access, возвращающие то же значение)
With data_sheet.Sort
With .SortFields
.Clear
.Add Key:=data_sheet.Cells(1, iColTicker), SortOn:=XL_SORT_ON_VALUES, Order:=XL_ASCENDING, DataOption:=XL_SORT_NORMAL
.Add Key:=data_sheet.Cells(1, iColTempfieldDate), SortOn:=XL_SORT_ON_VALUES, Order:=XL_ASCENDING, DataOption:=XL_SORT_NORMAL
End With
.Header = XL_YES
.MatchCase = False
.Orientation = XL_TOP_TO_BOTTOM
.Apply
End With
я пытался полностью квалифицируя внутреннее С утверждением, но получил ту же ошибку:
With data_sheet.Sort
With data_sheet.Sort.SortFields
.Clear
.Add Key:=data_sheet.Cells(1, iColTicker), SortOn:=XL_SORT_ON_VALUES, Order:=XL_ASCENDING, DataOption:=XL_SORT_NORMAL
.Add Key:=data_sheet.Cells(1, iColTempfieldDate), SortOn:=XL_SORT_ON_VALUES, Order:=XL_ASCENDING, DataOption:=XL_SORT_NORMAL
End With
.Header = XL_YES
.MatchCase = False
.Orientation = XL_TOP_TO_BOTTOM
.Apply
End With
Я также попытался удалить с заявления полностью:
data_sheet.Sort.SortFields.Clear
data_sheet.Sort.SortFields.Add Key:=data_sheet.Cells(2, iColTicker), SortOn:=XL_SORT_ON_VALUES, Order:=XL_ASCENDING, DataOption:=XL_SORT_NORMAL
data_sheet.Sort.SortFields.Add Key:=data_sheet.Cells(2, iColTempfieldDate), SortOn:=XL_SORT_ON_VALUES, Order:=XL_ASCENDING, DataOption:=XL_SORT_NORMAL
data_sheet.Sort.Header = XL_YES
data_sheet.Sort.MatchCase = False
data_sheet.Sort.Orientation = XL_TOP_TO_BOTTOM
data_sheet.Sort.Apply
Во всех случаях я получаю сообщение об ошибке в строке Apply. Это не ошибка VBA; это всплывающее диалоговое окно. И затем он игнорирует мой обработчик ошибок в этой процедуре и ошибки в процедуре вызова.
Любые предложения?
Спасибо,
Грег
UPDATE:
Я попытался закрыть книгу, бросить Excel, инстанцировании новый экземпляр Excel, и повторное открытие книги, непосредственно перед сортировкой, как это:
Dim xlApp As Excel.Application, wbDashboard As Workbook
Dim strDatasheetName As String, strDatasheetWorkbookName As String, strDatasheetWorkbookPath As String
strDatasheetName = data_sheet.Name
strDatasheetWorkbookName = data_sheet.Parent.Name
strDatasheetWorkbookPath = data_sheet.Parent.Path
Set xlApp = data_sheet.Parent.Parent
data_sheet.Parent.Close SaveChanges:=True
Set data_sheet = Nothing: DoEvents
xlApp.Quit
Set xlApp = Nothing: DoEvents
Set xlApp = CreateObject("Excel.Application")
Set wbDashboard = xlApp.Workbooks.Open(strDatasheetWorkbookPath & "\" & strDatasheetWorkbookName)
wbDashboard.Activate: DoEvents
DoEvents
Set data_sheet = wbDashboard.Worksheets(strDatasheetName)
data_sheet.Activate: DoEvents
DoEvents
Но после этого я получил ту же ошибку (на той же строке Применить) сортировки.
Грег
Ваше описание звучит почти как ошибка компиляции, а не ошибка времени выполнения. Включили ли вы «Option Explicit» в разделе Declarations вашего модуля кода, а затем запустите Debug-> Compile из главного меню VB Editor? – HansUp
Привет, HansUp, у меня есть Option Explicit в верхней части модуля.Я пробовал ваши предложения Debug-> Compile, и он, казалось, компилировался (ошибок нет, и выбор меню стал серым), но я получил ту же ошибку. –
, не вдаваясь глубоко в ваш код и не тестируя его, я бы предложил использовать другой метод сортировки для объекта «Range», поэтому [TRY THIS] (http://msdn.microsoft.com/en-us/library/ff840646%28v = office.14% 29.aspx), без применения 'Autofilter'. –