【问题标题】:To copy data from 232 excel worksheets present in a single excel workbook into a destination worksheet.The row name and worksheet name should be same将单个 Excel 工作簿中存在的 232 个 Excel 工作表中的数据复制到目标工作表中。行名称和工作表名称应相同
【发布时间】:2014-01-15 18:44:21
【问题描述】:

将单个 Excel 工作簿中存在的 232 个 Excel 工作表中的数据复制到同一工作簿中存在的目标 Excel 工作表中,条件是目标工作表中的行名称应与工作表名称相同。因为在 excel 中命名工作表时文件我们有大小限制,所以对于某些工作表,名称写得很短,但在目标工作表中,名称是完整形式的。所以对于某些工作表,数据没有累积。如何解决这个问题?请帮助。我是新人转VBA

Private Sub CommandButton1_Click()
Dim sheetName As String
Dim i As Integer
i = 2
Do While Cells(i, 1).Value <> ""

        sheetName = Cells(i, 1)
        Cells(i, 4) = Sheets(sheetName).Cells(190, 7).Value
        Cells(i, 5) = Sheets(sheetName).Cells(191, 7).Value
        Cells(i, 6) = Sheets(sheetName).Cells(192, 7).Value
        Cells(i, 7) = Sheets(sheetName).Cells(193, 7).Value
        Cells(i, 8) = Sheets(sheetName).Cells(194, 7).Value
        Cells(i, 9) = Sheets(sheetName).Cells(195, 7).Value
        Cells(i, 10) = Sheets(sheetName).Cells(196, 7).Value
        i = i + 1
Loop
End Sub

【问题讨论】:

    标签: vba excel


    【解决方案1】:

    尝试使用以下代码(因为手动重命名工作表时工作表名称的最大长度为 31 个字符,您可以限制 sheetName):

    Private Sub CommandButton1_Click()
    Dim sheetName As String
    Dim i As Integer
    i = 2
    Do While Cells(i, 1).Value <> ""
    
            sheetName = IIf(Len(Cells(i, 1))>31,Left(Cells(i, 1),31),Cells(i, 1))
            Cells(i, 4) = Sheets(sheetName).Cells(190, 7).Value
            Cells(i, 5) = Sheets(sheetName).Cells(191, 7).Value
            Cells(i, 6) = Sheets(sheetName).Cells(192, 7).Value
            Cells(i, 7) = Sheets(sheetName).Cells(193, 7).Value
            Cells(i, 8) = Sheets(sheetName).Cells(194, 7).Value
            Cells(i, 9) = Sheets(sheetName).Cells(195, 7).Value
            Cells(i, 10) = Sheets(sheetName).Cells(196, 7).Value
            i = i + 1
    Loop
    End Sub
    

    【讨论】:

    • 我在 Cells(i, 4) = Sheets(sheetName).Cells(190, 7).Value 中的下标超出范围
    • 您是如何从全名生成短名称的?
    • 我只写了名称,直到满足 31 个字符的标准。例如,我的标签名称是阿富汗、不丹、百慕大、阿尔巴尼亚、阿尔及利亚。对于阿富汗、阿尔巴尼亚、阿尔及利亚,数据已经积累,但对于不丹显示下标超出范围错误
    • @simoco:这个问题是HERE 的后续问题sheetName = IIf(Len(Cells(i, 1))&gt;31,Left(Cells(i, 1),31),Cells(i, 1)) 的问题是这会给你带来误报。例如,如果多张纸的前 31 个字符相同怎么办?
    • @user3045652:你真的有“不丹”表吗?如果是,那么您确定该单元格只有“不丹”吗?
    猜你喜欢
    • 2020-03-09
    • 1970-01-01
    • 2017-06-20
    • 1970-01-01
    • 2021-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多