2016-10-12 112 views
0

我試圖根據for循環的迭代插入和更改counta公式。我面臨的問題是即使代碼運行沒有錯誤,也沒有任何反應。 totalrow變量始終爲0.我不確定我在哪裏出錯。所有的變量都在循環之外初始化。 CurrentColname是字符串,countUsedCols很長,totalRows很長。根據for循環迭代更改單元格公式

For i = 2 To countUsedCols 
    ActiveSheet.Cells(3, i).Select 
    currentColName = ActiveSheet.Cells(3, i).Value 
    If currentColName = "Valid From" Then 

     totalrow = ActiveWorkbook.Sheets("Customer_Facing_View").Range("AR1").Formula = "=COUNTA($" & i & ":$" & i & ")" 

     totalrow = ActiveWorkbook.Sheets("Customer_Facing_View").Range("AR1").Value 

回答

2

一些事情。

在vba中,當你放入X=Y=Z根據是否y = z,X變成布爾值。

所以,當你寫:

totalrow = ActiveWorkbook.Sheets("Customer_Facing_View").Range("AR1").Formula = "=COUNTA($" & i & ":$" & i & ")" 

Totalrow是返回false,因爲單元格中的公式是不一樣的,你所提供的字符串。

秒你的COUNT A將解析爲一行而不是一列。 i是一個數字,而不是一個字母。

因此,從第一個表達式中刪除totalrow =並更改範圍引用。

ActiveWorkbook.Sheets("Customer_Facing_View").Range("AR1").Formula = "=COUNTA(" & Columns(i).Address &")" 
+0

我很抱歉沒有在開始時說清楚,但是這個循環和sub的重點是計算表中的行數。但是,使用xldown不是一種選擇,因爲「有效來源」位於表格中間。所以邏輯是循環計數到Valid from列,並檢查該列有多少行 – Adit2789

+0

還有一件事:除了「Valid from」之外,沒有其他列保證填充沒有空白 – Adit2789

0

我想你想寫一個公式單元AR1來計算行數(與第一totalrow語句);並返回該值(第二個totalrow語句)。但我相信斯科特表示,第一個總結性陳述是錯誤的。你需要改變它。

此外,對於Counta公式,您需要包含原始工作表名稱,否則只需計算Customer_Facing_View工作表中的列。