【问题标题】:Excel VBA finding / recording user selectionExcel VBA查找/记录用户选择
【发布时间】:2016-02-26 15:20:16
【问题描述】:

我遇到了一个问题不大的错误。下面代码的目标是允许用户选择他们想要修改的工作表(HR1 - HR20),然后选择他们想要复制到所选工作表的原始工作表上的单元格(单元格范围)。

问题是用户必须选择他们想要更改的范围,然后运行宏(通过按钮),选择工作表,然后重新选择范围。如果他们在运行宏之前只选择了一个单元格,则即使在他们突出显示范围之后,宏也会复制该单个单元格的值,当宏提示时,他们想要更改。有没有办法告诉宏只使用选定的范围?

Dim WSN As Worksheet
Set WSN = ActiveSheet
Dim sheetname As String
sheetname = ActiveSheet.Name

Unload Me

On Error GoTo Cancel
    Dim rng As Range
    Dim myString As String
    Set rng = Application.InputBox("select cell range with changes", "Cells to be copied", Default:="Select Cell Range", Type:=8)
Application.ScreenUpdating = False
    myString = Selection.Address(ReferenceStyle:=xlA1, RowAbsolute:=False, ColumnAbsolute:=False)
'MsgBox Selection.Address(ReferenceStyle:=xlA1, RowAbsolute:=False, ColumnAbsolute:=False)
    Range(myString).Copy

If CheckBoxALL.Value = True Then
    Sheets("Cost").Select
        For i = 1 To 20
        ActiveSheet.Next.Select
            rngS = rng.Address
            Range(rngS).Select
                ActiveSheet.Paste
                    ActiveWindow.ScrollRow = 85
        Next i
    End If

If CheckBoxHR1.Value = True Then
    Sheets("Cost").Next.Select
            rngS = rng.Address
            Range(rngS).Select
                ActiveSheet.Paste
                    ActiveWindow.ScrollRow = 85
    End If

【问题讨论】:

  • 那么为什么用户在第一步选择范围??
  • 这些步骤应该是对 sheet1 进行更改,按宏按钮,通过用户窗体选择工作表,选择工作表,单击应用,然后选择需要复制的区域。我的问题是,如果我只是在按下宏按钮之前选择了一个随机单元格,宏将从随机单元格中获取数据,而不是用户突出显示的范围。

标签: vba excel macros selection user-input


【解决方案1】:

没有测试,但我认为你可以直接使用 'rng' 变量

我是说

而不是

    Set rng = Application.InputBox("select cell range with changes", "Cells to be copied", Default:="Select Cell Range", Type:=8)
    Application.ScreenUpdating = False
    myString = Selection.Address(ReferenceStyle:=xlA1, RowAbsolute:=False, ColumnAbsolute:=False)
'MsgBox Selection.Address(ReferenceStyle:=xlA1, RowAbsolute:=False, ColumnAbsolute:=False)
    Range(myString).Copy

你可以走这条路

    Set rng = Application.InputBox("select cell range with changes", "Cells to be copied", Default:="Select Cell Range", Type:=8)
    Application.ScreenUpdating = False
    rng.Copy

【讨论】:

  • 好消息,效果很好。我仍然不确定为什么它会使用我在运行宏之前激活的任何单元格,但我想现在已经无关紧要了。
猜你喜欢
  • 2013-08-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-16
相关资源
最近更新 更多