【问题标题】:Syntax for Range when using variables使用变量时范围的语法
【发布时间】:2016-05-17 05:18:54
【问题描述】:

我试图让我的代码选择一个单元格,然后使用 .End(xlDown).Select 然后 Selection.Copy 复制数据集,但我无法让我的代码使用循环中的变量选择第一个单元格。我知道我的语法在 range 函数上是关闭的,但我不确定在哪里。任何帮助将不胜感激。

Sub Copy_Function_Data()
Dim Target As String
Dim X As Integer
Dim Y As Integer
Dim Target_2 As String
Dim Last_Row3 As Integer
Dim Last_Column3 As Integer
Dim Title_Count As Integer
Dim Country_Count As Integer
Dim Total_Count As Integer
Dim Title_Column As Long
Dim Country_Column As String

Y = ActiveWorkbook.Worksheets("Calculations").Range("B2", Worksheets("Calculations").Range("B2").End(xlDown)).Rows.Count

For X = 1 To Y

Sheets("Calculations").Select
Target = Range("B2").Offset(X, 0)
ActiveWorkbook.Worksheets.Add
ActiveSheet.Name = "TempData"
Worksheets("TempData").Range("A1").Value = Target
ActiveSheet.Range("A1").Select
    Selection.Replace What:="Open Position - ", Replacement:=" ", LookAt:=xlPart, _
    SearchOrder:=xlByColumns, MatchCase:=False, SearchFormat:=False, _
    ReplaceFormat:=False
Target_2 = Worksheets("TempData").Range("A1")
ActiveWorkbook.Worksheets.Add
ActiveSheet.Name = (Target_2)
Sheets("Raw Data").Select
Selection.AutoFilter
ActiveSheet.Range("$B$1:$Z$10000").AutoFilter Field:=5, Criteria1:= _
    (Target)
Range("B1").Select
Range(Selection, Selection.End(xlToRight)).Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Sheets(Target_2).Select
Range("B20").Select
ActiveSheet.Paste
Total_Count = ActiveWorkbook.Worksheets(Target_2).Range("B20", Worksheets(Target_2).Range("B20").End(xlDown)).Rows.Count
Last_Row3 = Cells.Find(What:="*", _
            After:=Range("A1"), _
            LookAt:=xlPart, _
            LookIn:=xlFormulas, _
            SearchOrder:=xlByRows, _
            SearchDirection:=xlPrevious, _
            MatchCase:=False).Row
Last_Column3 = Cells.Find(What:="*", _
            After:=Range("A1"), _
            LookAt:=xlPart, _
            LookIn:=xlFormulas, _
            SearchOrder:=xlByColumns, _
            SearchDirection:=xlPrevious, _
            MatchCase:=False).Column
Title_Column = Cells.Find(What:="Title", _
            After:=ActiveCell, _
            LookIn:=xlFormulas, _
            LookAt:=xlPart, _
            SearchOrder:=xlByRows, _
            SearchDirection:=xlNext, _
            MatchCase:=False, _
            SearchFormat:=False).Column
Country_Column = Cells.Find(What:="Country", _
            After:=ActiveCell, _
            LookIn:=xlFormulas, _
            LookAt:=xlPart, _
            SearchOrder:=xlByRows, _
            SearchDirection:=xlNext, _
            MatchCase:=False, _
            SearchFormat:=False).Column


'************* This is where I need to add the code to copy and paste the range

Sheets("TempData").Delete






Next X
End Sub

【问题讨论】:

  • Range("A1") cells(1,2),除非你明白你在做什么,否则不要混合它们。 Cells 命令将 numbers 作为参数,而不是字符串。所以在你的情况下,第一行应该是Cells(20, Title_Column).Select
  • 这一直有效,直到我尝试执行 .end(xlDown) 然后它打破了我。有什么想法吗?

标签: vba excel


【解决方案1】:

你所追求的语法是:

Range(Title_Column & "20")

所以你的代码可以这样写:

Range(Range(Title_Column & "20"), Range(Title_Column & "20").End(xlDown)).Copy

Range() 方法有多种使用方式:

'// return range covering everywhere between start_range and end_range
Range([start_range], [end_range])

'// This can be used with range or cells:
Range(Range("A1"), Range("C5"))
Range(Cells(1, 1), Cells(5, 3))
Range(Cells(1, "A"), Cells(5, "C"))

'// Pass a string argument as the identifier
'// Single range
Range("A1")
'// Multiple cell range
Range("A1:C5")
'// non-contiguous range
Range("A1,B1,C5")

【讨论】:

  • 更好:用实际的Worksheet 对象限定Range 函数调用,而不是隐式引用ActiveSheet(它可能是也可能不是Worksheet)
  • @Mat'sMug 绝对同意,但是小步骤......如果他们首先没有为 range 方法获得正确的语法,那么限定一个范围对 OP 没有任何好处!
  • @MacroMan 我尝试了你提到的代码,它给了我 Object_Global Failed 的范围错误。这可以通过限定工作表来解决吗?
  • @TonyP 它肯定不会造成任何伤害 - 使用范围对象时最好始终限定工作表,因为您无法针对用户的身份进行编码要做,如果他们改变工作表并且你的代码不期望它那么它将失败。
  • 这一切都在一个循环中,因此工作表的名称将始终根据它在循环中的位置而变化。过去,我只是简单地使用 activesheet.range 等作为我的限定符,并在其前加上 sheet().select。在这种情况下,我将如何限定工作表?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-11-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多