Excel 使用宏在多张图纸上更改单元格中的值

Excel 使用宏在多张图纸上更改单元格中的值,excel,vba,button,Excel,Vba,Button,我对VBA非常陌生,与我在这里读到的内容相比,我对Excel的了解有限。我的宏有问题。我有一本4页的工作簿。每个工作表都有基本的命令按钮,可以发出一个简单的宏(即从一个单元格值减去1,在另一个单元格值中添加1)。我遇到的问题是为其中3个按钮创建宏代码。这些按钮需要发出类似的命令,但是我需要它们调整所有工作表中的“选择单元格”值,而不仅仅是按钮所在的活动工作表 这3个特定的命令按钮位于“表4”中。这些单元格位于所有4张工作表中。我是否可以创建一个宏(通过单击单个按钮激活)来跨所有4张工作表工作 按

我对VBA非常陌生,与我在这里读到的内容相比,我对Excel的了解有限。我的宏有问题。我有一本4页的工作簿。每个工作表都有基本的命令按钮,可以发出一个简单的宏(即从一个单元格值减去1,在另一个单元格值中添加1)。我遇到的问题是为其中3个按钮创建宏代码。这些按钮需要发出类似的命令,但是我需要它们调整所有工作表中的“选择单元格”值,而不仅仅是按钮所在的活动工作表

这3个特定的命令按钮位于“表4”中。这些单元格位于所有4张工作表中。我是否可以创建一个宏(通过单击单个按钮激活)来跨所有4张工作表工作

按钮1-需要在第4页单元格g10的值上加1 -但也要从第2页单元格c4和c7的值中减去1
-第3页单元格c6的值减去1

其他的按钮都是这样的。我希望这足以说明问题。我目前正在阅读有关Excel和VBA的书籍,但由于非常忙,所以速度很慢。非常感谢您的帮助。先谢谢你。霜冻:)

考虑:

Sub buttton1()
    Dim r1 As Range, r2 As Range, r3 As Range
    Set r1 = Sheets("Sheet4").Range("G10")
    Set r2 = Sheets("Sheet2").Range("C4,C7")
    Set r3 = Sheets("Sheet3").Range("C6")

    r1 = r1 + 1
    r2 = r2 - 1
    r3 = r3 - 1
End Sub

您只需要为每个按钮创建一个事件,然后在子例程中,在操作包含的单元格时,为工作表命名。只要做你需要的改变。我展示了几种不同的方法来做同样的事情,这样在将来,你可以根据自己的需要进行调整。有时,您会想具体地命名范围。有时,您希望它由其他代码或循环动态创建

为按钮单击设置事件处理程序。

Private Sub Button1_Click()
    Call ChangeVals
End Sub
Private Sub ChangeVals()
'Using Range(ColRow)
    Sheets("Sheet4").Range("G10") = Sheets("Sheet4").Range("G10").Value + 1 

'Using Cells(rowNumber, ColLetter)  ----This is good if the column won't change.
    Sheets("Sheet2").Cells(4,"C") = Sheets("Sheet2").Cells(4,"C").Value - 1
'Using Cells(rowNumber, ColNumber)  ----This is my preferred way, loopable with numbers.
    Sheets("Sheet2").Cells(7,3) = Sheets("Sheet2").Cells(7,3).Value - 1
'Lastly
    Sheets("Sheet3").Range("C6") = Sheets("Sheet3").Range("C6").Value - 1

End Sub
您需要从每个按钮单击事件调用该子按钮。

Private Sub Button2_Click()     'Repeat for the other two.
    Call ChangeVals
End Sub
这是更改值的实际子项。

Private Sub Button1_Click()
    Call ChangeVals
End Sub
Private Sub ChangeVals()
'Using Range(ColRow)
    Sheets("Sheet4").Range("G10") = Sheets("Sheet4").Range("G10").Value + 1 

'Using Cells(rowNumber, ColLetter)  ----This is good if the column won't change.
    Sheets("Sheet2").Cells(4,"C") = Sheets("Sheet2").Cells(4,"C").Value - 1
'Using Cells(rowNumber, ColNumber)  ----This is my preferred way, loopable with numbers.
    Sheets("Sheet2").Cells(7,3) = Sheets("Sheet2").Cells(7,3).Value - 1
'Lastly
    Sheets("Sheet3").Range("C6") = Sheets("Sheet3").Range("C6").Value - 1

End Sub

提供的另一个答案也将取代此子变更。要点是,如果您有相同的代码从许多地方被触发,您将希望使用该代码一次,然后调用它。如果您需要更改“ChangeVals”,它将在同一个位置完成。感谢您的快速响应。虽然代码非常相似,但三个按钮的代码都不同。所以如果我使用你的方法PJ,我不需要创建三个不同的sub吗?是的。如果它们都不同,我会为每一个单独的事件。跳过调用它们,只需在按钮事件中执行您想要的操作,就像Gary的学生发布的那样。我要离开你的声明:“其他的按钮都和这个一模一样。”在另一张纸条上。我刚才的评论就是针对这种情况。在其他情况下,我会研究将参数传递到子函数或函数中。搜索一下,你会得到很多好的信息。假设你有相同的东西,除了一点不同,那将是一个很好的时机让sub接受()中的传入参数,并使其成为更改的部分。感谢您对Gary的学生的快速回复。我先尝试了你的方法,因为它与我尝试的方法相似。当我尝试执行时,收到-运行时错误“9”下标超出范围。@Frosty请更改工作表名称以匹配实际工作表名称。我找到了您的解决方案出现错误的地方。我用了工作表的名字而不是代号。我不得不使用代码名,因为我已经以excel不喜欢的方式标记了工作表名称。稍后我会把它换回来。谢谢你的帮助。作为一个新手,这引起了很多挫折。我创建的过程是尝试为其他人简化工作簿。再次感谢。两个答案的关键是你必须说明单元格在哪一张纸上。只需确定您正在更改的内容,然后声明更改。”Sheet(“SHEETNAME”).Range(“A1”).Value='是的,你说得对,PJ。我很感激收到的两个答复。他们都让我意识到我犯了一个错误,也让我知道如何正确地实现我的要求。我非常尊重那些在工作之外帮助和教导他人的人。继续努力。再次谢谢你,弗罗斯蒂。