簡體   English   中英

當其他工作簿打開時,工作簿中的宏失敗 - 運行時錯誤 1004

[英]Macro in workbook fails when other workbooks are open - Runtime Error 1004

當它是唯一打開的工作簿時宏工作正常,但是當任何其他工作簿打開時它會失敗。 我確信這是一個簡單的修復,但我無法弄清楚。 先感謝您。

Sub Sort_Leaders()
Dim wb As Workbook: Set wb = ThisWorkbook
wb.Worksheets("TABLE").ListObjects("Table1").Sort.SortFields.Clear
wb.Worksheets("TABLE").ListObjects("Table1").Sort.SortFields.Add _
    Key:=Range("Table1[[#All],[Rank]]"), SortOn:=xlSortOnValues, Order:= _
    xlAscending, DataOption:=xlSortNormal
With wb.Worksheets("TABLE").ListObjects("Table1").Sort
    .Header = xlYes
    .MatchCase = False
    .Orientation = xlTopToBottom
    .SortMethod = xlPinYin
    .Apply
End With
Call test
End Sub

VBA:對 Excel 表進行排序 ( ListObject )

快速( “簡單” )修復

利用

Key:=wb.Worksheets("TABLE").Range("Table1[[#All],[Rank]]")

代替

Range("Table1[[#All],[Rank]]")

這是簡稱

ActiveSheet.Range("Table1[[#All],[Rank]]")

一種不同的方法:引用對象

Sub SortLeaders()
    
    Const wsName As String = "TABLE"
    Const tblName As String = "Table1"
    Const lcName As String = "Rank"
    
    Dim wb As Workbook: Set wb = ThisWorkbook ' workbook containing this code
    Dim ws As Worksheet: Set ws = wb.Worksheets(wsName)
    Dim tbl As ListObject: Set tbl = ws.ListObjects(tblName)
    Dim lc As ListColumn: Set lc = tbl.ListColumns(lcName)
    
    With tbl.Sort
        With .SortFields
            If .Count > 0 Then .Clear ' or just '.Clear'
            .Add lc.Range, xlSortOnValues, xlAscending, , xlSortNormal
        End With
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    
    'Call Test ' irrelevant
    
End Sub

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM