使用VBA – Excel将超链接添加到表中的单元格

我有两张名为“投诉”和“添加行”的Excel。

我正在使用“添加行”工作表向“ ComplaintsTable工作表中名为“ ComplaintsTable的表中添加一行(在包含值的最后一行之后),并使用与命令button配对的macros来执行此操作。

我的代码如下所示:

 Private Sub CommandButton1_Click() Dim LastRow As Long, ws As Worksheet, ws1 As Worksheet, newRow As ListRow Set ws = Sheets("Complaints") Set ws1 = Sheets("Add Row") Set tbl = ws.ListObjects("ComplaintsTable") Set newRow = tbl.ListRows.Add With newRow .Range(2) = ws1.Range("C1").Value 'Complaint Yes/No .Range(12) = ws1.Range("C6").Value 'PCE Yes/No End With newRow.Range(4) = ws1.Range("C4").Value 'Subject newRow.Range(21) = ws1.Range("C5").Value 'Entered Date 'To add Hyperlink If (ws1.Range("C1").Value = "Yes") Then ws.Hyperlinks.Add Anchor:=tbl.newRow.Range(3), _ Address:=ws1.Range("F3").Value, _ ScreenTip:="Open Complaint in EtQ", _ TextToDisplay:=Worksheets("Add Row").Range("F2").Value End If If (ws1.Range("C6").Value = "Yes") Then 'To add hyperlink and PCE Number ws.Hyperlinks.Add Anchor:=tbl.newRow.Range(13), _ Address:=ws1.Range("F8").Value, _ ScreenTip:="Open PCE in EtQ", _ TextToDisplay:=ws1.Range("F7").Value End If End Sub 

不知何故,当我点击命令button来添加值,它不会添加任何东西! 我哪里错了?

如果你点击button而没有任何东西 ,甚至没有发生任何错误,可能会有几个问题。

首先,如@Carol所述, newRow不应该被tbl限定,因为newRow不是tbl的属性或方法

可能性1:
你已经添加了一个表单控件button到你不能分配一个Private Sub CommandButton1_Click()因为它是私有的,只能在它所放置的代码模块中使用,它不能被引用它。

可能性2:
你已经添加了一个ActiveX命令button,写了Private Sub CommandButton1_Click()但随后更改了button的名称。 在这种情况下,将CommandButton1更改为您命名button的任何内容。

可能性3:
你遇到一个错误,点击debugging,代码暂停。 只要代码暂停,不会有新事件触发,因此您的button将不会显示任何内容。 这是由您的代码行中黄色突出显示。 您需要修复导致错误的行,并通过点击F5或点击通常位于VBA窗口顶部附近的停止图标来恢复您的代码。

您要显示的文本必须是一个零长度的string,这是无法创build超链接。

定义要显示的文本,就像以前一样,以确保这一行是问题:

 myStr=Worksheets("Add Row").Range("F2").Value 

尝试在添加超链接之前定义variables和范围对象,而不是使用.value等将它们放在stringvariables中,并确保它们都具有有效值。 如果你这样做,它应该工作,否则按照上面的说明,你会发现问题在哪里:

replace这个块,如果它工作,以相同的方式改变其他块:

 If (ws1.Range("C1").Value = "Yes") Then ws.Hyperlinks.Add Anchor:=tbl.newRow.Range(3), _ Address:=ws1.Range("F3").Value, _ ScreenTip:="Open Complaint in EtQ", _ TextToDisplay:=IIf(mystr <> "", mystr, "Click Here") End If 

这里是你的重构,清理代码与截图。 正如@Ibo和我自己所提到的,问题很可能在于你已经声明并设置了newRow作为范围,然后用它作为你的表的属性是不可能的。

 Option Explicit Private Sub CommandButton1_Click() Dim wsComplaints As Worksheet, wsAddRow As Worksheet Dim tblComplaints As ListObject Dim lngRows As Long With ThisWorkbook Set wsComplaints = .Worksheets("Complaints") Set wsAddRow = .Worksheets("Add Row") End With Set tblComplaints = wsComplaints.ListObjects("ComplaintsTable") tblComplaints.ListRows.Add lngRows = tblComplaints.ListRows.Count With tblComplaints .DataBodyRange(lngRows, 2) = wsAddRow.Cells(1, 3) .DataBodyRange(lngRows, 4) = wsAddRow.Cells(4, 3) .DataBodyRange(lngRows, 12) = wsAddRow.Cells(6, 3) .DataBodyRange(lngRows, 21) = wsAddRow.Cells(5, 3) End With If wsAddRow.Cells(1, 3) = "Yes" Then tblComplaints.DataBodyRange(lngRows, 3).Hyperlinks.Add _ Anchor:=tblComplaints.DataBodyRange(lngRows, 3), _ Address:=CStr(wsAddRow.Cells(3, 6)), _ ScreenTip:="Open complaint in EtQ", _ TextToDisplay:=CStr(wsAddRow.Cells(2, 6)) End If If wsAddRow.Cells(6, 3) = "Yes" Then tblComplaints.DataBodyRange.Hyperlinks.Add _ Anchor:=tblComplaints.DataBodyRange(lngRows, 13), _ Address:=CStr(wsAddRow.Cells(8, 6)), _ ScreenTip:="Open PCE in EtQ", _ TextToDisplay:=CStr(wsAddRow.Cells(7, 6)) End If End Sub 

解决scheme的屏幕截图。

工作表添加行 工作表投诉