excel - Excel VBA中是否有任何方法可以在代码中使用光标而不是列号动态更改行号?
问题描述
尊敬的 VBA/宏专家,
我的任务是根据第一列条形码或第二列 SKU 代码获取数据。它将从主表中获取产品详细信息和销售价格的详细信息,然后将显示一个输入框提示输入数量,一旦我输入数量,它将通过将销售价格和数量相乘来计算金额。我创建了一个快捷键来执行代码。
下面附上我的列的图像参考,当我单击运行我的代码时,它会执行所有操作并再次从新行开始。但我的要求是,当我单击快捷键时,它应该跳转到应该应用公式的列,在这种情况下,是 C 列和 D 列。我无法找到正确的方法,当我输入快捷键时,它应该从列开始C 和 D 以及光标应在下一行第一列结束。因为现在我在输入条形码或 SKU 代码后手动移动光标,然后将光标移动到 C 以应用快捷键。但它应该动态应用于同一列的所有行。
我的代码:
Sub EasyTool()
'
' EasyTool for Platina Sales
'
' Keyboard Shortcut: Ctrl+q
'
'This will apply vlookup formula in column C and D
ActiveCell.Select
ActiveCell.FormulaR1C1 = _
"=IF(ISBLANK(RC[-2]),VLOOKUP(RC[-1],master_data!R1C2:R1000C3,2,FALSE),VLOOKUP(sale!RC[-2],master_data!R2C1:R1000C3,3,FALSE))"
ActiveCell.Offset(0, 1).Range("A1").Select
ActiveCell.FormulaR1C1 = _
"=IF(ISBLANK(RC[-3]),VLOOKUP(RC[-2],master_data!R2C2:R1000C7,6,FALSE),VLOOKUP(RC[-3],master_data!R1C1:R1000C7,7,FALSE))"
ActiveCell.Offset(0, 1).Range("A1").Select
'This is will immediatly prompt input box to enter quantity after the above operation
myValue = InputBox("Enter Quantity")
ActiveCell.Value = myValue
'This will move cursor to the next column for calculation
ActiveCell.Offset(0, 1).Range("A1").Select
'This will calculate the Value of Quantity * Selling price
myMultivalue = "=RC[-2]*RC[-1]"
ActiveCell.Value = myMultivalue
'This will move cursor to the next row, first column
ActiveCell.Offset(1, -5).Range("A1").Select
End Sub
解决方案
我会从 ActiveCell 中确定行,然后使用列号来填充行,而不是移动 activecell。例如
Option Explicit
Sub EasyTool2()
' Product Details
Const v1 = "VLOOKUP(RC[-1],master_data!R1C2:R1000C3,2,FALSE)"
Const v2 = "VLOOKUP(sale!RC[-2],master_data!R2C1:R1000C3,3,FALSE)"
' Prices
Const v3 = "VLOOKUP(RC[-2],master_data!R2C2:R1000C7,6,FALSE)"
Const v4 = "VLOOKUP(RC[-3],master_data!R1C1:R1000C7,7,FALSE)"
Dim ws As Worksheet
Dim EAN As String, SKU As String, iRow As Long
Set ws = ActiveSheet
iRow = ActiveCell.Row
If ActiveCell.Parent.Name = "master_data" Then
MsgBox "ActiveSheet must not be master_data", vbCritical
Exit Sub
End If
' Quantity col E
ws.Cells(iRow, 5).Value = InputBox("Enter Quantity")
EAN = ws.Cells(iRow, 1)
SKU = ws.Cells(iRow, 2)
If Len(EAN) > 0 Or Len(SKU) > 0 Then
' product details col C
ws.Cells(iRow, 3).FormulaR1C1 = "=IF(ISBLANK(RC[-2])," & v1 & "," & v2 & ")"
' selling price col D
ws.Cells(iRow, 4).FormulaR1C1 = "=IF(ISBLANK(RC[-3])," & v3 & "," & v4 & ")"
' total F
ws.Cells(iRow, 6).FormulaR1C1 = "=RC[-2]*RC[-1]"
Else
MsgBox "Column A and B both blank", vbCritical
Exit Sub
End If
' move to next row
ws.Cells(iRow + 1, 1).Select
End Sub
推荐阅读
- python - 综合组织几个由“或”连接的语句
- javascript - 使用 jest 获取测试
- java - 将 JavaFX ContextMenu 居中在屏幕中间?
- json - “解析 http://localhost:8080/ 期间的 Http 失败”
- c# - 没有“IEnumerable”类型的 ViewData 项
' @Html.DropDownList - java - 我如何从java中的arraylist中随机选择的类中调用方法?
- pandas - 更改熊猫中的日期时间格式
- laravel - Laravel Backpackl - 请求独特的产品和营养素
- javascript - 无效或意外的令牌 | discord.js / node.js
- haskell - Print to console and update Monad state in same function