2017-02-26 262 views
1

我對VBA非常新,我一直在創建一個簡單的報表多天,因此我決定詢問一些幫助。我會非常感謝您提供的任何提示,或者可能指出我在代碼中可能犯的任何錯誤。使用VBA計算找到的列中的單元格數量

我有下面的一段代碼(從我的循環中提取)。我想要做的就是創建一個基於約20 Excel文件的列表,將有如下統計:

  1. 工作簿中的一列非空白的
  2. 計數內當前選項卡的名稱,其名稱中包含單詞「差」(總第7行,但可以在不同的列)
  3. 計數來自同一列,但其中細胞不空,比0.

不同在過去的統計我甚至沒有時間等,你不會在我的代碼中看到它,但我會很感激,如果你有這方面的任何提示(wh最好使用這種方法)。

Windows("PassRate.xlsm").Activate 
b = ActiveSheet.Cells(Rows.count, 2).End(xlUp).Row + 1 
Cells(b, 3) = xlWorkBook.Worksheets(i).Name 
xlWorkBook.Worksheets(i).Activate 
Set Myrng = Range("B7:M9999").Find(What:="Difference", LookAt:=xlPart, SearchOrder:=xlByColumns, MatchCase:=False) 
If Not Myrng Is Nothing Then 
RowQnt = xlWorkBook.Worksheets(i).Myrng.Offset(9999, 2).Cells.SpecialCells(xlCellTypeConstants).count 
End If 
Windows("PassRate.xlsm").Activate 
Cells(b, 4) = RowQnt 

我的問題是,宏運行和工作,但結果我得到的是選項卡名稱的列表中,但所有計數爲0,我不能克服這個問題。對於第7行,我也嘗試了下面的代碼段,得出相同的結果。

RowQnt = xlWorkBook.Cells(Rows.count, Myrng).End(xlUp) 

是否有可能是我的問題是由於在源文件中包含單詞「差異」的列有時是兩個合併的列?不幸的是,我無法改變,因爲這些是自動從另一個程序生成的文件。

+0

是什麼'xlWorkbook'? – user3598756

回答

0

xlWorkBook.Worksheets(i).Myrng不是有效Range語法,而你可以簡單地使用MyRng,你已經設置爲不空Range參考,並已擁有兩家母公司worksheetworkbook引用

但即使Myrng.Offset(9999, 2).Cells止跌」做T,因爲其只引用而不是一個單元格的單元格區域

你需要一個Range(Range1, Range2)語法,其中既Range1Range2有效Range的r eferences的範圍內的第一個和最後一個單元格,你居然要計算

沒有空白單元格此外,你還可以使用,而不是SpecialCells(xlCellTypeConstants)範圍WorksheetFunction.CountA()功能,因爲後者的錯誤了,如果沒有不斷細胞在範圍內找到它被應用到(所以你需要一個檢查),如果沒有不爲空細胞被發現

所有東西上面,你可以寫下面GetRowQnt()功能,而前者只是簡單地返回零:

Function GetRowQnt(sht As Worksheet) As Long 
    Dim Myrng As Range 

    With sht '<--| reference passed worksheet 
     Set Myrng = .Rows(7).Find(What:="Difference", LookAt:=xlPart, SearchOrder:=xlByColumns, MatchCase:=False) '<--| find "Difference" in its 7th row 
     If Not Myrng Is Nothing Then GetRowQnt = WorksheetFunction.CountA(.Range(.Cells(8, Myrng.Column), .Cells(WorksheetFunction.Max(.Cells(.Rows.count, Myrng.Column).End(xlUp).row, 8), Myrng.Column))) '<--| count not blank cells in column where "Difference" was found from row 8 down to its last not empty cell 
    End With 
End Function 

並且按如下方式使用它在你的主代碼:

With Windows("PassRate.xlsm").ActiveSheet '<--| reference "PassRate.xlsm" workbook active sheet (or change 'ActiveSheet' with 'Worksheetes("yourSheetName")') 
    For i = 1 To xlWorkbook.Worksheets.count '<--| loop through 'xlWorkbook' workbook worksheets 
     b = .Cells(.Rows.count, 3).End(xlUp).row + 1 '<--| get "PassRate.xlsm" workbook active sheet current first empty cell in column "C" 
     .Cells(b, 3) = xlWorkbook.Worksheets(i).Name 
     .Cells(b, 4) = GetRowQnt(xlWorkbook.Worksheets(i)) 
    Next 
End With 

請注意,

b = .Cells(.Rows.count, 3).End(xlUp).row + 1 

我把列「C」爲主導的一個獲得持續的不空行,因爲沒有您的帖子中的代碼在「B」列中寫了一些內容。

但是如果你真正的代碼有一些

.Cells(b, 2) = somedata '<--| write something in column "B" current row 

,那麼你可以回去b = .Cells(.Rows.count, 2).End(xlUp).row + 1

+0

@Maja,你通過它了嗎? – user3598756

相關問題