Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 排序数组大小_Vba_Excel - Fatal编程技术网

Vba 排序数组大小

Vba 排序数组大小,vba,excel,Vba,Excel,我正在尝试使用visual basic在目录上创建各种工作表的超链接 第一页是目录。因此,目录中包含的工作表从工作表2开始。我无法将数组更改为从工作表2开始 这是我的代码行 'Create Table of Contents ' Create array with locations Set firstsheet = Worksheet(2).Value ' Dim arrworksheets(2 To Worksheets.Count) As Long Fo

我正在尝试使用visual basic在目录上创建各种工作表的超链接

第一页是目录。因此,目录中包含的工作表从工作表2开始。我无法将数组更改为从工作表2开始

这是我的代码行

'Create Table of Contents

 ' Create array with locations

    Set firstsheet = Worksheet(2).Value

    '  Dim arrworksheets(2 To Worksheets.Count) As Long

    For x = arr(firstsheet) To UBound(myArray)

    Set sht = Worksheets(myArray(x))

    sht.Activate

    With Content_sht

      .Hyperlinks.Add .Cells(x + 2, 3), "", _

      SubAddress:="'" & sht.Name & "'!A1", _

      TextToDisplay:=sht.Name

      .Cells(x + 2, 2).Value = x

    End With

  Next x

提前非常感谢

据我所知,您希望遍历工作簿中的所有工作表,但不包括列表中的第一个工作表-目录页

有一个很好的例子说明了如何实现这一点,根据代码中的相似性判断,您可能已经看过了

您要查看的相关部分是:

'Create Array list with sheet names (excluding Contents)
  ReDim myArray(1 To Worksheets.Count - 1)

  For Each sht In ActiveWorkbook.Worksheets
    If sht.Name <> ContentName Then
      myArray(x + 1) = sht.Name
      x = x + 1
    End If
  Next sht
试试这个


选项显式
Public Sub MakeTOC()'创建目录
常数TOC_COL=3
Const TOC_行=5
将wsTOC设置为工作表,ws设置为工作表,nextRow设置为长,linkAddress设置为字符串
设置wsTOC=ThisWorkbook.Worksheets(“Sheet3”)“TOC工作表
使用wsTOC.Cells(TOC_行-2,TOC_列)'设置标题单元格
.Value2=“目录”
.Font.Size=14
.Font.Bold=True
.HorizontalAlignment=xlCenter
以
nextRow=TOC_行
对于此工作簿中的每个ws。工作表的添加工作表名称列表
如果ws.Name wsTOC.Name,则
linkAddress=“”&ws.Name&“!A1”
带wsTOC.单元(下一步,TOC_COL)
.Value2=ws.Name
.Hyperlinks.Add.Cells(1),vbNullString,子地址:=linkAddress_
TextToDisplay:=ws.Name
.Font.Bold=True
.Offset(,-1)=nextRow-TOC_行+1
.偏移量(,-1).水平对齐=xlCenter
以
nextRow=nextRow+1
如果结束
下一个
wsTOC.Columns(TOC_COL).Columns.AutoFit
wsTOC.UsedRange.verticalignment=xlCenter
端接头

输出


您的实际问题是什么?什么不起作用?数组不是从工作表2开始的这一行没有意义
Set firstsheet=worksheet(2).Value
。它应该做什么?第一页(目录)的名称是什么?
Dim x As Integer
Dim count As Integer
Dim Content_sht As Worksheet
Dim sht_nam As String

count = ActiveWorkbook.Worksheets.count
Set Content_sht = Worksheets("Sheet1") 'whatever your contents page is called


For x = 2 To count

    sht_nam = Worksheets(x).Name

    With Content_sht
      .Hyperlinks.Add .Cells(x + 2, 3), "", _
      SubAddress:="'" & sht_nam & "'!A1", _
      TextToDisplay:=sht_nam
      .Cells(x + 2, 2).Value = x
    End With

Next x
Option Explicit

Public Sub MakeTOC()    'Create Table of Contents
    Const TOC_COL = 3
    Const TOC_ROW = 5
    Dim wsTOC As Worksheet, ws As Worksheet, nextRow As Long, linkAddress As String

    Set wsTOC = ThisWorkbook.Worksheets("Sheet3")   'TOC Sheet

    With wsTOC.Cells(TOC_ROW - 2, TOC_COL)  'Set title cell
        .Value2 = "Table of Contents"
        .Font.Size = 14
        .Font.Bold = True
        .HorizontalAlignment = xlCenter
    End With

    nextRow = TOC_ROW

    For Each ws In ThisWorkbook.Worksheets  'Add list of Sheet Names
        If ws.Name <> wsTOC.Name Then
            linkAddress = "'" & ws.Name & "'!A1"
            With wsTOC.Cells(nextRow, TOC_COL)
                .Value2 = ws.Name
                .Hyperlinks.Add .Cells(1), vbNullString, SubAddress:=linkAddress, _
                                TextToDisplay:=ws.Name
                .Font.Bold = True
                .Offset(, -1) = nextRow - TOC_ROW + 1
                .Offset(, -1).HorizontalAlignment = xlCenter
            End With
            nextRow = nextRow + 1
        End If
    Next
    wsTOC.Columns(TOC_COL).Columns.AutoFit
    wsTOC.UsedRange.VerticalAlignment = xlCenter
End Sub