在Excel中使用VBA在工作表之间共享单元格值以填充单元格中的数据

在Excel中使用VBA在工作表之间共享单元格值以填充单元格中的数据,excel,vba,Excel,Vba,更新的问题 我在第1页上附加了一个VBA脚本,它使用B5:B50单元格值用预定义文本填充相邻列。如果我想在另一个工作表中使用此脚本,但仍然使用上一个工作表的B5:B50单元格值。我该怎么做 例如: 在表1中,如果我在单元格B5中输入值2,它将用附加到CONST TXT的文本值填充D5和E5。我想在表2中做同样的事情,但是用户没有在表2中的B5中再次输入值,而是从上一张表中获取B5的值,然后填充D5和E5 表2 B值需要在表1中B值更新后立即更新 Private Sub Worksheet_Cha

更新的问题

我在第1页上附加了一个VBA脚本,它使用B5:B50单元格值用预定义文本填充相邻列。如果我想在另一个工作表中使用此脚本,但仍然使用上一个工作表的B5:B50单元格值。我该怎么做

例如:

在表1中,如果我在单元格B5中输入值2,它将用附加到CONST TXT的文本值填充D5和E5。我想在表2中做同样的事情,但是用户没有在表2中的B5中再次输入值,而是从上一张表中获取B5的值,然后填充D5和E5

表2 B值需要在表1中B值更新后立即更新

Private Sub Worksheet_Change(ByVal Target As Range)
    Const NUM_COLS As Long = 5
    Const TXT = "• Course Name:" & vbNewLine & _
              "• No. Of Slides Affected:" & vbNewLine & _
              "• No. of Activities Affected:"

    Dim rng As Range, i As Long, v

    If Target.CountLarge <> 1 Then Exit Sub

    If Not Intersect(Target, Me.Range("B5:B50")) Is Nothing Then

        Set rng = Target.Offset(0, 2).Resize(1, NUM_COLS) 'range to check
        v = Target.Value

        If IsNumeric(v) And v >= 1 And v <= NUM_COLS Then
            For i = 1 To rng.Cells.Count
                With rng.Cells(i)
                    If i <= v Then
                        'Populate if not already populated
                        If .Value = "" Then .Value = TXT
                    Else
                        'Clear any existing value
                        .Value = ""
                    End If
                End With
            Next i
        Else
            rng.Value = "" 'clear any existing content
        End If

    End If

End Sub

Private子工作表\u更改(ByVal目标作为范围)
Const NUM_COLS长度=5
Const TXT=“•课程名称:”&vbNewLine&_
“•受影响的幻灯片数量:”&vbNewLine&_
“•受影响的活动数量:”
尺寸rng作为范围,i作为长度,v
如果Target.CountLarge 1,则退出Sub
如果不相交(Target,Me.Range(“B5:B50”))则为零
设置rng=Target.Offset(0,2)。调整(1,NUM_COLS)范围以进行检查
v=目标值

如果我理解为IsNumeric(v)和v>=1和v,那么您需要类似于偏移量的等价物,它在不同的工作表上返回一个范围。有两种选择

您可以使用
Range.AddressLocal
,它返回
Range
的地址,而不使用任何工作表或工作簿限定符,然后将其应用于其他工作表:

'返回rng右侧的单元格1,但在Sheet2上
工作表(“表2”).范围(rng.偏移量(0,1).地址本地)
或者,您可以获取范围的
属性,并在其他工作表的
单元格中使用它们:

'返回rng右侧的单元格1,但在Sheet2上
工作表(“表2”)单元格(参考行、参考列+1)
要在代码中使用它,我认为这只是一个替换的例子

如果.Value=”“那么.Value=TXT

如果工作表(“Sheet2”).Range(.Offset(0,1).AddressLocal.Value=”“则工作表(“Sheet2”).Range(.Offset(0,1).AddressLocal.Value=TXT
替换

.Value=“”

工作表(“Sheet2”).Range(.Offset(0,1).AddressLocal.Value=“”

(或使用
单元格
结构进行相同操作)。

下面将
目标值
复制到
表2中的同一单元格中

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)

    Dim ws1 As Worksheet, ws2 As Worksheet

    Set ws2 = ThisWorkbook.Worksheets("Sheet2")

    If Not Intersect(Target, Me.Range("B5:B50")) Is Nothing And Target.Count = 1 Then
        With Target
            ws2.Cells(.Row, .Column).Value = .Value
        End With
    End If

End Sub

表1当前正在使用上述脚本。因此,当我在B5:B50中输入一个值时,它会用预定义的文本填充同一行中的单元格。我想做的是,当B5:B50填充到工作表1中时,它会用预定义文本填充同一行中的单元格,但在工作表2中会更新问题,以更好地澄清我面临的问题