2015-10-17 62 views
0

让我开始说我对于使用excel和VBA非常新,但对C++有一定的经验。用另一个工作簿中的信息更新Excel表格

的情况:

我试图更新一个表与另一个工作簿中的数据。源文件按照每个新工作单被赋予一列的方式组织。随着更多门票进入,更多列被创建,并且关于该门票的各种信息被垂直列出。

基本上我试图做的是保持与相同的票号作为第一个更新的第二个文件,但有不同的格式:

Basic example of the two sheets

这里是我到目前为止,虽然对于一个什么样的基本思想很粗糙,我想代码做的事:

Sub Update_Click() //Button to update destination file 

Workbooks.open("C:\Documents\mysourcefile.xlsm") 
dim i,j as integer 
i=4 //starting column of source file where first ticket is stored 
j=2 //starting column of destination file where first ticket is stored 

while worksheets("mysourcesheet").Value(i,2)<>0 //all work has customer, but 
               //may not have a ticket 
               //number 

if Worksheets("mysourcesheet").value(i,1) = 0 Then 

i=i+1   //some columns in the source are blank due to canceled orders 
       //this is to go to the next column 

else 
if Worksheets("mysourcesheet").value(i,1)=Worksheets("mydestsheet").value(j,1) 
then 
i=i+1 
j-j+2  //go onto the next if already updated 
      //J+2 to account for formatting of the cells 

Else 
Worksheets("mysourcesheet").value(i,1)=Worksheets("mydestsheet").value(j,1) 
Worksheets("mysourcesheet").value(i,2)=Worksheets("mydestsheet").value(j,2) 
Worksheets("mysourcesheet").value(i,3)=Worksheets("mydestsheet").value(j,4) 
Worksheets("mysourcesheet").value(i,4)=Worksheets("mydestsheet").value(j,5) 

//copy the data 

i=i+1 
j=j+2 

end if 
end if 
end sub 

我意识到这可能与错误/基本错误百出,但如果任何人都可以伸出援助之手,这将是伟大的!

回答

1

这将复制新的门票,如果客户不为空,从源1列到两列

Private Sub Update_Click() 
    Dim wb As Workbook, ur1 As Range, ur2 As Range, i As Long 
    Dim fr1 As Long, fr2 As Long, lr1 As Long, lr2 As Long, lc1 As Long, lc2 As Long 

    Application.ScreenUpdating = False 

    Set wb = Workbooks.Open("E:\mysourcefile.xlsm") 
    Set ur1 = Me.UsedRange 
    Set ur2 = wb.Worksheets("mysourcesheet").UsedRange 

    fr1 = ur1.Row: lr1 = fr1 + (ur1.Rows.Count - 1) - 1 
    fr2 = ur2.Row: lr2 = fr2 + (ur2.Rows.Count - 1) - 1 
    lc1 = ur1.Column + ur1.Columns.Count - 2: lc2 = ur2.Column + ur2.Columns.Count - 1 

    If Len(ur2.Cells(fr1 + 1, lc2)) > 0 Then      'customer not empty 
     If ur1.Cells(fr1 + 1, lc1) <> ur2.Cells(fr1 + 1, lc2) Then 'if last cutomer differ 
      With ur1 
       .Cells(fr1 + 0, lc1 + 2) = ur2.Cells(fr2 + 0, lc2) 
       .Cells(fr1 + 1, lc1 + 2) = ur2.Cells(fr2 + 1, lc2) 
       .Range(.Cells(fr1 + 0, lc1 + 2), .Cells(fr1 + 0, lc1 + 3)).MergeCells = True 
       .Range(.Cells(fr1 + 1, lc1 + 2), .Cells(fr1 + 1, lc1 + 3)).MergeCells = True 
       .Cells(fr1 + 2, lc1 + 2) = "Target" 
       .Cells(fr1 + 2, lc1 + 3) = "Actual" 
       .Cells(fr1 + 2, lc1 + 2).ColumnWidth = .Cells(fr1 + 2, lc1).ColumnWidth 
       .Cells(fr1 + 2, lc1 + 3).ColumnWidth = .Cells(fr1 + 2, lc1).ColumnWidth 
    .Range(.Cells(fr1, lc1 + 2), .Cells(fr1 + 2, lc1 + 3)).HorizontalAlignment = xlCenter 
    .Range(.Cells(fr1, lc1 + 2), .Cells(lr1 + 1, lc1 + 3)).Borders.Weight = xlThin 
       For i = fr1 + 3 To lr1 + 1 
        .Cells(i, lc1 + 2) = Now 'Target date 
        .Cells(i, lc1 + 3) = ur2.Cells(i - 1, lc2) 
       Next 
      End With 
     End If 
    End If 
    wb.Close False 
    Application.ScreenUpdating = True 
End Sub 

enter image description here

+0

太谢谢你了!我肯定会试试这个! –

相关问题