excel - Delete button or hyperlink to each row of the excel table
问题描述
Can i insert a delete button(or hyperlink etc) to every excel table row so that user can delete that current row? Is it even possible with just single line of code like mine below? i can get the current row index to show in a cell but don't know how make that cell have something to click and pass to function with vba :)
I tried to find from microsoft documentation but delete method documentation wasn't helpful so far.
Sub Test()
Dim sheet As Worksheet
Dim list As ListObject
Dim row As ListRow
Set sheet = Sheets("Sheet1")
Set list = sheet.ListObjects(1)
Set row = list.ListRows.Add
row.Range(1, 1).Value = sheet.Range("C7").Value
row.Range(1, 2).Value = sheet.Range("C4").Value
row.Range(1, 3).Value = sheet.Range("C8").Value
row.Range(1, 4).Value = sheet.Range("C6").Value
row.Range(1, 5).Value = sheet.Range("C10").Value
row.Range(1, 6).Value = sheet.Range("C11").Value
row.Range(1, 7).Value = "Delete button" ' call deleteRow and pass id there
End Sub
Sub deleteRow(id)
Dim sheet As Worksheet
Set sheet = ActiveSheet
sheet.ListObjects("Table").ListRows(id).Delete
End Sub
解决方案
Try this demo code, just paste into a new workbook and run the createTable macro. You should see a table with hyperlinks that delete the row. It may not be suitable for large tables though as it resizes the table and refreshes the links after every deletion.
Dim objListObj As ListObject
Dim objListRows As ListRows
Sub createTable()
ThisWorkbook.Sheets(1).ListObjects.Add(xlSrcRange, _
Range("$A1:H10"), , xlNo).Name = "Table1"
Call addLinks
End Sub
Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink)
If objListObj Is Nothing Then
Set objListObj = ThisWorkbook.Sheets(1).ListObjects(1)
Set objListRows = objListObj.ListRows
End If
ar = Split(Range(Target.SubAddress).Value, " ")
MsgBox "Deleting Row " & ar(2)
objListRows(ar(2)).Delete
Dim newsize As Integer
Let newsize = objListObj.Range.Rows.Count
objListObj.Resize Range("A1:H" & newsize)
Call addLinks
End Sub
Sub addLinks()
Dim ws As Worksheet
Set ws = ActiveWorkbook.Worksheets("Sheet1")
Set objListObj = ws.ListObjects(1)
Set objListRows = objListObj.ListRows
Dim i As Integer, rng As Range
For i = 1 To objListRows.Count
Set rng = objListRows(i).Range.Columns(7)
ws.Hyperlinks.Add Anchor:=rng, _
Address:="", SubAddress:=rng.Address, _
TextToDisplay:="Delete row " & i
Next i
End Sub
推荐阅读
- excel - VBA 中的错误:在循环中选择不连续的单元格范围
- android - 将 UDP 数据包转换为字符串并显示在日志中
- python - 是否有一些不同的方法可以在 VS 代码中导入 RE,或者我是否缺少一些设置?
- java - HarmonyOS 相当于 Android 中的 android.graphics.Typeface 是什么?
- mysql - 如何让增量值在另一列中运行
- airflow - 气流访问 Dag 定义中的命令行参数
- php - 无效参数(会话信息:chrome=92.0.4515.107)(UnknownCommandException)
- python - 如何使用 for 循环从存储在列表中的所有字典中的键返回值?
- mongodb - 如何获得猫鼬中两个字段的总和?
- javascript - 如何在引导多选下拉菜单中启用/禁用下拉菜单