Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.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
如何允许用户使用excel vba查看工作表_Excel_Vba - Fatal编程技术网

如何允许用户使用excel vba查看工作表

如何允许用户使用excel vba查看工作表,excel,vba,Excel,Vba,我的宏生成一系列60列宽的报告。我希望用户能够在打印报告或转到宏的另一部分之前查看屏幕上的报告 有没有办法设置一个滚动区域,让用户查看它,然后让“响应消息”框继续例行程序 我试过这个: Sub reviewdata() ' Application.ScreenUpdating = False Worksheets("Fin. Stmts").ScrollArea = "" Application.Goto Reference:="monthlydata" ActiveCell.Offset(

我的宏生成一系列60列宽的报告。我希望用户能够在打印报告或转到宏的另一部分之前查看屏幕上的报告

有没有办法设置一个滚动区域,让用户查看它,然后让“响应消息”框继续例行程序

我试过这个:

Sub reviewdata()

' Application.ScreenUpdating = False
Worksheets("Fin. Stmts").ScrollArea = ""

Application.Goto Reference:="monthlydata"
ActiveCell.Offset(2, 1).Select
ActiveWindow.FreezePanes = True

Worksheets("data. Stmts").ScrollArea = "monthlydata"

If MsgBox("End Review", vbOKOnly) = vbOK Then
End If
ActiveWindow.FreezePanes = False
Worksheets("data. Stmts").ScrollArea = ""

End Sub
问题是,一旦执行if,then语句,用户就无法在工作表中移动,因为例程需要响应才能继续

非常感谢您的任何见解。
谢谢。

这有点笨拙,但它能满足你的需要。而不是使用MsgBox use and InputBox作为一个范围,该范围将允许用户单击并滚动,如您所述。无论何时单击OK/cancel,宏都将继续

因此,可能将MsgBox代码行替换为

Dim boom As Variant
boom = Application.InputBox("When you're done hit ""Cancel""... (""OK"" might lead to problems...)", _
    "Scroll around and look at stuff", _
        , , , , , 8)

我建议改为使用两个宏,但这可能满足您的需要。

您可以使用虚拟变量:

Dim dummy As Range

Set dummy = Application.InputBox("Scroll and Check. After That Select Ok!", "This is Specially created so that you can", Default:="A1", Type:=8)

输入框的范围允许您在后台滚动。继续按中的
Ok
,不会有任何更改,代码将按当前运行的方式运行

您可以在一个小的userform中显示该消息,并在
modeless
状态下调用该userform,如下所示

UserForm1.Show vbModeless
通过这种方式,您将能够在工作表中导航,同时仍显示该消息

您还可以将其余代码放入按钮单击事件中,如下所示

Option Explicit

Private Sub CommandButton1_Click()
    ActiveWindow.FreezePanes = False
    Worksheets("data. Stmts").ScrollArea = ""
    Unload Me
End Sub

为什么不用工作表上的按钮将其分成两个宏来执行步骤2?例如,第一个宏生成报告,然后用户点击执行打印/最后步骤的按钮?呵呵。。我也做了同样的工作。您可能需要使用
Set
,因为
8
是范围输入。您的是第一个,没有人复制任何人的:)谢谢。我们将尝试这个建议,看看它是如何运作的。