更改单元格范围内的值

时间:2018-08-23 12:47:22

标签: excel vba range

我有一张工作表,我想在该表中更改与我选择的列不同的单元格区域中的值。我使用VBA,因为它是将信息发送到特定打印机的代码的一部分。我想让宏也显示所选内容已被打印。

要澄清:
-当我选择F4:F10时,我希望单元格G4:G10更改为文本值“是”。
-当我选择F4:F15时,我希望单元格G4:G15更改为文本值“是”。

我搜索了论坛,发现/做了以下事情:

Sheets("INPUT").Select
ActiveCell.Offset(0, 1).FormulaR1C1 = "Yes"

这很好,但是它只会更改一个单元格的值,而不会更改一系列单元格的值。

是否有一种方法可以将单元格范围更改为“是”,而不是一个单元格?

4 个答案:

答案 0 :(得分:1)

尝试

Selection.Offset(0,1).Value = "Yes"

这是Selection是您选择的范围的地方。偏移量为1列,并一次性分配了值"Yes"

答案 1 :(得分:0)

好的,这是我解决这个问题的方法。我不太确定是什么触发了您的当前代码,因此我认为通过Worksheet.SelectionChange Event捕获它是有意义的。

如果您选择了所有G4:G10,这只会更新所有F4:F10的值 ,同样,如果您选择了所有G4:G15,只会更新F4:F15 Private Sub Worksheet_SelectionChange(ByVal Target As Range) Dim intersectedAll As Boolean Dim cell As Range Dim rng1 As Range Set rng1 = Range("F4:F10") If Target.count = rng1.count Then intersectedAll = True For Each cell In rng1 If Intersect(Target, rng1) Is Nothing Then intersectedAll = False End If Next cell If intersectedAll = True Then Target.offset(0, 1).value = "Yes" intersectedAll = False End If End If Dim rng2 As Range Set rng2 = Range("F4:F15") If Target.count = rng2.count Then intersectedAll = True For Each cell In rng2 If Intersect(Target, rng2) Is Nothing Then intersectedAll = False End If Next cell If intersectedAll = True Then Target.offset(0, 1).value = "Yes" intersectedAll = False End If End If End Sub

 <table style="border: 1px solid red">
    <thead>
        <tr>
            <td>Header stays put, no scrolling</td>
        </tr>
    </thead>
    <tbody style="display: block; border: 1px solid green; height: 30px; overflow-y: scroll">
        <tr>
            <td>cell 1/1</td>
            <td>cell 1/2</td>
        </tr>
        <tr>
            <td>cell 2/1</td>
            <td>cell 2/2</td>
        </tr>
        <tr>
            <td>cell 3/1</td>
            <td>cell 3/2</td>
        </tr>
    </tbody>
 </table>

答案 2 :(得分:0)

通常,请尽量避免使用Selection。这是替代方法,提示用户选择范围,然后更新右侧列中的相应单元格:

Sub tgr()

    Const sUpdatedValue As String = "Yes"

    Dim rSelected As Range
    Dim rArea As Range

    On Error Resume Next
    Set rSelected = Application.InputBox(Prompt:="Select Range of Cells." & Chr(10) & _
                                                 "Note that the cells in the column to the RIGHT of the selection will be updated.", _
                                         Title:="Range Selection", _
                                         Default:=Selection.Address, _
                                         Type:=8)
    On Error GoTo 0
    If rSelected Is Nothing Then Exit Sub   'Pressed cancel

    For Each rArea In rSelected.Areas
        rArea.Offset(, 1).Value = sUpdatedValue
    Next rArea

End Sub

答案 3 :(得分:0)

由于上述回复,我使它运行正常。非常感谢!

我不确定如何关闭该线程或是否有此必要,但是“关闭案例”