Удобные страницы ошибок от Varnish

@ Даниэль Кук: спасибо за ваш ответ, но, к сожалению, сам Excel не играет по тем же правилам, которые применяются к макросам Excel ...

Чтобы проиллюстрировать это, я кратко изложу свою текущую проблему. ..

Я пытаюсь переустановить содержимое таблицы в общее состояние. Этот метод будет применяться к нескольким таблицам на разных листах:

Public Sub restoreTable()
    Dim myTableSheet As Worksheet: Set myTableSheet = Range("Table1").Parent
    Dim myTable As ListObject: Set myTable = myTableSheet.ListObjects("Table1")

    ' --- Clear Table's Filter(s)
    If myTable.ShowAutoFilter Then ' table has auto-filters enabled
        Call myTable.Range.AutoFilter ' disables autofilter
    End If
    myTable.Range.AutoFilter ' re-apply autofilter

    ' --- Sort by Sequence number
    Call myTable.Sort.SortFields.Clear ' if not cleared, sorting will not take effect

    myTable.Sort. _
        SortFields.Add Key:=Range("Table1[[#Headers],[#Data],[Column1]]"), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal

    myTable.Sort.Header = xlYes
    myTable.Sort.Orientation = xlTopToBottom
    myTable.Sort.SortMethod = xlPinYin
    Call myTable.Sort.Apply

    myTable.Sort.SortFields.Clear
End Sub

Для каждого варианта использования ниже Table1 находится в Sheet1

Пример использования 1:

  • Активировать Sheet1, выбрать диапазон A1
  • Выполнить restoreTable
  • наблюдать: диапазон Sheet1 A1 остается выбранным

Пример использования 2:

  • Активировать Sheet1, выбрать диапазон A1
  • Активировать Sheet2
  • Выполнить restoreTable
  • наблюдать: диапазон Sheet1 A1 не выбран, вместо этого выбран диапазон Table1[#Data]

Решение

Это абсолютно ужасно, но это лучшее решение, которое я смог найти

Public Sub resotreTable_preserveSelection()
    Dim curSheet As Worksheet: Set curSheet = ActiveSheet
    Dim tableSheet As Worksheet: Set tableSheet = Range("Table1").Parent

    ' Change Sheet
    tableSheet.Activate

    ' Remember Selection / Active Ranges
    Dim originalSelection As Range:  Set originalSelection = Selection
    Dim originalActiveCell As Range: Set originalActiveCell = ActiveCell

    ' Restore Table
    Call restoreTable

    ' Restore Old Selection
    originalSelection.Select
    originalActiveCell.Activate

    ' Change Back to old sheet
    curSheet.Activate
End Sub

. Примечание: в этом случае диапазоны original * не нужны, но вы понимаете: вы может буферизовать исходный выбор и восстановить его, когда вы закончите

Мне действительно не нравится excel

13
задан Mikko Ohtamaa 11 May 2011 в 08:31
поделиться