【问题标题】:Adding a cell value into multiple sheets with input box使用输入框将单元格值添加到多个工作表中
【发布时间】:2018-01-04 16:45:06
【问题描述】:

我的工作簿包含多个工作表,每个工作表第 8 行包含列标题。每张纸都有与其他纸相同的列,但列的数量会因作业而异。我需要编写一个宏,以便当一个新的列标题添加到一个工作表的末尾时,它将它添加到所有其他工作表(在我的代码中可以看到一些例外情况)。列名由输入框控制,但由于列数可能不同,因此在尝试使用此值时无法修复单元格范围。

这是我目前拥有的代码。我没有运气尝试只添加额外的列名,所以我尝试复制第 8 行中的所有列名,但无法让它工作。我对VBA很陌生,任何帮助将不胜感激!

Sub AddNewColumns()

Dim NewColumn As String
Dim rng As Range

NewColumn = InputBox("Please enter a name for the new column")

    Range("A8").Select
    ActiveCell.End(xlToRight).Select
    ActiveCell.Offset(0, 1).Select

    ActiveCell.Value = NewColumn

    Range("A8").Select
    Range(Selection, Selection.End(xlToRight)).Select

    Set rng = Selection

    Selection.Copy

    Dim ws As Worksheet
    For Each ws In ThisWorkbook.Worksheets

    If ws.Name <> "SheetList" And ws.Name <> "Blank Sheet" And ws.Name <> "Dashboard" And ws.Name <> "Combined" And ws.Name <> "MasterCheck" Then

    ws.Range("A8").Value = rng.Value

    End If

    Next ws

End Sub

谢谢

【问题讨论】:

  • 您已经有使用 End(xlToRight) 查找最后一列的代码,在其他工作表中使用类似代码,或者如果工作表布局相同,则存储列索引。

标签: vba excel


【解决方案1】:

试一试。应该足够简单,可以自己理解:

Option Explicit

Sub AddNewColumns()

    Dim newColumn As String
    newColumn = InputBox("Please enter a name for the new column")

    Dim ws As Worksheet
    For Each ws In ThisWorkbook.Worksheets

        If ws.Name <> "SheetList" And ws.Name <> "Blank Sheet" And ws.Name <> "Dashboard" And ws.Name <> "Combined" And ws.Name <> "MasterCheck" Then

            ws.Range("A8").End(xlToRight).Offset(,1).Value = newColumn

        End If

    Next

End Sub

【讨论】:

    【解决方案2】:

    如果你把 if 语句改成这样,它会起作用:

    If ws.Name <> "SheetList" And ws.Name <> "Blank Sheet" And ws.Name <> 
    "Dashboard" And ws.Name <> "Combined" And ws.Name <> "MasterCheck" Then
    
            ws.Range(rng.Address).Value = rng.Value
    
        End If
    

    还有一些稍加修改的代码供你查看:

        Sub AddNewColumns()
        Dim strHeadingToInsert As String
        Dim wks As Worksheet
    
            strHeadingToInsert = InputBox("Please enter a name for the new column")
    
    
            For Each wks In ThisWorkbook.Worksheets
    
                If wks.Name <> "SheetList" And wks.Name <> "Blank Sheet" And wks.Name <> "Dashboard" And wks.Name <> "Combined" And wks.Name <> "MasterCheck" Then
    
                    wks.Range("A8").End(xlToRight).Offset(0, 1) = strHeadingToInsert
    
                End If
    
            Next wks
    
        End Sub
    

    【讨论】:

    • 非常感谢!两者都很好用,现在我有一些不同的解决方案可以在未来再次使用:)
    【解决方案3】:

    感谢您提供的所有答案,它们都工作得很好,我可以保留一些选项以供将来使用:)

    我选择了第一个选项,尽管所有答案都有效

    Option Explicit
    
    Sub AddNewColumns()
    
    Dim newColumn As String
    newColumn = InputBox("Please enter a name for the new column")
    
    Dim ws As Worksheet
    For Each ws In ThisWorkbook.Worksheets
    
        If ws.Name <> "SheetList" And ws.Name <> "Blank Sheet" And ws.Name <> "Dashboard" And ws.Name <> "Combined" And ws.Name <> "MasterCheck" Then
    
            ws.Range("A8").End(xlToRight).Offset(,1).Value = newColumn
    
        End If
    
    Next
    
    End Sub
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多