如何在MENU中自动创建指向特定选项卡的链接?

时间:2014-11-07 20:19:03

标签: excel vba excel-vba

首先想说的是,在1-10的评分中,我对VBA的了解大约为-2。我正在学习,并依靠现有的大量编码。

我的问题,我有一个包含两个TABS的工作簿:

Tab 1 = MENU(包含TABS列表及其链接) 标签2 =模板表格(隐藏)

在菜单中,我创建了一个调用模块的按钮,允许用户创建新的TAB。单击时,隐藏的模板表单可见,因此可以将其复制到新选项卡,然后再次隐藏。

然后,用户提示输入业务程序名称,该值将转移到新创建的工作表中的特定单元格。

然后提示用户输入缩写词,该值将被转移到两个地方:

1)到工作表中的特定单元格 2)成为TAB的名称

这是我使用的代码:

Sub New_Prog()
Dim tmp_sheet As Worksheet
Sheets("TEMPLATE").Visible = True
Sheets("TEMPLATE").Copy After:=Sheets(Sheets.Count)
Set test = ActiveSheet

Dim prog_full_name As String
prog_full_name = InputBox("What is the program's full name", "Program full name")
ActiveSheet.Range("C6").Value = UCase(prog_full_name)
Dim prog_acro As String
prog_acro = InputBox("What is the program's acronyme", "Program acronyme")
ActiveSheet.Range("G6").Value = UCase(prog_acro)
ActiveSheet.Name = UCase(prog_acro)

Dim prog_dpt As String
prog_dpt = InputBox("What is the program's department (ESDC, TB, etc.)", "Program department")
ActiveSheet.Range("K6").Value = UCase(prog_dpt)
Sheets("TEMPLATE").Visible = False**

问题1 我应该为我的模块提供什么代码来验证带有首字母缩写词的TAB是否已经存在,并返回一条错误消息,告知用户。

问题2 我希望在MENU TAB中的单元格中自动创建链接,该链接链接到创建的新TAB。如何将TAB名称传递到特定单元格,进入下一个空单元格并使超链接到实际TAB?

问题3 此外,在MENU选项卡中,我有一个名为BUSINESS的列和一个名为CLIENT的列;我希望用户选择是否应在业务列,客户端列或两者下创建链接。

感谢。

1 个答案:

答案 0 :(得分:0)

尝试使用“裸骨”解决方案来解决您需要的原则。示例假定用户输入的输入框很简单,菜单表中的选项卡名称位于col menCol中,超链接列为menCol + 1表示Business,menCol + 2表示客户端。

Sub SOQ()
Dim wsMen As Worksheet, wsNew As Worksheet
Dim nextMenRow As Long, menCol As Long

Set wsMen = Sheets("Menu")
menCol = 1

usrWs = InputBox("Enter Tab Name")

    For Each ws In Worksheets
        If UCase(usrWs) = UCase(ws.Name) Then
            MsgBox "This Tab name already exists"
            Exit Sub
        End If
    Next ws

lnk = InputBox("Create link under All (A), Business (B) or Client (C)")

ActiveWorkbook.Sheets.Add After:=Worksheets(Worksheets.Count)
ActiveSheet.Name = usrWs
    With wsMen
        nextMenRow = .Cells(.Rows.Count, menCol).End(xlUp).Row + 1
        .Cells(nextMenRow, menCol).Value = usrWs

            Select Case UCase(lnk)
                Case Is = "A"
                    Call createHyp(usrWs, nextMenRow, menCol + 1)
                    Call createHyp(usrWs, nextMenRow, menCol + 2)
                Case Is = "B"
                    Call createHyp(usrWs, nextMenRow, menCol + 1)
                Case Is = "C"
                    Call createHyp(usrWs, nextMenRow, menCol + 2)
            End Select

    End With
End Sub

Sub createHyp(ByVal sht As String, ByVal rw As Long, ByVal co As Long)
    With Sheets("Menu")
        .Hyperlinks.Add Anchor:=.Cells(rw, co), Address:="", SubAddress:=sht & "!" & Cells(1, 1).Address, TextToDisplay:="Goto " & sht
    End With
End Sub