我是excel vba的新手我正在为我的学校实习,我在这里的时间快要结束了,我需要这样做或者我失败了我正在处理一些我什么都不知道的事情。我没有足够的时间去学习,我会解释,我的问题是创建并添加到我现有的代码片段中,这些代码是由各种excel论坛的人员帮助制作的,代码需要做的是:< / p>
主文件从某个文件中导入每周信息,并想象它将这些列中存在的值复制到我的主文件中,并在另一个周文件中存在相同的信息,但有一些不同的更改。您可以通过列“M”注意到这些更改。我将解释导入的信息中的变化是什么?它是496它在试用时很好,它将它的状态更改为800并且它已准备好实施所以我需要当它检测到现在在800中的496的特定值时,将其所在的行更改为另一个文件的另一个值,如下所示:
第12周的值:addf asdafd asds 496
第24周的值:addf asdafd asds 800
SourceWb.Sheets(1)中的值始终为496,而SourceWb.Sheets(2)中的值始终为800,SourceWb.Sheets(1)中的值最终将传递给SourceWb.Sheets (2)然后我需要替换主文件中存在的文件,即800的文件为496,当它们从496传递到800时,它总是出现在另一个文件中,如第12周文件在SourceWb.Sheets中为496 (1)然后想象在第20周文件中它在SourceWb.Sheets(2)中它是800.所以我需要做的是在导入时替换第12周SourceWb.Sheets(1)和496来自SourceWb.Sheets(2)。它可能很简单,但我不能这样做,如果需要更多信息,请说出来。
在 这是代码:
Sub ImportData()
Application.ScreenUpdating = False
Dim Path As String, Lstrw As Long
Dim SourceWb As Workbook
Dim TargetWb As Workbook
Path = "C:\Users\DZPH8SH\Desktop\Status 496 800 semana 12 2015.xls" 'Change this to your company workbook path
Set SourceWb = Workbooks.Open(Path)
Set TargetWb = ThisWorkbook
Dim n As Integer, targetRow As Long
targetRow = 3
With SourceWb.Sheets(1)
Lstrw = .Cells.Find(What:="*", SearchOrder:=xlRows, SearchDirection:=xlPrevious, LookIn:=xlValues).Row
.Range("M1:M" & Lstrw).AutoFilter Field:=1, Criteria1:="496"
.Application.Union(.Range("D2:D" & Lstrw), .Range("F2:F" & Lstrw), .Range("I2:I" & Lstrw), .Range("M2:M" & Lstrw), .Range("N2:N" & Lstrw)).Copy
TargetWb.Sheets(7).Cells(TargetWb.Sheets(7).Rows.Count, "A").End(xlUp)(2).PasteSpecial xlPasteValues
.ShowAllData
End With
With SourceWb.Sheets(2)
Lstrw = .Cells.Find(What:="*", SearchOrder:=xlRows, SearchDirection:=xlPrevious, LookIn:=xlValues).Row
.Application.Union(.Range("D2:D" & Lstrw), .Range("F2:F" & Lstrw), .Range("I2:I" & Lstrw), .Range("M2:M" & Lstrw), .Range("N2:N" & Lstrw)).Copy
TargetWb.Sheets(7).Cells(TargetWb.Sheets(7).Rows.Count, "A").End(xlUp)(2).PasteSpecial xlPasteValues
End With
SourceWb.Close savechanges:=False
Application.ScreenUpdating = True
感谢您提前回复。
答案 0 :(得分:0)
这是这个。我对它进行了评论,以便您可以分辨每个部分的作用。只需将内容(子内部的所有内容)粘贴到当前代码中,编辑有关要搜索的行的部分,然后它就可以正常工作。
注意强>
将此代码放在将数据从SourceWb.Sheets(1)传输到SourceWb.Sheets(2)的代码之后。
Sub Button1_Click()
Dim Chng As Range
'activate worksheet
Worksheets("SourceWb.Sheets(2)").Activate
'Searches for the last row that is populated in SourceWb.Sheets(2). Change all "A" to whatever row you need
For Each Chng In Range("A1:A" & Range("A65536").End(xlUp).Row)
'This changes the value to 800 as long as the cell = 496. If it <> 496 then the cell will not be changed.
If UCase(Chng) = "496" Then Chng = "800"
'Gets the next cell
Next Chng
End Sub