请有人帮帮我,我好像是在问我的问题?
我有一个包含4个工作表比较,Office1,Office2和Office3的工作簿。在比较表中,其他工作表名称列在A列中。在此工作表的B列中,我有一个按钮。
我想要做的是双击按钮(我已为此分类了代码),然后这将带您进入相应工作表上的单元格D5。
目前我有以下代码,但它似乎没有激活它使用比较表的Office表。
有谁可以让我知道我错过了什么?
由于
Sub OfficeSht()
Dim rCrit3 As Range
Dim wb As Workbook
Dim ws As Worksheet
With Application
.EnableEvents = False
.ScreenUpdating = False
End With
Set rCrit3 = ActiveCell.Offset(RowOffset:=0, ColumnOffset:=-2)
Debug.Print rCrit3
Set ws = rCrit3.Worksheet
ws.Activate
ActiveSheet.Range("D5").Select
Application.EnableEvents = True
End Sub
答案 0 :(得分:1)
Application.Goto似乎合适,减少了实现目标的步骤。
Sub OfficeSht()
Dim ws As string
With Application
.EnableEvents = False
.ScreenUpdating = False
End With
ws = ActiveCell.Offset(RowOffset:=0, ColumnOffset:=-2).value2
Debug.Print "'" & ws & "'!D5"
Application.Goto Reference:="'" & ws & "'!R5C4" '<~~ D5 in xlR1C1
With Application
.EnableEvents = true
.ScreenUpdating = true
End With
End Sub
您可能希望将其设为Worksheet_BeforeDoubleClick事件。
答案 1 :(得分:0)
你不会说出你有什么样的按钮,所以我举了几个例子。
所有示例中常见的一段代码是WorkSheetExists
,它检查工作表名称是否与工作表相对应。
Public Function WorkSheetExists(SheetName As String) As Boolean
Dim wrkSht As Worksheet
On Error Resume Next
Set wrkSht = Worksheets(SheetName)
WorkSheetExists = (Err.Number = 0)
Set wrkSht = Nothing
On Error GoTo 0
End Function
接下来是调用OfficeSht
过程的三种方法。
如果您的按钮是ActiveX按钮并且在B列中,您可以使用:
Private Sub CommandButton1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
OfficeSht Me.Shapes("CommandButton1").TopLeftCell
End Sub
此代码返回对按钮所在的左上角单元格的引用 - 假设您的工作表名称是此左侧的一个单元格。
第二种方法是使用“表单”按钮。
Public Sub Button_Click()
OfficeSht Me.Shapes(Application.Caller).TopLeftCell
End Sub
同样,它返回对放置按钮的左上角单元格的引用。当您添加按钮时,只需将其分配给Button_Click
过程。
第三种方式假设您的按钮实际上是一个格式化为按钮的单元格,或者您只想双击A列中的工作表名称并取消在B列中有一个按钮:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
OfficeSht Target
End Sub
最后,您的代码选择单元格D5(第5行,第4列 - R5C4)。
如果您要点击,或参考的单元格在,B列:
Public Sub OfficeSht(ByVal Target As Range)
Dim rLastCell As Range
Dim rDataRange As Range
Set rLastCell = Cells(Rows.Count, 1).End(xlUp)
Set rDataRange = Range("A1", rLastCell)
If Not Intersect(Target, rDataRange.Offset(, 1)) Is Nothing Then
If WorkSheetExists(Target.Offset(, -1).Value) Then
Application.Goto "'" & Target.Offset(, -1).Value & "'!R5C4"
End If
End If
End Sub
如果您要点击,或引用的单元格在,A列:
Public Sub OfficeSht(ByVal Target As Range)
Dim rLastCell As Range
Dim rDataRange As Range
Set rLastCell = Cells(Rows.Count, 1).End(xlUp)
Set rDataRange = Range("A1", rLastCell)
If Not Intersect(Target, rDataRange) Is Nothing Then
If WorkSheetExists(Target.Value) Then
Application.Goto "'" & Target.Value & "'!R5C4"
End If
End If
End Sub
可能在那里有点胡扯......:)