让用户使用VBA单击单元格作为Excelinput框的input

我有一个InputBox存储用户input到一个variables。 用户input的input是一个单元号。

例如,input框popup并询问用户“你想从哪里开始?” 用户然后inputA4,或者他们想要开始的任何一个单元格。

我的问题是,有没有办法让用户在物理上点击单元格A4而不是键入?

在此先感谢您的帮助

更新:所以,基本上我们有很长的水平跨越的转置数据列表。 我们希望这些列表水平堆叠在一起,这就是代码应该做的事情。

一切正常之前,但用户将不得不手动input到input框的单元格号码。 input框询问用户他们想要开始剪切的位置,第二个框询问用户他们想要开始粘贴的位置。 我将这些input值存储到stringvariables,一切工作就像一个魅力。

从那以后,我希望用户能够物理地点击单元格,因为很难查看它实际上是哪个行号。 下面的代码被更新,以反映试图用来允许用户单击单元格的更改。 我添加了Application.InputBox方法,并将variables的声明更改为Range。

我一次一个地join这个项目,看看发生了什么,这就是我发现的。 之前,如果用户想从B4开始粘贴到A16,则selectB(B4:B15)的数据范围,将其剪下,粘贴到A16。 然后,我有代码的方式,它会回到B4用户input点,并使用for循环来增加我的xvariables,它将偏移到右侧的下一列。 因此,它会重复切割C列(C4:C15)的过程并将其粘贴到A28(使用xldown),以此类推以进行处理。

当我进入这个当前的代码时,现在发生的事情是,我没有看到任何logging值到我的范围variables。 它将切割B4:B15并粘贴到A16的第一步,但是当它运行下一个循环时,不是从B4开始并偏移,而是从A16开始,然后偏移。 应该返回到用户select的起点的B4,然后抵消。

对不起,长时间的解释,但我希望这有助于清除这种情况。

使用Application.InputBox的当前代码

Dim x As Integer Dim strColumnStart As Range Dim strColumnEnd As Range On Error Resume Next Application.DisplayAlerts = False Set strColumnStart = Application.InputBox("What cell would you like to start at?", "Starting position","Please include column letter and cell number", Type:=8) On Error GoTo 0 Set strColumnEnd = Application.InputBox("Where would you like to paste the cells to?", "Pasting position", "Please include column letter and cell number", Type:=8) On Error GoTo 0 Application.DisplayAlerts = True If strColumnStart = "What cell would you like to start at?" Or _ strColumnEnd = "Please include column letter and cell number" Then Exit Sub Else For x = 0 To strColumnStart.CurrentRegion.Columns.Count strColumnStart.Select ActiveCell.Offset(0, x).Select If ActiveCell.Value = Empty Then GoTo Message Else Range(Selection, Selection.End(xlDown)).Select Selection.Cut strColumnEnd.Select ActiveCell.Offset(-2, 0).Select ActiveCell.End(xlDown).Select ActiveCell.Offset(1, 0).Select ActiveSheet.Paste strColumnStart.Select End If Next x End If Message: MsgBox ("Finished") strColumnEnd.Select ActiveSheet.Columns(ActiveCell.Column).EntireColumn.AutoFit Application.CutCopyMode = False End Sub 

来自: http : //www.ozgrid.com/VBA/inputbox.htm

 Sub RangeDataType() Dim rRange As Range On Error Resume Next Application.DisplayAlerts = False Set rRange = Application.InputBox(Prompt:= _ "Please select a range with your Mouse to be bolded.", _ Title:="SPECIFY RANGE", Type:=8) On Error GoTo 0 Application.DisplayAlerts = True If rRange Is Nothing Then Exit Sub Else rRange.Font.Bold = True End If End Sub 

更新OP的要求:

 Sub Test2() Dim x As Integer Dim rngColumnStart As Range Dim rngColumnEnd As Range Dim rngCopy As Range Dim numRows As Long, numCols As Long On Error Resume Next Set rngColumnStart = Application.InputBox( _ "Select the cell you'd like to start at", _ "Select starting position", , Type:=8) If rngColumnStart Is Nothing Then Exit Sub Set rngColumnEnd = Application.InputBox( _ "Select where you'd like to paste the cells to", _ "Select Pasting position", , Type:=8) On Error GoTo 0 If rngColumnEnd Is Nothing Then Exit Sub Set rngColumnEnd = rngColumnEnd.Cells(1) 'in case >1 cell was selected Set rngCopy = rngColumnStart.CurrentRegion numRows = rngCopy.Rows.Count numCols = rngCopy.Columns.Count For x = 1 To numCols rngCopy.Columns(x).Copy _ rngColumnEnd.Offset((x - 1) * numRows, 0) Next x rngCopy.ClearContents MsgBox ("Finished") rngColumnEnd.EntireColumn.AutoFit Application.CutCopyMode = False End Sub