我在工作簿中有一组工作表。我在其中一张纸上的特定列中有纸张名称。此工作簿将显示在监视器/仪表板上。有没有办法让我可以在表格中循环并逐一显示它们。
例如,这本书为2张。 Sheet1和Sheet2。当我运行宏时,Sheet1应该在屏幕上显示5秒钟,然后Sheet2显示5秒钟。然后是Shhet1(循环)。
我可以添加时间延迟和循环,但是无法更改工作表的显示。我尝试了以下方法,这不起作用
Application.ScreenUpdating = True
Worksheets("Sheet1").Activate
Worksheets("Sheet1").Select
更新:
感谢所有人的回复。我已经尝试了所有,但无法让它工作。当我运行代码时,工作表显示不会改变。例如,我的工作簿有三张Sheet1,Sheet2和Sheet3,我写代码显示sheet1 10秒,sheet2 10秒,sheet3 10秒,执行期间excel卡在我开始的工作表上宏30秒,并显示最终的表(sheet3)。不确定这是否是因为代码/应用程序中的某些设置。
无论如何,由于这不起作用,我决定将图表从excel复制到powerpoint(通过vba)并使用ppt显示在仪表板上。我使用了以下链接中提供的代码。
再次感谢您的建议
答案 0 :(得分:2)
你可以试试这个。根据计时器设置(此处 2秒),宏是无限循环到3张(可以设置为任意数字)。您可以通过每个工作表加载的代码插入一个msg./validation框,询问用户是否要继续改组或停止当前选择(这不是用户友好的)。或者,您可以创建一个新工作表(即MacroKeys)并为混洗设置验证值(是/否)(请检查下面的代码)。最后一步是在每个工作表上添加2个按钮,以创建一个所谓的UI来调用宏[Shuffle]和[Stop]。 无论如何你应该使用 [Application.OnTime alertTime,“宏名称”] 功能
Sub Show_Sheet1()
Dim MacroKeys As Worksheet: Set MacroKeys = Sheets("MacroKeys")
Dim Sh1 As Worksheet: Set Sh1 = Sheets("Sheet1")
Dim Sh2 As Worksheet: Set Sh2 = Sheets("Sheet2")
Dim Sh3 As Worksheet: Set Sh3 = Sheets("Sheet3")
MacroKeys.Range("A1") = "Yes"
' [...]
Sh1.Visible = True
Sh1.Select
Sh2.Visible = False
Sh3.Visible = False
' [...]
If MacroKeys.Range("A1") = "Yes" Then
alertTime = Now + TimeValue("00:00:02")
Application.OnTime alertTime, "Show_Sheet2"
End IF
End Sub
Sub Show_Sheet2()
Dim MacroKeys As Worksheet: Set MacroKeys = Sheets("MacroKeys")
Dim Sh1 As Worksheet: Set Sh1 = Sheets("Sheet1")
Dim Sh2 As Worksheet: Set Sh2 = Sheets("Sheet2")
Dim Sh3 As Worksheet: Set Sh3 = Sheets("Sheet3")
MacroKeys.Range("A1") = "Yes"
' [...]
Sh2.Visible = True
Sh2.Select
Sh1.Visible = False
Sh3.Visible = False
' [...]
If MacroKeys.Range("A1") = "Yes" Then
alertTime = Now + TimeValue("00:00:02")
Application.OnTime alertTime, "Show_Sheet3"
End IF
End Sub
Sub Show_Sheet3()
Dim MacroKeys As Worksheet: Set MacroKeys = Sheets("MacroKeys")
Dim Sh1 As Worksheet: Set Sh1 = Sheets("Sheet1")
Dim Sh2 As Worksheet: Set Sh2 = Sheets("Sheet2")
Dim Sh3 As Worksheet: Set Sh3 = Sheets("Sheet3")
MacroKeys.Range("A1") = "Yes"
' [...]
Sh3.Visible = True
Sh3.Select
Sh1.Visible = False
Sh2.Visible = False
' [...]
If MacroKeys.Range("A1") = "Yes" Then
alertTime = Now + TimeValue("00:00:02")
Application.OnTime alertTime, "Show_Sheet1"
End IF
End Sub
Sub Stop_Shuffling()
Dim MacroKeys As Worksheet: Set MacroKeys = Sheets("MacroKeys")
'edit !!!
MacroKeys.Range("A1").Value = "No"
End Sub
请注意!您必须添加新工作表并将其命名为“MacroKeys”。你可以隐藏它并留下它。 注意!要添加分配了宏的按钮:按Alt + N,+ SH并选择形状。然后,右键单击形状>分配宏(并选择相应的宏)。 可选的!使用Alt + W,+ F,+ R阻止顶行,并将按钮height =保持为第1行高度。 注意!您不希望隐藏工作表只需将.Visible = false / true 注释掉,并将选择替换为激活。你会搞清楚的!希望它有所帮助!
答案 1 :(得分:2)
最好使用工作簿名称后跟工作表名称,然后使用范围以避免混淆。即使打开了多个工作簿,此代码也能正常工作。
Sub changeSh()
'Application.ScreenUpdating = True its true by default
Dim wkb As Workbook
Set wkb = ThisWorkbook
wkb.Sheets("Sheet1").Activate
Application.Wait Now + TimeSerial(0, 0, 5)
wkb.Sheets("Sheet2").Activate
End Sub
答案 2 :(得分:1)
Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Sub changeSh()
While (True)
Sheets(1).Activate
'Use your method to add time delay here
'Sleep 5000
Sheets(2).Activate
'Use your method to add time delay here
'Sleep 5000
Wend
End Sub
答案 3 :(得分:0)
激活工作表是通过Sheet.Activate方法完成的。 试试这个
Application.ScreenUpdating = True
Worksheets("Sheet1").Activate Worksheets("Sheet1").Select
Worksheets("Sheet1").Activate Worksheets("Sheet1").Activate