【问题标题】:MACRO VBA - "run time error '1004' application - defined or object defined error"MACRO VBA - “运行时错误'1004'应用程序 - 定义或对象定义错误”
【发布时间】:2016-07-25 12:27:56
【问题描述】:

你好,谁能弄清楚我为什么收到这条消息..

运行时错误“1004”应用程序定义或对象定义错误

这是我的代码,问题行似乎是:

range("A1").Select

下面是剩下的代码:

Sub HorizontalLoop()
Dim lCol As Long

Sheets("output").Select

For lCol = 1 To 100
    Dim inputrange As String
        If Not IsEmpty(Cells(lCol).Value) Then
           inputrange = Cells(1, lCol).Value
           ActiveCell.EntireColumn.Select
           Selection.Copy
           Sheets("input").Select
           range("A1").Select
           ActiveSheet.Paste
           Sheets("output").Select

        End If

Next lCol
End Sub

提前谢谢你:)

【问题讨论】:

  • 你想达到什么目的?
  • 我注意到 range("A1").Select range 没有大写字母,这意味着 VB 没有将其解析为 Range 方法。可能您必须预先添加要获取范围的对象,例如ActiveSheet.Range("A1").Select.
  • 在最顶部(Sub HorizontalLoop() 之前),输入Option Explicit 以确保您的变量正常。我认为您在某处有一个名为range 的变量。您可以发布其余代码吗?
  • 供您参考,您的代码中没有处于活动状态的单元格来选择整个列
  • 活动单元不是它当前循环的单元吗?对不起,如果是一个愚蠢的问题@karthick

标签: vba excel if-statement for-loop


【解决方案1】:

您需要使用工作表名称限定Range("A1")(如 Paul Ogilvie 的评论中所述。

但您无需在要粘贴的工作表之间来回切换。在“复制”之后,您只需添加“目标”即可。

我对你的代码做了一个精简版(只有 2 列),所以你可以明白我的意思:

Sub HorizontalLoop2()

Dim lCol As Long
Dim inputrange As String
Dim wsO As Worksheet
Dim wsI As Worksheet

Set wsO = ThisWorkbook.Worksheets("output")
Set wsI = ThisWorkbook.Worksheets("input")

For lCol = 1 To 2

If Not IsEmpty(wsO.Cells(lCol).Value) Then
inputrange = wsO.Cells(lCol).Value

wsO.Columns(lCol).Copy _
Destination:=wsI.Cells(1, lCol)

End If

Next lCol

End Sub

这当然假设您要粘贴到相同的列号!

【讨论】:

    【解决方案2】:

    假设单元格 A13 是工作表输出中的活动单元格,请参见下面的代码

    worksheets("output").Range("A13").Activate
    ActiveCell.EntireColumn.Copy Worksheets("input").Range("A1")
    

    它将复制整个列并将其粘贴到工作表输入中

    【讨论】:

    • 你是对的,没有活动的 cel,我用 Cells(1, lCol).EntireColumn.Select 替换了 acticecell 并且它的工作:) 谢谢
    • @HushHoney,请标记,因为这是您问题的解决方案
    • @HushHoney - 虽然这确实有效,但它仍然让您的宏使用.Select,这不是最佳实践。通读this page,因为使用.Select 会引起很多麻烦,尤其是当您在工作表/工作簿之间跳转时,这是这里的一些问题。
    • 我想知道如果你能帮我做点别的,在我的代码中我选择整个列,我将如何选择第 4 行及以下的所有列?
    • @BruceWayne 谢谢,会调查的,你们都非常有帮助
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多