我怎样才能 link 命令按钮的代码?

How Can I link the codes to Command Button?

我有一部分宏代码在更改单元格值下工作。但我想将它们替换为链接命令按钮+从已关闭的工作簿中获取数据。有人可以帮我重新编辑它们吗?

感谢您的帮助!

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Chck As Integer, Cnt As Integer
    Dim Save As String
    Dim Subjt As Integer
    
    If Not Intersect(Range("A1"), Target) Is Nothing And Not Target = "" Then
        With Workbooks("Data2.xlsm").Worksheets("Datas")
            Application.EnableEvents = False
            Worksheets("Sheet1").Cells.Clear
            For Chck = 2 To .Cells(Rows.Count, "C").End(xlUp).Row
                Select Case .Cells(Chck, "C")
                    Case "Number"
                        Subjt = Chck
                    Case ""
                        If Save <> "" Then
                            Save = "C" & Subjt & ":Q" & Subjt & Save
                            .Range(Save).Copy
                            Cnt = Worksheets("Sheet1").Range("A" & Rows.Count).End(xlUp).Row
                            If Cnt > 1 Then Cnt = Cnt + 2
                            Worksheets("Sheet1").Range("A" & Cnt).PasteSpecial
                            Save = ""
                        End If
                    Case Target
                        If .Cells(Chck, "B") = "Number" Then Save = Save & ", C" & Chck & ":Q" & Chck
                End Select
            Next
            Application.EnableEvents = True
        End With
    End If

End Sub

仅将 Private Sub 更改为 Sub,并将宏分配给您的相关按钮。

首先对于工作簿,您必须创建一个 excel object 以在其中获取关闭的工作簿。

在常规模块中试试这个:

编辑:做了一些修正

Sub CopyDataValues()

    Dim Chck As Long, Cnt As Long
    Dim Save As String
    Dim Subjt As Long, valA1
    Dim ws1 As Worksheet, wsData As Worksheet
    
    Set ws1 = ThisWorkbook.Worksheets("Sheet1")
    Set wsData = Workbooks("Data2.xlsm").Worksheets("Datas")
    
    Cnt = ws1.Range("A" & Rows.Count).End(xlUp).Row
    Cnt = Cnt + 2
    
    valA1 = ws1.Range("A1").Value
    
    If Len(valA1) > 0 Then
        With wsData
            Application.EnableEvents = False
            'ws1.Cells.Clear
            For Chck = 2 To .Cells(Rows.Count, "C").End(xlUp).Row
                Select Case .Cells(Chck, "C")
                    Case "NUMBER"
                        Subjt = Chck
                    Case ""
                        If Save <> "" Then
                            Save = "C" & Subjt & ":Q" & Subjt & Save
                            .Range(Save).Copy ws1.Range("A" & Cnt)
                            Cnt = Cnt + 2
                            Save = ""
                        End If
                    Case valA1
                        If .Cells(Chck, "B") = "REAL" Then
                            Debug.Print "matched " & valA1 & " on row " & Chck
                            Save = Save & ", C" & Chck & ":Q" & Chck
                        End If
                End Select
            Next
            Application.EnableEvents = True
        End With
    End If

End Sub