一次显示一列

时间:2016-03-30 16:29:18

标签: excel vba

我想知道这是否可行,以及我如何做到这一点。 我有一张2张工作簿。 Sheet2有多个列,包含50个不同的记录。 sheet1我希望有一个播放按钮或运行按钮当我点击“播放/运行”它它将有一列,并且一列将显示sheet2中每列的记录,直到没有更多的列表格sheet2。此外,在循环到下一列之前,显示屏将有5秒的间隔。

我发现了如何进行时间间隔而不是显示

'time interval 
Application.Wait Now + TimeSerial(0, 0, 5)

'displaying i have been using copy/paste but it does not work. 

提前致谢

2 个答案:

答案 0 :(得分:1)

将这些过程添加到VBA模块。然后添加一个按钮或文本框/等。到Sheet1,右键单击形状,然后选择“分配宏”,然后选择MyButtonClick过程。这会将宏与按钮相关联。

然后,您只需循环遍历列并复制/粘贴,如下所示:

Sub MyButtonClick()
Dim ws1 as Worksheet, ws2 as Worksheet
Dim cols as Range, c as Range

Set ws1 = ThisWorkbook.Sheets("Sheet1")
Set ws2 = ThisWorkbook.Sheets("Sheet2")

Set cols = ws2.Range("A1:G50")  '## Modify as needed

For Each c in cols.Columns

    c.Copy Destination:=ws1.Range("A1")  '## Puts the column in Sheet1, Column A
    Call WaitForIt(5)
Next

End Sub

Sub WaitForIt(seconds as Long)

    Application.Wait Now + TimeSerial(0, 0, seconds)

End Sub

答案 1 :(得分:0)

有点极简的VBA方法:

假设sheet2看起来像:

enter image description here

然后在sheet1中创建一个名为range record的单元格(在这种情况下为单元格A2):

enter image description here

在B栏中输入公式:

=IF(NOT(ISBLANK(INDIRECT("Sheet2!R"&ROW()&"C"&record,FALSE))),INDIRECT("Sheet2!R"&ROW()&"C"&record,FALSE),"")

并将其复制为与工作表2中最长记录一样多的行

然后 - VBA部分可以只有一个循环,其中包含语句

Range("record").Value = i

i循环包含记录的列号)。电子表格公式负责提取正确的值。