Excel VBA设置变量以选择特定工作表中的一系列单元格

时间:2014-11-19 20:19:42

标签: excel vba excel-vba

我一直在尝试运行一个遍历C列的脚本,并删除单元格中文本左侧或右侧的任何空格。当我运行它时,我得到一个关于set rr的错误(ss,uu,vv以及当我尝试运行它时)。

这是调试器发现错误“运行时错误'1004'的地方:应用程序定义的错误或对象定义的错误。

Set rr = Worksheets("EOD").Range(Cells(2, 3), Cells(100, 3))

我还在下面提供了完整的代码,以防万一可能提供更好的见解。我曾经使用过JS和PHP,但VBA让我感到困惑。

提前感谢您提供的任何帮助。

中号

Sub Workbook_Open()
Dim r As Range
Dim s As Range
Dim t As Range
Dim u As Range
Dim v As Range
Dim a As Integer
Dim b As Integer
Dim c As Integer
Dim d As Integer
Dim e As Integer
Dim rr As Range
Dim ss As Range
Dim tt As Range
Dim uu As Range
Dim vv As Range
Set rr = Worksheets("EOD").Range(Cells(2, 3), Cells(100, 3))
Set ss = Worksheets("9AM Report").Range(Cells(2, 3), Cells(100, 3))
Set uu = Worksheets("1PM CST").Range(Cells(2, 3), Cells(100, 3))
Set vv = Worksheets("3PM ST").Range(Cells(2, 3), Cells(100, 3))
Set tt = Worksheets("11AM Report").Range(Cells(2, 3), Cells(100, 3))

For Each r In rr
    r = Trim(r)
    a = a + 1
    If a = 199 Then Call RefreshAllPivotTables
    If a > 200 Then End
Next
For Each s In ss
    s = Trim(s)
    b = b + 1
    If b = 199 Then Call RefreshAllPivotTables
    If b > 200 Then End
Next
For Each t In tt
    t = Trim(t)
    c = c + 1
    If c = 199 Then Call RefreshAllPivotTables
    If c > 200 Then End
Next
For Each u In uu
    u = Trim(u)
    d = d + 1
    If d = 199 Then Call RefreshAllPivotTables
    If d > 200 Then End
Next
For Each v In vv
    v = Trim(v)
    e = e + 1
    If e = 199 Then Call RefreshAllPivotTables
    If e > 200 Then End
Next
End Sub

Sub RefreshAllPivotTables()

Dim PT As PivotTable
Dim WS As Worksheet

For Each WS In ThisWorkbook.Worksheets

    For Each PT In WS.PivotTables
      PT.RefreshTable
    Next PT

Next WS

End Sub

1 个答案:

答案 0 :(得分:6)

当其他工作表处于活动状态时,我能够重现您的错误。您需要像Cells一样完全定义Range的工作表位置。

而不是:

Set rr = Worksheets("EOD").Range(Cells(2, 3), Cells(100, 3))

尝试:

Dim wks1 As Worksheet
Set wks1 = Worksheets("EOD")

Set rr = wks1.Range(wks1.Cells(2, 3), wks1.Cells(100, 3))