簡體   English   中英

使用宏操作另一個工作表

[英]Using a Macro to Manipulate another Worksheet

我正在嘗試更好地學習 Excel 中的 VBA 編碼。 最近我一直在試圖弄清楚如何將簡單的 VBA 代碼應用於非常大的工作表。 這個想法是,下面使用的“My Portfolio.xlsx”文件名最終將成為一個變量,因此我可以針對任何可以工作的工作表運行代碼,而無需將宏單獨復制粘貼到每個工作表中。

我正在嘗試做兩件簡單的事情,我得到了一件工作,而另一件給了我一個我無法弄清楚的 1004 錯誤。

1 - 將文本列轉換為數字數據類型

Sub ConvertTextToNumber()
Workbooks("My Portfolio.xlsx").Sheets("Sheet1").Range("A2:A9999").NumberFormat = "General"
End Sub

這個我得好好工作。 即使我將文件名更改為其他文件名也能完美運行。 所以我認為一般格式應該是正確的。

2 - 將第一列(帶標題)從小到大排序

Sub SortSmallestToLargest()
Workbooks("My Portfolio.xlsx").Sheets("Sheet1").Range("A2:BT9999").Sort Key1:=Range("A:A"), Order1:=xlAscending
End Sub

這個我不能上班。 我已經多次調整排序部分,將范圍從“A:A”更改為“A”到“A2”,但它們都不起作用。 我也試過說 Header=Yes 或 Header=No,但它總是出錯。 可悲的是 excel 沒有提供調試,所以它不會給我任何關於究竟是什么失敗的信息。 只是'運行時錯誤'1004':應用程序定義的或對象定義的錯誤'。 我對該錯誤的其他搜索通常是指給它超出范圍范圍或其他內容,但上面代碼中的所有內容都應該沒問題......

我認為問題源於“排序”部分開始之后,但無論我更改或刪除什么,我都無法讓它為我正確排序“A”列。

有人對我做錯了什么有任何想法嗎?

嘗試這個:

Sub SortSmallestToLargest()
    Workbooks("My Portfolio.xlsx").Sheets("Sheet1").Range("A2:BT9999").Sort Key1:=Workbooks("My Portfolio.xlsx").Sheets("Sheet1").Range("A:A"), Order1:=xlAscending
End Sub

或者也許更具可讀性:

Sub SortSmallestToLargest()
    with Workbooks("My Portfolio.xlsx").Sheets("Sheet1")
        .Range("A2:BT9999").Sort Key1:= .Range("A:A"), Order1:=xlAscending
    end with
End Sub

請注意,您需要在 .Range() 賦值中有點。 我只是絆倒了。

如果我理解正確,您的目標是在任何工作簿上運行宏,而無需將代碼復制到該工作簿中。

我發現的兩種最佳方法是:

  1. 使用您的個人宏工作簿,這是 excel 始終在后台打開的工作簿。 所以你可以在那里存儲代碼並且它總是可以運行的。 我通常在我的宏中引用活動工作簿。

  2. 將工作簿另存為加載項。

我更喜歡這種方法,因為它允許我共享宏或輕松刪除。 此外,個人宏工作簿有時會表現異常。

最后,通過從快速訪問工具欄中激活宏,您可以確保當前活動的工作簿是無人看管的工作簿。

暫無
暫無

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

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