输入框范围归因问题

时间:2014-03-07 23:24:43

标签: excel excel-vba vba

我一直在尝试构建一个实用程序,允许用户在列(或行)中选择公式,并使用Transpose PasteSpecial方法将这些公式转换为行(或列) 。我让它适用于特定的目标单元格,但是一旦我尝试让用户控制目标单元格,我就会收到运行时错误1004“Range类的PasteSpecial方法失败”。

以下是工作代码(假设所选公式均不在Range("E3")中:

Dim rSelection As Range
    Set rSelection = Selection

Call MakeSelectionAbsolute(rSelection)
rSelection.Copy

Dim rMoveTo As Range
    Set rMoveTo = Range("E3")


With rMoveTo
    .PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
                   False, Transpose:=True
    Call MakeSelectionRelative(Selection)
End With
rSelection.Delete

我已经尝试了几种方法(包括将返回值的UDF),但我认为问题源于使用输入框。我目前的尝试是用这个替换Set rMoveTo = Range("E3")

    On Error Resume Next
        Application.DisplayAlerts = False
            Set rMoveTo = Application.InputBox(Prompt:= _
               "Select the first cell of the range you want to transpose to.", _
                    Title:="SPECIFY RANGE", Type:=8)
        Application.DisplayAlerts = True
    On Error GoTo 0

在我看来,这种替代应该有效。我尝试在rMoveTo上添加一个手表,看起来它为我选择的单元格设置了一个值(但我承认我还不知道如何读取为一个范围生成的所有手表数据)。

运行时错误1004发生在.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:=False, Transpose:=True

为什么这种方法不起作用,如何修复?这看起来似乎很简单,但我不知道那是什么。

1 个答案:

答案 0 :(得分:2)

剪贴板对UI操作非常敏感。当您使用Application.InputBox选择范围时,剪贴板正在清除,PasteSpecial失败,因为没有要粘贴的内容。

更改操作顺序:首先选择范围,然后复制/粘贴:

Dim rSelection As Range
Set rSelection = Selection

Call MakeSelectionAbsolute(rSelection)

On Error Resume Next
Application.DisplayAlerts = False
Set rMoveTo = Application.InputBox(Prompt:= _
           "Select the first cell of the range you want to transpose to.", _
                title:="SPECIFY RANGE", Type:=8)
Application.DisplayAlerts = True
On Error GoTo 0
'if user select nothing - exit sub
If rMoveTo Is Nothing Then Exit Sub

'copy AFTER user select range
rSelection.Copy

With rMoveTo
    .PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
                   False, Transpose:=True
    Call MakeSelectionRelative(Selection)
End With
rSelection.Delete