在映射列标题时input不匹配错误

我已经试过这个代码来映射列标题,它的工作原理没有任何错误。问题是,虽然它运行没有错误,我没有得到任何输出。任何人请帮助我解决它..预先感谢

Dim Sh1 As Worksheet, Sh2 As Worksheet, Sh3 As Worksheet Dim tmp1, tmp2, tmp3 Dim HeadersOne As Range, HeadersTwo As Range Dim Wb1 As Workbook, Wb2 As Workbook, Wb3 As Workbook Dim hCell As Range With ThisWorkbook tmp1 = Application.GetOpenFilename("Excel Files (*.xls*),*.xls*", 1, "Choose file #1", , False) If tmp1 = False Then Exit Sub Workbooks.Open Filename:=tmp1, ReadOnly:=True Set Wb1 = ActiveWorkbook Set Sh1 = Wb1.Sheets("Sheet1") tmp2 = Application.GetOpenFilename("Excel Files (*.xls*),*.xls*", 1, "Choose file #2", , False) If tmp2 = False Then Exit Sub Workbooks.Open Filename:=tmp2, ReadOnly:=True Set Wb2 = ActiveWorkbook Set Sh2 = Wb2.Sheets("Sheet1") tmp3 = Application.GetOpenFilename("Excel Files (*.xls*),*.xls*", 1, "Choose file #3", , False) If tmp3 = False Then Exit Sub Workbooks.Open Filename:=tmp3, ReadOnly:=True Set Wb3 = ActiveWorkbook Set Sh3 = Wb3.Sheets("Sheet3") End With Set HeadersOne = Sh3.Range("A1:A" & Sh3.Range("A" & Rows.Count).End(xlUp).Row) Application.ScreenUpdating = False For Each hCell In HeadersOne SCol = GetColMatched(Sh1, hCell.Value) TCol = GetColMatched(Sh2, hCell.Offset(0, 1).Value) LRow = GetLastRowMatched(Sh1, hCell.Value) For Iter = 2 To LRow Sh2.Cells(Iter, TCol).Value = Sh1.Cells(Iter, SCol).Value Next Iter Next hCell Wb1.Close Wb2.Close Wb3.Close Application.ScreenUpdating = True End Sub Function GetLastRowMatched(Sh As Worksheet, Header As String) As Long ColIndex = Application.Match(Header, Sh.Rows(1), 0) GetLastRowMatched = Sh.Cells(Rows.Count, ColIndex).End(xlUp).Row End Function Function GetColMatched(Sh As Worksheet, Header As String) As Long ColIndex = Application.Match(Header, Sh.Rows(1), 0) GetColMatched = ColIndex End Function 

显然,这是我昨天做的相同的代码。 我本来希望你能一口气解释一切,这样可以在一个岗位上解决。 无论如何…尝试下面的代码。 请您下次再清楚一点,避免重复修复。

 Sub ModdedMap() Dim Wbk1 As Workbook, Wbk2 As Workbook, Wbk3 As Workbook Dim Sh1 As Worksheet, Sh2 As Worksheet, Sh3 As Worksheet Dim tmp1 As String, tmp2 As String, tmp3 As String Dim HeadersOne As Range Dim hCell As Range 'Set up all the strings involved. tmp1 = Application.GetOpenFilename("Excel Files (*.xls*),*.xls*", 1, "Choose file #1", , False) If tmp1 = "False" Then Exit Sub tmp2 = Application.GetOpenFilename("Excel Files (*.xls*),*.xls*", 1, "Choose file #2", , False) If tmp2 = "False" Then Exit Sub tmp3 = Application.GetOpenFilename("Excel Files (*.xls*),*.xls*", 1, "Choose file #3", , False) If tmp3 = "False" Then Exit Sub 'Open all the workbooks using the previous strings. Set Wbk1 = Workbooks.Open(tmp1) Set Wbk2 = Workbooks.Open(tmp2) Set Wbk3 = Workbooks.Open(tmp3) 'Set the target sheets. MODIFY ACCORDINGLY. Set Sh1 = Wbk1.Sheets("Sheet1") Set Sh2 = Wbk2.Sheets("Sheet1") Set Sh3 = Wbk3.Sheets("Sheet3") Set HeadersOne = Sh3.Range("A1:A" & Sh3.Range("A" & Rows.Count).End(xlUp).Row) Application.ScreenUpdating = False For Each hCell In HeadersOne SCol = GetColMatched(Sh1, hCell.Value) TCol = GetColMatched(Sh2, hCell.Offset(0, 1).Value) LRow = GetLastRowMatched(Sh1, hCell.Value) For Iter = 2 To LRow Sh2.Cells(Iter, TCol).Value = Sh1.Cells(Iter, SCol).Value Next Iter Next hCell Wbk1.Close Wbk2.Close Wbk3.Close Application.ScreenUpdating = True End Sub Function GetLastRowMatched(Sh As Worksheet, Header As String) As Long ColIndex = Application.Match(Header, Sh.Rows(1), 0) GetLastRowMatched = Sh.Cells(Rows.Count, ColIndex).End(xlUp).Row End Function Function GetColMatched(Sh As Worksheet, Header As String) As Long ColIndex = Application.Match(Header, Sh.Rows(1), 0) GetColMatched = ColIndex End Function 

让我们知道这是否解决了一切。 如果失败,请详细描述您的问题。 显然,这些数据是在3张单独的工作簿中。 testing上述内容,更改需要input的部分,并在此处报告结果。

尝试这个:

 tmp1 = Application.GetOpenFilename("Excel Files (*.xls*),*.xls*", 1, "Choose file #1", , False) 

添加逗号,因为您没有指定参数名称。
Aslo这个返回String所以不需要使用set。

另一种方法是:

 tmp1 = Application.GetOpenFilename(filefilter:="Excel Files (*.xls*),*.xls*", FilterIndex:=1, Title:="Choose file #1") 

在这里,你指定参数。
再次不需要Set