Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 动态按钮-运行时错误1004-无法获取工作表类的按钮属性_Vba_Excel - Fatal编程技术网

Vba 动态按钮-运行时错误1004-无法获取工作表类的按钮属性

Vba 动态按钮-运行时错误1004-无法获取工作表类的按钮属性,vba,excel,Vba,Excel,您好,我收到了“运行时错误1004-无法获取工作表类的按钮属性”,它来自底部附近的行Set b=Worksheets(“表单”)。按钮(Application.Caller)'引用按钮 我基本上是在复制数据透视表完全展开字段旁边的动态按钮旁边的列中的数据。我让这些按钮看起来很好,我只需要它们在单击某个按钮时将相邻单元格中的数据复制到另一个工作表中的列表中 Sub buttonGenerator() Dim btn As Button Application.ScreenUpdating = F

您好,我收到了“运行时错误1004-无法获取工作表类的按钮属性”,它来自底部附近的行
Set b=Worksheets(“表单”)。按钮(Application.Caller)'引用按钮

我基本上是在复制数据透视表完全展开字段旁边的动态按钮旁边的列中的数据。我让这些按钮看起来很好,我只需要它们在单击某个按钮时将相邻单元格中的数据复制到另一个工作表中的列表中

Sub buttonGenerator()

Dim btn As Button
Application.ScreenUpdating = False
ActiveSheet.Buttons.Delete
Dim t As Range
Dim size As Long

size = Worksheets("Form").PivotTables("Pivottable1").TableRange2.Rows.Count 'returns number of rows in expanding pivot table

For i = 2 To size Step 1 'cycles through from row 2 to last row of pivot table
    If Not IsEmpty(Worksheets("Form").Range(Cells(i, 4), Cells(i, 4))) Then 'only shows button if last col of pivot table has data
      Set t = Worksheets("Form").Range(Cells(i, 5), Cells(i, 5))
      Set btn = Worksheets("Form").Buttons.Add(t.Left, t.Top, t.Width, t.Height)
      With btn
        .OnAction = "btnS" 'call btnS subroutine
        .Caption = "Button" & i 'button label
        .Name = "Button" & i 'button name
        End With
    End If

Next i

Application.ScreenUpdating = False

End Sub


Public Sub btnS()

Dim b As Object
Dim r As Integer
Dim c As Integer

Set b = Worksheets("Form").Buttons(Application.Caller) 'references button
With b.TopLeftCell 'returns row and col of button pushed
r = .row
c = .col
End With

origin = Range(r, c)
dest = Worksheets("Form Output").Range(Cells(1, 1))
dest.Value = origin.Value

End Sub
添加以下行:

 Option Explicit      ' :)
 Dim origin As Range
 Dim dest As Range
 c = .colUMN
 ...
 SET origin = Worksheets("Form").Cells(r, c)
 SET dest = Worksheets("Form Output").Cells(1, 1)
更正这些行:

 Option Explicit      ' :)
 Dim origin As Range
 Dim dest As Range
 c = .colUMN
 ...
 SET origin = Worksheets("Form").Cells(r, c)
 SET dest = Worksheets("Form Output").Cells(1, 1)
一些建议:您可以使用
.Cells(i,4)
而不是
.Range(Cells(i,4),Cells(i,4))