Vba 如何在VB(宏)中创建正确的循环
我已经录制并完善了以下宏,它应该创建一个额外的工作表,其中超文本链接指向原始工作表中每个表的起始单元格,称为All_tables。在此表中,每个表都用哈希符号分隔: 现在我想把它放到一个循环中,它会重复十次或更多次。我尝试使用散列符号作为程序的参考点,以找出他应该将超链接指向哪个单元格。结果如下:Vba 如何在VB(宏)中创建正确的循环,vba,excel,Vba,Excel,我已经录制并完善了以下宏,它应该创建一个额外的工作表,其中超文本链接指向原始工作表中每个表的起始单元格,称为All_tables。在此表中,每个表都用哈希符号分隔: 现在我想把它放到一个循环中,它会重复十次或更多次。我尝试使用散列符号作为程序的参考点,以找出他应该将超链接指向哪个单元格。结果如下: Sub Create_list_of_tables() Sheets.Add After:=Sheets(Sheets.Count) ActiveSheet.Name = "list of t
Sub Create_list_of_tables()
Sheets.Add After:=Sheets(Sheets.Count)
ActiveSheet.Name = "list of tables"
Const cStrDivider As String = "#"
Dim rMyCell As Range
Dim table_number As Long
table_number = 0
Do Until table_number = 10
Set rMyCell = Range("cStrDivider").Select
ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:="", SubAddress:= _
"All_Tables!&rMyCell", TextToDisplay:="some variable pointing at the table name"
ActiveCell.Offset(1, 0).Select
table_number = table_number + 1
Loop
End Sub
但它不起作用。我对宏和VB编程完全不熟悉,所以如果你至少能告诉我方向,我会非常高兴。我的方法是完全错误的吗
非常感谢您我不确定您希望将超链接指向的确切位置,但这将为您提供一个良好的开端。注意事项: 不要使用Select或Selection语句。它们速度慢,会产生不良影响。取而代之的是使用非常明确的语句,这些语句不依赖于光标位置,而是对您知道的事物所在的绝对位置进行评级。 使用范围对象的Find和FindNext方法查找字符串。当FindNext无法找到更多内容时,它将不返回任何内容。很好地检查,而不是执行表号循环。 更新
看看它是如何工作的,然后再往前走。当你说它不工作时,1。这是否意味着代码有错误?或2。您的代码是否不返回任何内容或只执行任何操作,但没有编译错误?这段代码似乎是错误的:ActiveSheet.Hyperlinks.Add Anchor:=选择、地址:=、子地址:=\uU所有表&我觉得语法不对。我不知道如何正确地将变量和固定位置结合起来……当向字符串添加变量时,它需要在引号之外。试试所有的桌子rMyCell@Zaider这将使链接指向所有表!这可能不是一个有效的单元格引用。谢谢,这对开始很好。All_tables工作表应成为一个单独的表列表,即ActiveSheet中由哈希符号清除的超链接列表。简单地说,我需要它的另一种方式:-…但无论如何,你的代码帮助我了解了宏的工作原理。谢谢好极了:不客气,如果这对你有帮助,别忘了接受
Sub Create_list_of_tables()
Sheets.Add After:=Sheets(Sheets.Count)
ActiveSheet.Name = "list of tables"
Const cStrDivider As String = "#"
Dim rMyCell As Range
Dim table_number As Long
table_number = 0
Do Until table_number = 10
Set rMyCell = Range("cStrDivider").Select
ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:="", SubAddress:= _
"All_Tables!&rMyCell", TextToDisplay:="some variable pointing at the table name"
ActiveCell.Offset(1, 0).Select
table_number = table_number + 1
Loop
End Sub
Sub Create_list_of_tables()
Const cStrDivider As String = "#"
Dim sht As Worksheet, rMyCell As Range, rSearchRange As Range
Dim testSht As Worksheet, firstMyCell As Range
Set sht = ActiveSheet
On Error Resume Next
Set testSht = ActiveWorkbook.Sheets("All_Tables")
If Err.Number <> 9 Then
Application.DisplayAlerts = False
testSht.Delete
Application.DisplayAlerts = True 'important to set back to true!
End If
On Error GoTo 0
ActiveWorkbook.Sheets.Add After:=Sheets(Sheets.Count)
ActiveWorkbook.Sheets(Sheets.Count).Name = "All_Tables"
Set rSearchRange = sht.Range("A:A")
'do initial "Find"
Set rMyCell = rSearchRange.Find(cStrDivider)
Set firstMyCell = rMyCell
Do
sht.Hyperlinks.Add Anchor:=rMyCell.Offset(0, 1), Address:="All_Tables!" & rMyCell.Address, _
TextToDisplay:="Link"
'get the next "MyCell" to use from the master range to search
Set rMyCell = rSearchRange.FindNext(rMyCell)
'increment your table counter (if you want to do this you can still
table_number = table_number + 1
Debug.Print firstMyCell.Address
Debug.Print rMyCell.Address
Loop While firstMyCell.Address <> rMyCell.Address
End Sub