2014-10-11 45 views
0

我知道這可能是超級簡單的,但我從未在VBA中做過,因此無法找到存在的問題。將公式插入到單元格中,其中部分公式取決於循環中的值

我正在循環一組工作表,生成新工作表,並根據條件/值在源表中插入內容(「X-Availability」)。其中一個值是我想成爲插入到一列單元格中的公式的一部分。在第一次迭代中,即來自(「X可用性」)的H2。在下一次迭代中,H3等

如果我手動輸入這個公式到Excel中,我會輸入=INT($N2/('X-Availability'!$H$2+0.1))+1並填充下來。然後在下一張表中,我只是將$H$2更改爲$H$3。由於我在VBA循環中,我顯然需要做一些不同的事情。

這是我迄今爲止沒有工作。 (應用程序定義或對象定義的錯誤)我在這裏錯過了什麼?

請假定FOR循環和WITH結束已經正確。

With ThisWorkbook 
    Set r = .Sheets("X-Availability").Range("B2:B" & lastrow(Worksheets("X-Availability"))) 

     For Each c In r 
      .Sheets(c.Offset(0, 3).Value).Copy after:=.Sheets(.Sheets.Count) 
      With ActiveSheet 
       .Name = c 
       lrow = .Range("A" & .Rows.Count).End(xlUp).Row 
       .Range("K2:K" & lrow).Value = c.Offset(0, -1) 
       .Range("L2:L" & lrow).Value = c 
       .Range("M2:M" & lrow).Value = c.Offset(0, 1) 
       .Range("N2:N" & lrow).Value = ("=ROW($N2)-1") 
-------------> .Range("O2:O" & lrow).Formula = "=INT($N2/(" & c.Offset(0, 6) & "+.1))+1" 
       .Range("P2:P" & lrow).Value = ("=COUNTIF($O:$O,$O2)") 
       .Range("Q2:Q" & lrow).Value = ("=IF($P2<100,$O2-1,$O2)") 
       .Range("R2:R" & lrow).Value = ("=CONCATENATE(K2,"" "",Q2)") 
       .Range("S2:S" & lrow).Value = ("=CONCATENATE(""CA_Full_"",RC[-7],"" "",RC[-2],""_"",'X-User Input'!R4C2)") 

感謝您的幫助!

+0

如果我理解你正確,你需要公式來引用單元格的位置而不是值。嘗試使用'.address'如下:'c.Offset(0,6).Address' – 2014-10-12 04:01:10

回答

0

正如我爸爸總是說的,如果你發現自己的頭靠在牆上撞了很長時間,好的東西可能會在血液流出時滑入。

我剛開始嘗試隨機的事情都有不同的錯誤。我最終只是調暗了問題單元格內的值的字符串,並在該點添加了「+ 0.1」。然後在公式行上調用字符串。因爲我把它放在循環中,它會在每個後續迭代中更改爲正確的單元格值。工作很好。

還有一個額外的)。希望這有助於任何可能在未來碰到它的人!

   With ActiveSheet 
       .Name = c 
       Divisor = c.Offset(0, 6) + 0.1 
       lrow = .Range("A" & .Rows.Count).End(xlUp).Row 
       .Range("K2:K" & lrow).Value = c.Offset(0, -1) 
       .Range("L2:L" & lrow).Value = c 
       .Range("M2:M" & lrow).Value = c.Offset(0, 1) 
       .Range("N2:N" & lrow).Value = ("=ROW($N2)-1") 
       .Range("O2:O" & lrow).Formula = "=INT($N2/" & Divisor & ")+1" 
       .Range("P2:P" & lrow).Value = ("=COUNTIF($O:$O,$O2)") 
       .Range("Q2:Q" & lrow).Value = ("=IF($P2<100,$O2-1,$O2)") 
       .Range("R2:R" & lrow).Value = ("=CONCATENATE(K2,"" "",Q2)") 
       .Range("S2:S" & lrow).Value = ("=CONCATENATE(""CA_Full_"",RC[-7],"" "",RC[-2],""_"",'X-User Input'!R4C2)") 
相關問題