我有两张纸,"SA"";SB";。
我正试图从";SA";至";SB";。
我正在尝试使用代码中的条件。(稍后,这将基于用户从组合框中选择的标准。(
我希望从"表"中的整行(或者更好地填充到最后一列(;SA";被复制到片材中";SB";如果列BORJ中的值为="0";123456789";。
在我的代码中,一些行被粘贴在同一行的顶部,而不是下一行。
Sub test()
Dim SA As Worksheet
Dim SB As Worksheet
Set SA = Worksheets("SA")
Set SB = Worksheets("SB")
Dim DBSLRow As Long
Dim ResultLRow As Long
Dim i As Long
SALRow = SA.Cells(Rows.Count, 1).End(xlUp).Row
SBLRow = SB.Cells(Rows.Count, 1).End(xlUp).Row
Debug.Print SALRow
Debug.Print SBLRow
For i = 1 To SALRow
If Cells(i, 2) = "123456789" Or Cells(i, 10) = "123456789" Then
SA.Cells(i, 1).EntireRow.Copy
SB.Cells(SBLRow, 1).PasteSpecial
SBLRow = SBLRow + 1
Else
End If
Next
End Sub
我已经阅读了其他问题,无法了解错误
也许还有更好的方法。
For
循环会自动递增迭代器,如果在循环中执行i = i + 1
,则会跳过行。
我不知道你的代码会在哪里或为什么粘贴在现有数据上,除非你在列A中没有数据,否则我不会这么做。但是,你可以增加SBLRow
,而不是每次重新计算最后一行(它永远不会增加超过1(。
你也应该使用Option Explicit
,从长远来看,它会让你的生活轻松很多。
Option Explicit
Sub test()
Dim SA As Worksheet
Dim SB As Worksheet
Dim SALRow As Long 'Declare all your variables
Dim SBLRow As Long
Dim i As Long
Set SA = Worksheets("SA")
Set SB = Worksheets("SB")
SALRow = SA.Cells(SA.Rows.Count, 1).End(xlUp).Row
SBLRow = SB.Cells(SB.Rows.Count, 1).End(xlUp).Row
Debug.Print SALRow
Debug.Print SBLRow
With SA 'Good practice to always use explicit qualifiers
For i = 1 To SALRow
If .Cells(i, 2) = "123456789" Or .Cells(i, 10) = "123456789" Then
.Cells(i, 1).EntireRow.Copy SB.Cells(SBLRow, 1)
SBLRow = SBLRow + 1
End If
Next
End With
End Sub
首先,您需要避免类型不匹配(不会返回错误(,并使用单元格作为工作表的属性
If SA.Cells(i, 2) = "123456789" Or SA.Cells(i, 10) = "123456789" Then
通过取"123456789"内部"你说要编程它是字符串类型,但你没有在Cells(i,2(中设置属性。你可以检查一下。此单元格的值或。文本如果您没有选择属性程序将检查默认属性。总是像下面的一样使用
If SA.Cells(i, 2).Value = 123456789 ' to check value // number type of data /integer/long/double etc
If SA.Cells(i, 2).Text= "123456789" ' to check text string // text type of data / String
最好的选择是声明变量并将值设置为类似
dim str_Text as String : str_Text = "123456789"
dim lng_Text as Long: lng_Text = 123456789
然后检查条件
If SA.Cells(i, 2).Text= str_Text
If SA.Cells(i, 2).Value= lng_Text
下一个
SBLRow = SB.Cells(Rows.Count, 1).End(xlUp).Row + 1
如果你不把最后一行设置为上一行,当i=1时,你会把项目粘贴到被占用的行中。
并删除i的增量,它将在下一步中递增。尝试低于代码
Sub test()
Dim SA As Worksheet
Dim SB As Worksheet
Dim str_Condition as String : str_Condition = "123456789"
Set SA = Worksheets("SA")
Set SB = Worksheets("SB")
SALRow = SA.Cells(Rows.Count, 1).End(xlUp).Row
SBLRow = SB.Cells(Rows.Count, 1).End(xlUp).Row + 1
Debug.Print SALRow
Debug.Print SBLRow
For i = 1 To SALRow
If SA.Cells(i, 2) = str_Condition Or SA.Cells(i, 10) = str_Condition Then
SBLRow = SB.Cells(Rows.Count, 1).End(xlUp).Row + 1
SA.Cells(i, 1).EntireRow.Copy
SB.Cells(SBLRow, 1).PasteSpecial
End If
Next i
End Sub