将每个单元格值的第一个实例从一个表单移动到另一个表单

时间:2014-11-26 06:19:20

标签: excel-vba vba excel

我正在尝试移动列的每个值的第一个实例" firstname"从一张纸到另一张。我可以从firstname列移动第一个单元格值的第一个实例,但是我无法移动下一个,依此类推,直到结束。以下是我目前正在处理的代码。

for循环有问题吗?

Option Explicit
Private Const RAW_DATA_SHEET = "UserDetails" 

Private Const REPORT_SHEET = "Report"

Private Const USER_NAME_COL = "User Name"
Private Const FIRST_NAME_COL = "First Name"
Private Const LAST_NAME_COL = "Last Name"


Private Sub CommandButton1_Click()



Dim firstname As String
Dim firstnameActive As Range
Dim sheet As Worksheet
Dim sheetre As Worksheet
Dim userNameHeader As Range
Dim firstnameHeader As Range
Dim userToFindRow As Range
Dim user As String
Dim curcell As Range

Application.ScreenUpdating = False


Set sheetre = Sheets("Report")
Set sheet = Sheets("UserDetails")
For Each firstnameHeader In sheet.Range("B2" & sheet.Range("B" &    sheet.Cells.Rows.Count).End(xlUp).row)

Set curcell = sheetre.Range("A3")
' Find the columns of "User Name"
Set userNameHeader = sheet.Rows(1).Find(What:=USER_NAME_COL, LookIn:=xlValues, _
LookAt:=xlWhole, SearchOrder:=xlByColumns, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False) 'note: SearchOrder:=xlByColumns

Set firstnameHeader = sheet.Rows(1).Find(What:=FIRST_NAME_COL, LookIn:=xlValues, _
LookAt:=xlWhole, SearchOrder:=xlByColumns, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False) 'note: SearchOrder:=xlByColumns

' Use to find the row number of the provided user
Set userToFindRow = sheet.Columns(userNameHeader.Column).Find(What:=user, LookIn:=xlValues, _
LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False) 'note: SearchOrder:=xlByRows


For Each userToFindRow In sheet.Range("E2" & sheet.Range("E" &  sheet.Cells.Rows.Count).End(xlUp).row)
' Get the value of "firstname" cell for provided user
Set firstnameActive = sheet.Cells(userToFindRow.Column, firstnameHeader.Column)


If Not IsEmpty(firstnameActive) Then

curcell.Value = firstnameActive
Set curcell = curcell.Offset(1)
End If
Next userToFindRow
Next firstnameHeader


Application.ScreenUpdating = True
End Sub

为什么循环不起作用?

1 个答案:

答案 0 :(得分:0)

Sathak,我认为你需要改变你的For Each Loop。语法对于每个我们倾向于在定义的范围内搜索。您需要添加:B &每个范围的:E 都可以使循环工作。

检查修改后的代码并尝试在代码中使用此For Each循环:

首先对每个循环:

For Each firstnameHeader In sheet.Range("B2:B" & sheet.Range("B" & sheet.Cells.Rows.Count).End(xlUp).Row)

秒对于每个循环:

For Each userToFindRow In sheet.Range("E2:E" & sheet.Range("E" & sheet.Cells.Rows.Count).End(xlUp).Row)
相关问题