1

我在工作簿中有一组工作表。我在其中一张纸的特定列中有纸的名称。该工作簿将显示在监视器/仪表板上。有没有一种方法可以让我循环浏览这些床单并一张一张地展示它们。

例如,这本书为 2 张。工作表 1 和工作表 2。当我运行宏时,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 在仪表板上显示。我使用了以下链接中提供的代码。

再次感谢您的建议

http://peltiertech.com/Excel/XL_PPT.html

4

4 回答 4

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
于 2013-10-04T07:17:57.850 回答
2

你可以试试这个。宏是通过 3 张纸的无限循环(可以设置为任何数字),基于计时器设置(此处为2 秒)。您可以在每个工作表加载时通过代码插入一个 msg./validation 框,以询问用户是否要继续改组或停止当前选择(这不是那么用户友好)。或者,您可以创建一个新工作表(即 MacroKeys)并设置洗牌的验证值(是/否)(检查下面的代码)。最后一步是在每个工作表上添加 2 个按钮以创建一个所谓的 UI 来调用宏 [Shuffle] 和 [Stop]。无论如何,您应该使用[Application.OnTime alertTime, "macro name"]函数

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 阻止顶行并将按钮高度 = 保持在第 1 行的高度。笔记!如果您不想隐藏工作表,只需用 '注释掉 .Visible = false/true并将Select替换为Activate。你会想出来的!希望能帮助到你!

于 2013-10-04T06:56:56.737 回答
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
于 2013-10-04T05:58:47.473 回答
0

激活工作表是通过 Sheet.Activate 方法完成的。尝试这个

Application.ScreenUpdating = True
Worksheets("Sheet1").Activate Worksheets("Sheet1").Select
Worksheets("Sheet1").Activate Worksheets("Sheet1").Activate
于 2013-10-04T05:39:22.527 回答