简体   繁体   English

Excel VBA设置变量以选择特定工作表中的单元格区域

[英]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. 我一直在尝试运行一个脚本,该脚本遍历C列并在单元格中的文本左侧或右侧修剪掉任何空格。 When i run it I get a error regarding the set rr (ss, uu, vv as well when I try to run it). 当我运行它时,我收到关于设置rr的错误(当我尝试运行它时,也会出现SS,UU,VV)。

Here is where the debugger is finding the error "Run-time error '1004': Application-defined or object-defined error. 调试器在这里找到错误“运行时错误'1004':应用程序定义的错误或对象定义的错误。

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. 我曾经使用过JS和PHP,但是VBA却使我感到困惑。

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 . 您需要像对Range一样完全定义Cells的图纸位置。

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))

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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