繁体   English   中英

跨页vba中的单元格名称

[英]Name of cells in vba across sheets

有人可以帮我解决以下情况:

如果 sheet1 中的 A1 等于“W1”,我如何制作 VBA 以便 sheet2 中的 B2 等于“星期一早上好”。
我必须这样做,如果 Sheet1 中的 A1 更改为“W2”,则 sheet2 中的 B2 等于“Goodmorning Tuesday”。

我尝试了以下代码:

Sub Datesss()

If Sheets("Sheet1").Range("A1") = "W1" Then
Sheets("Sheet2").Range("B2") = "Goodmorning Monday"

或者

If Sheets("Sheet1").Range("A1") = "W2" Then
Sheets("Sheet2").Range("B2") = "Goodmorning Tuesday"

End Sub

工作表更改:越简单越好

  • 将以下代码复制到工作表Sheet1的工作表代码模块中。 VBE Project Explorer中,不在括号内的名称是工作表代码名称,VBA中的window也会显示,而括号内的名称是选项卡名称。
  • 没有什么可运行的,它会自动运行。
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
    
    Dim WDays(): WDays = VBA.Array("W1", "W2", "W3", "W4", "W5", "W6", "W7")
    Dim Days(): Days = VBA.Array("Monday", "Tuesday", "Wednesday", _
        "Thursday", "Friday", "Saturday", "Sunday") _
    
    Dim sws As Worksheet: Set sws = Me ' worksheet containing this code
    Dim sCell As Range: Set sCell = sws.Range("A1")
    
    Dim tCell As Range: Set tCell = Intersect(sCell, Target)
    If tCell Is Nothing Then Exit Sub
    
    Dim tValue As Variant: tValue = tCell.Value
    Dim tIndex As Variant: tIndex = Application.Match(tValue, WDays, 0)
    If IsError(tIndex) Then Exit Sub
    
    Dim dws As Worksheet: Set dws = sws.Parent.Sheets("Sheet2")
    Dim dCell As Range: Set dCell = dws.Range("B2")
    
    dCell.Value = "Good Morning " & Days(tIndex - 1)

End Sub

请复制“Sheet1”代码模块中的下一个代码:

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.address(0, 0) = "A1" Then
        Dim sh2 As Worksheet: Set sh2 = Worksheets("Sheet2")
        If Target.Value Like "W?" Then
            If CLng(Mid(Target.Value, 2)) > 0 And CLng(Mid(Target.Value, 2)) <= 7 Then
                sh2.Range("B2").Value = "Goodmorning " & getDayName(Mid(Target.Value, 2)) 'Monday"
            End If
        End If
    End If
End Sub

Function getDayName(dayNo As Long) As String
    Dim arrDaysName: arrDaysName = Split("Monday,Tuesday,Wednesday,Thurstay,Friday,Saturday,Sunday", ",")
    getDayName = arrDaysName(CLng(dayNo))
End Function

更改“A1”单元格内容并检查“Sheet2”、“B2”单元格中发生的情况...

当然,它只会对 1 到 7 之间的后缀数字做一些事情......

您可以使用Code behind sheet中的内置函数。 转到您的 VBA 项目 (Alt+F11),然后打开项目资源管理器 (Ctrl+R) 双击 Sheet1,将显示代码区域。 然后将这段代码粘贴到:

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$A$1" Then
    Worksheets("Sheet2").Cells(2, 2) = "Goodmorning Monday"
End If
End Sub

每当更改 Sheet1 中的任何单元格时,都会运行此代码。 并通过检查目标。 Address 你可以随心所欲地操纵。 请记住将您的文件另存为 .xlsm;-)

问题未解决?试试以下方法:

跨页vba中的单元格名称

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2023 STACKOOM.COM