返回列表 上一主題 發帖

[發問] 請問EXCEL怎麼取得工作表的數量與資料行數呢(跨工作表)!?謝謝

本帖最後由 stillfish00 於 2012-10-28 01:21 編輯

回復 1# konkon3141
先到EXCEL選項勾選開發人員 , 進入Visual Basic
左方選第一個工作表 , 複製以下代碼
  1. Private Sub Worksheet_Activate()
  2.     'Q1:列出工作表清單
  3.     Dim i
  4.     Range(Range("A1"), Range("A1").End(xlDown)).ClearContents   '先清除
  5.     For i = 3 To Sheets.Count   '不含前兩個工作表(目錄,型錄)
  6.         Range("A1").Offset(i - 3, 0) = Sheets(i).Name
  7.     Next
  8.    
  9.     'Q2:計算總數
  10.     Range("B1") = "=COUNTA(" & Sheets(3).Name & ":" & Sheets(Sheets.Count).Name & "!B:B)" & "-COUNTA(" & Sheets(3).Name & ":" & Sheets(Sheets.Count).Name & "!B1:B8)"
  11. End Sub
複製代碼

TOP

回復 4# konkon3141
alt +F1進入Visual Basic , 左邊找到目錄這個工作表點兩下


在右邊區域貼上這段code:
  1. Private Sub Worksheet_Activate()
  2.     'Q1:
  3.     Range("C9") = Sheets.Count - 2
  4.    
  5.     'Q2:-
  6.     Range("C10") = "=COUNTA(" & Sheets(2).Name & ":" & Sheets(Sheets.Count - 1).Name & "!B:B)" & "-COUNTA(" & Sheets(2).Name & ":" & Sheets(Sheets.Count - 1).Name & "!B1:B8)"
  7.     Range("C12") = "=COUNTA(" & Sheets(2).Name & ":" & Sheets(Sheets.Count - 1).Name & "!J:J)" & "-COUNTA(" & Sheets(2).Name & ":" & Sheets(Sheets.Count - 1).Name & "!J1:J8)"
  8.     Range("C14") = "=COUNTA(" & Sheets(2).Name & ":" & Sheets(Sheets.Count - 1).Name & "!P:P)" & "-COUNTA(" & Sheets(2).Name & ":" & Sheets(Sheets.Count - 1).Name & "!P1:P8)"

  9. End Sub
複製代碼
多試試 看能不能符合你的需求嚕
Book1.zip (1.68 KB)

TOP

本帖最後由 stillfish00 於 2012-10-28 14:59 編輯

回復 6# konkon3141
恩..我不曉得是不是版本不同造成的, 我只有2010執行都正常 , 你試試
1.使用前面的附件時能正常執行嗎?
2.檢查目錄工作表是否有保護?
3.程式Range前指定Sheets("目錄") , 看有沒有差異?
  1. Private Sub Worksheet_Activate()
  2.     'Q1:
  3.     Sheets("目錄").Range("C9") = Sheets.Count - 2
  4.    
  5.     'Q2:
  6.     Sheets("目錄").Range("C10") = "=COUNTA(" & Sheets(2).Name & ":" & Sheets(Sheets.Count - 1).Name & "!B:B)" & "-COUNTA(" & Sheets(2).Name & ":" & Sheets(Sheets.Count - 1).Name & "!B1:B8)"
  7.     Sheets("目錄").Range("C11") = "=COUNTA(" & Sheets(2).Name & ":" & Sheets(Sheets.Count - 1).Name & "!J:J)" & "-COUNTA(" & Sheets(2).Name & ":" & Sheets(Sheets.Count - 1).Name & "!J1:J8)"
  8.     Sheets("目錄").Range("C12") = "=COUNTA(" & Sheets(2).Name & ":" & Sheets(Sheets.Count - 1).Name & "!P:P)" & "-COUNTA(" & Sheets(2).Name & ":" & Sheets(Sheets.Count - 1).Name & "!P1:P8)"

  9. End Sub
複製代碼

TOP

本帖最後由 stillfish00 於 2012-10-28 19:16 編輯

回復 9# konkon3141
內容就是在C10 填入公式
=COUNTA(開始工作表:結束工作表!B:B)-COUNTA(開始工作表:結束工作表!B1:B8)
即計算  所有開始工作表~結束工作表 B欄 非空白單元格總數
    減去  所有開始工作表~結束工作表 B1到B8 非空白單元格總數

因為工作表可能增加 , 不是固定同一個 , 所以用VBA ,
Sheets(Sheets.Count - 1).Name 去找到最後一個工作表名字

C11, C12依此類推 , 我也不明白哪裡有問題

TOP

回復 11# konkon3141
http://d.pr/f/Sxsz

最後發現問題在工作表名稱有含括號 , 所以在使用公式時工作表名稱要另外加單引號才不會出錯
啊啊~這算我沒養成良好習慣啦><

TOP

回復 13# konkon3141
http://d.pr/f/Sxsz 這個檔案不能用嗎? 這是改過的

TOP

回復 16# konkon3141
隱藏工作表的超連結會失效是正常的..
另一種方法是工作表不隱藏 , 到Excel選項裡取消 工作表索引標籤
不過看用途啦  有時候會不太方便..

TOP

        靜思自在 : 是非當教育,讚美作警惕。
返回列表 上一主題