解决VBA循环中的名称冲突

我有一个模块,分析来自多张工作簿的数据。 但是,在循环过程中,我不断收到一个消息,即一个名称已经存在,但是无论我做什么select,都会重复相同的消息。 我已经尝试在消息框中input一个不同的名称,但它继续重复。 任何想法,为什么我得到这个消息?

Sub parse() Dim WrkBookDest As Workbook Dim WrkBookSrs As Workbook Dim WrkSheetDest As Worksheet Dim WrkSheetSrs As Worksheet Set WrkBookDest = ThisWorkbook FolderPath = "C:\attach\" Filepath = FolderPath & "*.xlsx" Filename = Dir(Filepath) With WrkSheetSrs WrkBookDest.Sheets("Sheet1").Range("A1") = .Range("A1").Value WrkBookDest.Sheets("Sheet1").Range("A1").NumberFormat = .Range("A1").NumberFormat WrkBookDest.Sheets("Sheet1").Range("B1") = .Range("A2").Value WrkBookDest.Sheets("Sheet1").Range("B1").NumberFormat = .Range("A2").NumberFormat WrkBookDest.Sheets("Sheet1").Range("C1") = .Range("B4").Value WrkBookDest.Sheets("Sheet1").Range("C1").NumberFormat = .Range("B4").NumberFormat WrkBookDest.Sheets("Sheet1").Range("D1") = .Range("B5").Value WrkBookDest.Sheets("Sheet1").Range("D1").NumberFormat = .Range("B5").NumberFormat WrkBookDest.Sheets("Sheet1").Range("E1") = .Range("B6").Value WrkBookDest.Sheets("Sheet1").Range("E1").NumberFormat = .Range("B6").NumberFormat WrkBookDest.Sheets("Sheet1").Range("F1") = .Range("B7").Value WrkBookDest.Sheets("Sheet1").Range("F1").NumberFormat = .Range("B7").NumberFormat End With For i = 3 To 9 WrkBookDest.Sheets("sheet1").Range("G" & (i - 3) * 56 + 1) = WrkBookSrs.Sheets(i).Range("A2:C57").Value Next End Sub 

您正在复制的其中一个单元格是定义名称(公式►定义的名称►名称pipe理器)。 通过复制和粘贴,Excel认为您正在尝试创build一个新的相同的命名范围。 只粘贴值。 在一个单独的操作中更改Range.NumberFormat属性 。

以下使用直接单元格值传输,然后传递Range.NumberFormat属性 。

 'selecting cells from Title sheet and parsing them to main workbook With WrkSheetSrs WrkBookDest.Sheets("Sheet1").Range("A1") = .Range("A1").Value WrkBookDest.Sheets("Sheet1").Range("A1").NumberFormat = .Range("A1").NumberFormat WrkBookDest.Sheets("Sheet1").Range("B1") = .Range("A2").Value WrkBookDest.Sheets("Sheet1").Range("B1").NumberFormat = .Range("A2").NumberFormat WrkBookDest.Sheets("Sheet1").Range("C1") = .Range("B4").Value WrkBookDest.Sheets("Sheet1").Range("C1").NumberFormat = .Range("B4").NumberFormat WrkBookDest.Sheets("Sheet1").Range("D1") = .Range("B5").Value WrkBookDest.Sheets("Sheet1").Range("D1").NumberFormat = .Range("B5").NumberFormat WrkBookDest.Sheets("Sheet1").Range("E1") = .Range("B6").Value WrkBookDest.Sheets("Sheet1").Range("E1").NumberFormat = .Range("B6").NumberFormat WrkBookDest.Sheets("Sheet1").Range("F1") = .Range("B7").Value WrkBookDest.Sheets("Sheet1").Range("F1").NumberFormat = .Range("B7").NumberFormat End With For i = 3 To 9 WrkBookDest.Sheets("sheet1").Range("G" & (i - 3) * 56 + 1) = WrkBookSrs.Sheets(i).Range("A2:C57").Value Next