Excel VBA 查找/记录用户选择
Excel VBA finding / recording user selection
我遇到了一个问题不大的错误。下面代码的目标是允许用户 select 他们想要修改的 sheets (HR1 - HR20),然后 select 上的单元格(单元格范围)他们想要复制到 selected sheet 的原始 sheet。
问题是用户必须 select 他们想要更改的范围,然后 运行 宏(通过按钮),select sheets ,然后重新选择范围。如果他们在宏 运行 之前只有一个单元格 selected,即使在他们突出显示范围之后,宏也会复制该单个单元格的值,当宏提示时,他们想要变了。有什么方法可以告诉宏只使用 selected 范围吗?
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
没有测试,但我认为你可以直接使用 '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
我遇到了一个问题不大的错误。下面代码的目标是允许用户 select 他们想要修改的 sheets (HR1 - HR20),然后 select 上的单元格(单元格范围)他们想要复制到 selected sheet 的原始 sheet。
问题是用户必须 select 他们想要更改的范围,然后 运行 宏(通过按钮),select sheets ,然后重新选择范围。如果他们在宏 运行 之前只有一个单元格 selected,即使在他们突出显示范围之后,宏也会复制该单个单元格的值,当宏提示时,他们想要变了。有什么方法可以告诉宏只使用 selected 范围吗?
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
没有测试,但我认为你可以直接使用 '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