Excel 运行时错误9 VBA-将同一工作簿中的一行数据从一个工作表复制到另一个工作表

Excel 运行时错误9 VBA-将同一工作簿中的一行数据从一个工作表复制到另一个工作表,excel,vba,Excel,Vba,这是我第一次用Visual Basic编写程序。我正在努力 编写一个程序,获取一张原始数据工作表(表17),对其进行排序 适当地复制数据,并将好的数据行复制到工作簿中的另一个工作表中 我的代码如下: Private Sub CommandButton1_Click() Dim First_Row As Integer Dim Last_Row As Integer Dim i, j, k, m As Integer Dim Bad_Cell As Boolean Dim Orig_Data

这是我第一次用Visual Basic编写程序。我正在努力 编写一个程序,获取一张原始数据工作表(表17),对其进行排序 适当地复制数据,并将好的数据行复制到工作簿中的另一个工作表中

我的代码如下:

Private Sub CommandButton1_Click()

Dim First_Row As Integer
Dim Last_Row As Integer
Dim i, j, k, m As Integer

Dim Bad_Cell As Boolean

Dim Orig_Data As Worksheet
Dim New_Data As Worksheet

Dim Orig_Range As Range
Dim New_Range As Range

Set Orig_Data = Worksheets("17")
Set New_Data = Worksheets("18")


         First_Row = Application.InputBox _
         (Prompt:="Please enter the row where data filtering will start", _
                Title:="Filter", Type:=1)



    If First_Row = 0 Then

        Exit Sub

    Else

          Last_Row = Application.InputBox _
         (Prompt:="Please enter the row where data filtering will end", _
          Title:="Filter", Type:=1)


          If Last_Row = 0 Then

             Exit Sub

          End If

    End If

i = First_Row
m = 2

Do

   j = 2
   k = 1

Do

     Bad_Cell = WorksheetFunction.IsNumber(Cells(i, j))

        If Bad_Cell = False Or Cells(i, j) = 0 Then

            Cells(i, 1) = Cells(i, 1) + 1 / 24

            j = 2

            k = k + 1

         Else

            j = j + 1

        End If

Loop While j <= 18 And k < 15

Set Orig_Range = Workbooks("Calorimeterics").Orig_Data.Range(Cells(i, 1), Cells(i, 18))
Set New_Range = Workbooks("Calorimeterics").New_Data.Range(Cells(m, 1), Cells(m, 18))


If k < 15 Then

   Orig_Range.Copy
   New_Data.Activate
   New_Range.Select

   Selection.PasteSpecial Paste:=xlPasteValues, _
   Operation:=xlNone, _
   SkipBlanks:=False, _
   Transpose:=False

  i = i + 1
  m = m + 1

Else

   i = i + 1

End If

Loop While i <= Last_Row

End Sub
Private子命令按钮1\u单击()
将第一行设置为整数
将最后一行变暗为整数
Dim i,j,k,m为整数
将坏单元设置为布尔值
将原始数据标注为工作表
将新的\u数据调整为工作表
变暗原点范围作为范围
将新的_范围变暗为范围
设置原始数据=工作表(“17”)
设置新数据=工作表(“18”)
第一行=Application.InputBox_
(提示:=“请输入开始数据过滤的行”_
标题:=“过滤器”,类型:=1)
如果第一行=0,则
出口接头
其他的
最后一行=Application.InputBox_
(提示:=“请输入数据过滤将结束的行”_
标题:=“过滤器”,类型:=1)
如果最后一行=0,则
出口接头
如果结束
如果结束
i=第一排
m=2
做
j=2
k=1
做
坏单元格=工作表函数.IsNumber(单元格(i,j))
如果Bad_单元格=False或单元格(i,j)=0,则
单元(i,1)=单元(i,1)+1/24
j=2
k=k+1
其他的
j=j+1
如果结束

循环,同时j尝试为
单元格
对象使用完全限定的名称(指定单元格所属的工作表):

改变

Set Orig_Range = Workbooks("Calorimeterics").Orig_Data.Range(Cells(i, 1), Cells(i, 18))
Set New_Range = Workbooks("Calorimeterics").New_Data.Range(Cells(m, 1), Cells(m, 18))

您的代码还有一件事:

当您使用
工作簿(“热量计”).Orig\u Data
时,Excel会尝试查找名为
Orig\u Data
工作簿(“热量计”)
的属性,但
工作簿(“热量计”)
不支持名为
Orig\u Data
新数据的属性(这会触发错误)

如果您希望
Orig_数据
New_数据
来自“热量计”工作簿,请同时更改

Set Orig_Data = Worksheets("17")
Set New_Data = Worksheets("18")


但是,请确保在代码运行时打开了“CalmeroErics”工作簿。

非常感谢!在第一次查看您的回复后,我忽略了您删除了工作簿(“热量计”)。我想问一下,除了它现在起作用之外,为什么应该忽略它呢!你说得对!当您使用
工作簿(“热量计”)时,Orig_Data
Excel尝试查找名为
Orig_Data
工作簿(“热量计”)
的属性,但是,
工作簿(“热量计”)
不支持名为
Orig_Data
新数据的属性(这会触发错误)。所以,如果您想为工作表指定工作簿,请参阅我的更新答案:)
Set Orig_Data = Worksheets("17")
Set New_Data = Worksheets("18")
Set Orig_Data = Workbooks("Calorimeterics").Worksheets("17")
Set New_Data = Workbooks("Calorimeterics").Worksheets("18")