[英]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;-)
问题未解决?试试以下方法:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.