Board logo

標題: COUNTA 或某些函數在VBA上使用的疑問 [打印本頁]

作者: hugh0620    時間: 2010-12-17 19:21     標題: COUNTA 或某些函數在VBA上使用的疑問

Dear 大大們

      小弟在VBA撰寫有關函數部份的程式碼時,都會有一個問題
      就是在SHEET1讀取SHEET2的資料時,會讀不到,例如附件中的COUNTA這個函數

      能否請大大講解一下,問題是什麼??? 其函數在VBA上撰寫的基本觀念為何?? 好讓小弟可以學習~


        [attach]4131[/attach]
作者: Hsieh    時間: 2010-12-17 19:31

回復 1# hugh0620


          Sheet1.Cells(1, 1) = Application.CountA(Sheet2.[A7:A65536])
作者: GBKEE    時間: 2010-12-17 20:05

回復 1# hugh0620
你的程式碼是在 Sheet1物件
    Sheet1.Cells(1, 1) = Sheet2.Application.CountA([A7:A65536])
[A7:A65536] 是傳回 Sheet1的工作表的位置  ->如要指定本身工作表以外的工作表需指明

如你的程式碼是在 一般模組(Module )
    Sheet1.Cells(1, 1) = Sheet2.Application.CountA([A7:A65536])
[A7:A65536] 是傳回 作用中工作表的位置(ActiveSheet)   ->如要指定作用中工作表(ActiveSheet)以外的工作表需指明
作者: brabus    時間: 2010-12-19 20:53


這樣我也多學了一招哦
謝謝分享囉
作者: hugh0620    時間: 2010-12-19 23:11

回復 3# GBKEE


    謝謝大大的詳細說明~ 讓我能夠了解~ 感恩~
作者: hugh0620    時間: 2010-12-19 23:13

回復 2# Hsieh


    謝謝大大~ 原來我的sheet2是放錯了位置
作者: 7long    時間: 2010-12-25 11:10

EXCEL SHEET 跟ActiveSheet 很不容易理解
需要驗證。到現在還是無法很容易理解@@

真是傷腦筋
作者: hugh0620    時間: 2011-1-6 11:36

回復 3# GBKEE


    Dear 大大

        小弟想要再請問一個問題
        若是我在用COUNTA去統計時,若我的區間是不一定的時候,就會有問題
           一般正常的寫法是
        Application.CountA(Sheet2.[E22: E65536]) [固固區間進行統計)
           若我已W是一個Row的數值(亦即是該儲存格是在第幾列)        
        Application.CountA(Sheet2.[E&W: E65536]) [改變成可浮動區間進行統計]

           請大大教導我

           [attach]4330[/attach]
作者: GBKEE    時間: 2011-1-6 13:40

回復 8# hugh0620
Sheet1.Cells(4, 2) = Application.CountA(Sheet1.[A22:A65536])                       '不接受變數
Sheet1.Cells(4, 2) = Application.CountA(Sheet1.Range("A" & W & ":A65536")) '接受變數
作者: hugh0620    時間: 2011-1-6 14:01

回復 9# GBKEE

   謝謝大大~ 幫我解決 (我自己試了老半天都無法解決):L
作者: GBKEE    時間: 2011-1-6 15:05

回復 10# hugh0620
Sub Ex()
Dim W%
W=10
Sheet1.Cells(4, 2) = Application.CountA(Sheet1.Range("A" & W & ":A65536"))
End Sub
作者: C.F    時間: 2011-1-6 16:21

若單純要利用 Excel 的函數也可以用 WorksheetFunction.CountA 的方式哦~~
作者: asus103    時間: 2011-1-6 17:10

回復 2# Hsieh
請問一下版主大大
為什麼是用Application.CountA(Sheet2.[A7:A65536])
而不是用WorksheetFunction.CountA(Sheet2.[A7:A65536])
我在說明中只有看到下者
他們(Application和WorksheetFunction)之間都可以通用嗎?
還是有其它的限制
作者: lai.k.h    時間: 2011-1-23 17:00

我也學到了,謝謝.
作者: Hsieh    時間: 2011-1-23 22:41

回復 13# asus103


    http://gb.twbts.com/index.php/topic,1174.msg5880.html#msg5880
作者: hugh0620    時間: 2011-1-24 09:26

回復 13# asus103


    這是大大貼的網址~ 怕有人找不到那段解釋的文字~ 特地貼出來~

1. 注意 Match 是工作表函數的成員而不是VBA內建函數,所以需指明上層物件。
WorksheetFunction 的標準寫法是 Application.WorksheetFunction。

2. 注意你的程式位於一般模組還是物件模組。
一般模組:
在一般模組 (就是 Module1、Module2.. 那些) 裡是可以省略 Application 的。
(省略 Application 就不能省略 WorksheetFunction,意思就是不能只寫函數名稱)
物件模組:
但在物件模組裡就不能省略 Application 了,
因為物件模組預設的物件是該物件本身,
例如 Worksheet 模組的預設物件是 Worksheet;
UserForm 模組的預設物件就是 UserForm。由此可知,
若在 UserForm1 模組寫 WorksheetFunction (省略了 Application),
VBA 會視為 UserForm1.WorksheetFunction,結果就會出錯了。




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)