Excel 运行时错误9 VBA-将同一工作簿中的一行数据从一个工作表复制到另一个工作表
这是我第一次用Visual Basic编写程序。我正在努力 编写一个程序,获取一张原始数据工作表(表17),对其进行排序 适当地复制数据,并将好的数据行复制到工作簿中的另一个工作表中 我的代码如下: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
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")