【问题标题】:Referencing Multiple Sheets with large sets of Data引用包含大量数据的多个工作表
【发布时间】:2015-02-10 07:07:14
【问题描述】:

我对 VBA 相当陌生,并且在基本语法方面遇到了一些一般性障碍。我正在使用下面的代码来修剪我目前正在处理的 ActiveSheet 的前导空格和颜色代码。

我有另一个名为“国家/地区”的工作表,我想将相同的逻辑应用于我正在使用的当前工作表。我也很难使用最有效的代码来查找任何值为“AcctTotal”、“CurrTotal”和“BravoTotal”的单元格(大约有 14,000 行数据)。我目前正在突出显示整个电子表格并使用“UsedRange”来查找这些单元格。

总结一下: 我想在两个工作表中修剪前导空格并用颜色编码“AcctTotal”、“CurrTotal”和“BravoTotal”的任何值:“Currency”和“Country”

Sub ColorCodeCurrency()

Dim r As Range
For Each r In Selection
    If r.Value = " AcctTotal" Then
        r.Value = LTrim(r.Value)
        Intersect(r.EntireRow, ActiveSheet.UsedRange).Interior.ColorIndex = 15
    End If
Next r

Dim s As Range
For Each s In Selection
    If s.Value = " CurrTotal" Then
        s.Value = LTrim(s.Value)
        Intersect(s.EntireRow, ActiveSheet.UsedRange).Interior.ColorIndex = 40
    End If
Next s

Dim t As Range
For Each t In Selection
    If t.Value = " BravoTotal" Then
        t.Value = LTrim(t.Value)
        Intersect(t.EntireRow, ActiveSheet.UsedRange).Interior.ColorIndex = 35
    End If
Next t

结束子

【问题讨论】:

    标签: vba excel


    【解决方案1】:

    大多数问题是您重复了三遍相同的事情。 'For Each' 语句将遍历每个单元格三次。如果你把它加入到

        for each r in selection
     if r.value ="AcctTotal" then 
    'do something 
    elseif r.value = "CurrTotal" then 
    'do something else 
    elseif r.value = "BravoTotal" then 
    'do the third thing 
    end if
    

    【讨论】:

    • 我同意这是一个问题,我会解决这个问题,但是如何引用“国家/地区”工作表?截至目前,它只是将代码应用于活动工作表
    【解决方案2】:

    除了 Maudise 所说的,当你引用你的数据时,你可以使用如下语法:

    Sheets("Country").Range("A1:E14000")
    

    如果可以对源数据进行更改,您可能会发现将其格式化为表格以便于参考会很有帮助。使用名称管理器为表指定一个有用的名称。然后,你可以这样说:

    For Each r In Sheets("Country").Range("CountryTable")
    

    【讨论】:

    • 我不会总是收到 14000 行,有时会更多。我可以使用什么来最好地捕获所有数据?
    • 正如我所提到的,我认为使用表格是最简单的方法。但是,如果表格不是一个选项,您可以使用 IolandaAB 的建议来查找最后一行和最右边的列。
    【解决方案3】:

    你可以试试这个方法:

    Public Sub ColorCode ()
    
    Dim i As Integer, j As Integer, m As Integer, n As Integer
    
    i = Range("A:A").End(xlDown).Row
    j = Cells.End(xlToRight).Column
    
    For m = 1 To i
        For n = 1 To j
            If Cells(m, n).Value < 50 Then
                Cells(m, n).Interior.ColorIndex = 13
            End If
        Next n
    Next m
    End Sub
    

    一种解决方案是在“Private Sub Workbook_Open()”中将放置在模块中的这段代码调用到“This workbook”中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-05-09
      • 2020-10-15
      • 2018-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多