我的VBA代码中目前有以下一行用于Inputbox:
Set myValues = Application.InputBox("Please select on the spreadsheet the first cell in the column with the values that you are looking for:", Type:=8)
但是,当我选择单元格时,它会自动输入例如$A$1。可以在无需用户手动删除$的情况下更改此设置,以便Inputbox将自动选择单元格引用作为A1吗?

它是自动VLookup宏的一部分,该宏与固定在整个列中的VLookup值完全不同。

提前致谢。

更新-这是完整的代码:

Dim FirstRow As Long
Dim FinalRow As Long
Dim myValues As Range
Dim myResults As Range
Dim myCount As Integer

Sub VlookupMacroNew()

Set myValues = Application.InputBox("Please select on the spreadsheet the first cell in the column with the values that you are looking for:", Default:=Range("A1").Address(0, 0), Type:=8)

Set myResults = Application.InputBox("Please select on the spreadsheet the first cell where you want your lookup results to start:", Type:=8)

myCount = Application.InputBox("Please enter the column number of the destination range:", Type:=1)

On Error Resume Next
myResults.EntireColumn.Insert Shift:=xlToRight
Set myResults = myResults.Offset(, -1)
FirstRow = myValues.Row
FinalRow = Cells(65536, myValues.Column).End(xlUp).Row

Range(myResults, myResults.Offset(FinalRow - FirstRow)).Formula = _
"=VLOOKUP(" & Cells(FirstRow, myValues.Column).Address & ", " & _
"'S:\Payroll\CONTROL SECTION\[Latest Data.xls]Sheet1'!$A$1:$B$100" & ", " & myCount & ", False)"

myValues将以但是,当我们使用动态列表时,单元格A2会需要将查找值更改为A3,A4,A5等,因为公式是沿列表向下复制的。通过使用$ A $ 2的输入框,查找公式仅查看该单元格引用。

最佳答案

正如Tim所说,您的问题不在于InputBox。而是一次为整个范围设置公式时,它对每个单元格的公式使用FirstRow。理想情况下,您将使用.FormulaR1C1设置公式。这样一来,您就可以使公式相对。

下面的解决方案只是修改您的代码以在第一个单元格中放置一个非相对地址,然后将其余单元格中的公式设置为与第一个单元格中的公式相同。当您分配这样的公式时,它使它们成为相对的:

Sub VlookupMacroNew()

Set myValues = Application.InputBox("Please select on the spreadsheet the first cell in the column with the values that you are looking for:", Default:=Range("A1").Address(0, 0), Type:=8)
Set myResults = Application.InputBox("Please select on the spreadsheet the first cell where you want your lookup results to start:", Type:=8)
myCount = Application.InputBox("Please enter the column number of the destination range:", Type:=1)

On Error Resume Next
myResults.EntireColumn.Insert Shift:=xlToRight
Set myResults = myResults.Offset(, -1)
FirstRow = myValues.Row
FinalRow = Cells(65536, myValues.Column).End(xlUp).Row

Range(myResults, myResults.Offset(FinalRow - FirstRow)).Cells(1).Formula = _
"=VLOOKUP(" & Cells(FirstRow, myValues.Column).Address(False, False) & ", " & _
"'S:\Payroll\CONTROL SECTION\[Latest Data.xls]Sheet1'!$A$1:$B$100" & ", " & myCount & ", False)"
Range(myResults, myResults.Offset(FinalRow - FirstRow)).Formula = _
Range(myResults, myResults.Offset(FinalRow - FirstRow)).Cells(1).Formula
End Sub

关于Excel VBA Inputbox-选择范围(类型8)但不作为固定范围,即A1而非$ A $ 1,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13471809/

10-12 01:57