简体   繁体   中英

Excel VBA set variable to select a range of cells in a specific worksheet

I have been trying to run a script that goes through column C and trims out any spaces on the left or right of the text in the cell. When i run it I get a error regarding the set rr (ss, uu, vv as well when I try to run it).

Here is where the debugger is finding the error "Run-time error '1004': Application-defined or object-defined error.

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

I also included the full code below just in case that might provide better insight. I have worked with JS and PHP but VBA is confusing the hell out of me.

Thank you in advance for any help you can provide.

M

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

I was able to reproduce your error when a different sheet was active. You need to fully define the sheet location of Cells like you did for Range .

Instead of:

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

Try:

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

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM