2011-01-06 64 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