2011-01-06 77 views
0

我正嘗試創建一個宏,該單元格生成的單元格內圖形可在http://www.juiceanalytics.com/writing/more-on-excel-in-cell-graphing處看到。我對VBA還是比較新的,並且幾乎沒有使用過工作表函數的經驗;這是我迄今爲止所嘗試的。在Excel中使用相對單元格參考的循環REPT函數VBA

如果有人能幫我解決這個問題,那就太好了,因爲我已經抓住了谷歌並找不到任何東西!

Sub GraphsInCell() 
Dim inCellBar As String, barData As Long 

barData = ActiveSheet.Range("E4:E" & FinalRow).Value 
'repeats "|" string based on Column E values in order to 
'produce a small in-cell bar 
inCellBar = Application.WorksheetFunction.Rept("|", barData) 

For Each i In ActiveSheet.Range("F4:F" & FinalRow) 
    With ActiveSheet.Range("F4:F" & FinalRow) 
     .Value = inCellBar 
    End With 
Next 

End Sub 

這是一個較大代碼體的小片段,但其他一切正常。有問題的代碼都在上面。

我基本上需要讓REPT函數將相對單元格中的值用作'number_times'(例如= REPT(「|」,number_times))。任何人都知道如何做到這一點,或者我的代碼片段有什麼問題?

在此先感謝你們。


作爲背景資料,我有一個小桌子與標題,「發件人」,「電子郵件」,「快報」,「傳真」,「總」和「圖形」。 'Total'是前三列的SUM,我希望圖包含REPT函數。真正簡單的設置。


從Lunatik答案,並迪克Kusleika的評論最終代碼樣品低於:

Sub GraphsInCell() 
Dim c As Range 
Dim TheRange As Range 

Set TheRange = Range("E4:E20") 

For Each c In TheRange.Cells 
    If IsNumeric(c.Value) Then 
     c.Offset(0, 1) = String(c.Value, "|") 
    End If 
Next 
End Sub 

回答

2

不知道你的代碼,因爲它不會沒有額外的變量的工作的情況下被確定,但我認爲這就是你要實現的目標,並且應該指向更新代碼的正確方向。

Sub GraphsInCell() 
    Dim c As Range 
    Dim TheRange As Range 

    Set TheRange = Range("E4:E20") 

    For Each c In TheRange.Cells 
     If IsNumeric(c.Value) Then 
      c.Offset(0, 1) = WorksheetFunction.Rept("|", c.Value) 
     End If 
    Next 
End Sub 

很明顯,您需要使用自己的方法來定義正在使用的範圍。

另外,儘管代碼處理文本或空單元格,但會在負值上出錯。如何最好地處理這可能取決於你的需求。

+0

感謝Lunatik的迴應,您提供了一個運行時錯誤424-樣品對象要求。我還沒有涉及調試,所以我不知道如何解決它。有任何想法嗎? – Kurt 2011-01-06 14:56:34

+0

奇怪的是,在代碼中沒有什麼不尋常的東西,我沒有意識到會拋出一個對象錯誤。如果將代碼粘貼到新工作簿中的空模塊中,是否會發生相同的錯誤?沒有依賴關係,因此它應該在全新的工作簿中工作。 它在哪一行發生錯誤?或者在編譯p代碼時發生錯誤,即不在一行中。 – Lunatik 2011-01-06 15:37:35

+0

對不起,我的電腦死機了。我設法在一個單獨的模塊中測試該代碼段,並且它工作正常。我沒有機會測試錯誤類型,因爲機器已經死機,但沒有突出顯示一條線。我必須再次寫下它,因爲它沒有保存,但同時,你知道它可能是什麼嗎? – Kurt 2011-01-06 17:31:11