【问题标题】:Pass the content of several ranges into another sub将几个范围的内容传递给另一个子
【发布时间】:2017-06-10 08:29:39
【问题描述】:

我有以下代码,我需要传递几个范围(rngSrc 和 rngTgt)。

 Sub Con_CCC()

 Dim arr, rngSrc As Range, rngTgt As Range, rng As Range, cell As Range
 Dim c As ColorStop
 Dim isGreen As Boolean
 Dim e As Long

 Worksheets("Index Changes").Range("P7:P24").ClearContents

 Set rngSrc = Sheets("Output").Range("J13:J100")
 Set rngTgt = Sheets("Index Changes").Range("Y7")

  For Each cell In rngSrc
   isGreen = False
   On Error Resume Next
     With cell.Interior.Gradient.ColorStops
     End With
     e = Err.Number
   On Error GoTo 0
   If e = 0 Then
     For Each c In cell.Interior.Gradient.ColorStops
         arr = LongToRGB(c.Color)
         If arr(2) / IIf(arr(1) = 0, 1, arr(1)) > 1.25 And arr(2) / IIf(arr(3) = 0, 1, arr(3)) > 1.25 Then
            isGreen = True
            Exit For
         End If
     Next c
  Else
     arr = LongToRGB(cell.Interior.Color)
     If arr(2) / IIf(arr(1) = 0, 1, arr(1)) > 1.25 And arr(2) / IIf(arr(3) = 0, 1, arr(3)) > 1.25 Then isGreen = True
  End If
  If isGreen Then
     If rng Is Nothing Then Set rng = cell.Offset(, -1).Resize(, 2) Else Set rng = Union(rng, cell.Offset(, -1).Resize(, 2))
  End If
Next cell

If Not rng Is Nothing Then rng.Copy: rngTgt.PasteSpecial xlPasteValues

End Sub

本质上,我需要一个仅包含以下代码的子程序,然后在我的其他子程序中设置不同的 rngSrc 和 rngTgt。

   For Each cell In rngSrc
    isGreen = False
    On Error Resume Next
     With cell.Interior.Gradient.ColorStops
     End With
   e = Err.Number
  On Error GoTo 0
  If e = 0 Then
    For Each c In cell.Interior.Gradient.ColorStops
     arr = LongToRGB(c.Color)
     If arr(2) / IIf(arr(1) = 0, 1, arr(1)) > 1.25 And arr(2) / IIf(arr(3) = 0, 1, arr(3)) > 1.25 Then
        isGreen = True
        Exit For
     End If
 Next c
Else
   arr = LongToRGB(cell.Interior.Color)
   If arr(2) / IIf(arr(1) = 0, 1, arr(1)) > 1.25 And arr(2) / IIf(arr(3) = 0, 1, arr(3)) > 1.25 Then isGreen = True
 End If
 If isGreen Then
 If rng Is Nothing Then Set rng = cell.Offset(, -1).Resize(, 2) Else Set rng = Union(rng, cell.Offset(, -1).Resize(, 2))
End If
Next cell

 If Not rng Is Nothing Then rng.Copy: rngTgt.PasteSpecial xlPasteValues 

【问题讨论】:

    标签: string vba range


    【解决方案1】:

    让我们在“DoIt”之后调用你的 Sub

    Option Explicit
    
    Sub doit(rngSrc As Range, rngTgt As Range)
        Dim cell As Range
        Dim arr, rng As Range
        Dim c As ColorStop
        Dim isGreen As Boolean
        Dim e As Long
    
        For Each cell In rngSrc
            isGreen = False
            On Error Resume Next
            With cell.Interior.Gradient.ColorStops
            End With
            e = Err.Number
            On Error GoTo 0
            If e = 0 Then
                For Each c In cell.Interior.Gradient.ColorStops
                    arr = LongToRGB(c.Color)
                    If arr(2) / IIf(arr(1) = 0, 1, arr(1)) > 1.25 And arr(2) / IIf(arr(3) = 0, 1, arr(3)) > 1.25 Then
                        isGreen = True
                        Exit For
                    End If
                Next c
            Else
                arr = LongToRGB(cell.Interior.Color)
                If arr(2) / IIf(arr(1) = 0, 1, arr(1)) > 1.25 And arr(2) / IIf(arr(3) = 0, 1, arr(3)) > 1.25 Then isGreen = True
            End If
            If isGreen Then
                If rng Is Nothing Then Set rng = cell.Offset(, -1).Resize(, 2) Else Set rng = Union(rng, cell.Offset(, -1).Resize(, 2))
            End If
        Next cell
    
        If Not rng Is Nothing Then rng.Copy: rngTgt.PasteSpecial xlPasteValues
    End Sub
    

    那么你的“主要”代码将是:

    Option Explicit
    
    Sub Con_CCC()
        Dim rngSrc As Range, rngTgt As Range
    
        Worksheets("Index Changes").Range("P7:P24").ClearContents
    
        Set rngSrc = Sheets("Output").Range("J13:J100")
        Set rngTgt = Sheets("Index Changes").Range("Y7")
    
        doit rngSrc, rngTgt '<--| call your 'DoIt()' sub passing 'rngSrc' and 'rngTgt' ranges
    End Sub
    

    【讨论】:

    • @Jeweller89,你通过了吗?
    • @Jeweller89,如果你能向试图帮助你的人提供适当的反馈,那就太好了。谢谢
    猜你喜欢
    • 1970-01-01
    • 2020-09-25
    • 2015-04-21
    • 1970-01-01
    • 1970-01-01
    • 2020-01-20
    • 2013-04-01
    • 2015-03-21
    • 1970-01-01
    相关资源
    最近更新 更多