Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.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 如何将此数组代码正确输出到我的消息框中?_Excel_Vba - Fatal编程技术网

Excel 如何将此数组代码正确输出到我的消息框中?

Excel 如何将此数组代码正确输出到我的消息框中?,excel,vba,Excel,Vba,我有一个电子表格,用户可以与之交互,以指定运行某些宏所需打开的4个不同文件的文件路径。代码包括检查他们输入的文件路径是否有效(运行良好)。但是,我想做的是,如果有任何东西不起作用,就会出现一个消息框,然后告诉用户哪一个不起作用 我的代码确实做到了这一点(尽管我认为这是一种非常复杂的方式),但是由于数组被设置为有4个值,这意味着如果最终文件不存在,它将在消息框中向下4行开始文本,而不是在顶部 我想做的是,我相信,ReDim数组只包含丢失的文件量,这样MsgBox就不会在第一句下面3行空行。我有点明

我有一个电子表格,用户可以与之交互,以指定运行某些宏所需打开的4个不同文件的文件路径。代码包括检查他们输入的文件路径是否有效(运行良好)。但是,我想做的是,如果有任何东西不起作用,就会出现一个消息框,然后告诉用户哪一个不起作用

我的代码确实做到了这一点(尽管我认为这是一种非常复杂的方式),但是由于数组被设置为有4个值,这意味着如果最终文件不存在,它将在消息框中向下4行开始文本,而不是在顶部

我想做的是,我相信,
ReDim
数组只包含丢失的文件量,这样
MsgBox
就不会在第一句下面3行空行。我有点明白了,但我就是不能让它正常工作,现在我被难倒了

Sub Open_month_0()

On Error GoTo ErrHand

ThisWorkbook.ActiveSheet.Calculate

    Dim i As String
    Dim j As String
    Dim k As String
    Dim l As String
    Dim m As String
    Dim n As String
    Dim o As String
    Dim p As String
    Dim arr(4) As Variant
    Dim File_Missing As Integer

    'Used as a counter to prompt either an error or successful result
    File_Missing = 0

        i = Range("LUX_Full_file_path")
        j = Range("LUX_Full_file_name")

        k = Range("JUP_Full_file_path_M")
        l = Range("JUP_Full_file_name_M")

        m = Range("JUP_Full_file_path_Q")
        n = Range("JUP_Full_file_name_Q")

        o = Range("JUP_Full_file_path_A")
        p = Range("JUP_Full_file_name_A")

        'The if not's check to see if the file path is valid. If it isn't, gets added to array and File_missing begins
        If Not Dir(i, vbDirectory) = vbNullString Then
            Workbooks.Open (i)
            Windows(j).Visible = False
        Else
            arr(1) = "Lux file"
            File_Missing = File_Missing + 1
        End If

        If Not Dir(k, vbDirectory) = vbNullString Then
            Workbooks.Open (k)
            Windows(l).Visible = False
        Else
            arr(2) = "Monthly file"
            File_Missing = File_Missing + 1
        End If

        If Not Dir(m, vbDirectory) = vbNullString Then
            Workbooks.Open (m)
            Windows(n).Visible = False
        Else
            arr(3) = "Quarterly file"
            File_Missing = File_Missing + 1
        End If

        If Not Dir(o, vbDirectory) = vbNullString Then
            Workbooks.Open (o)
            Windows(p).Visible = False
        Else
            arr(4) = "Annual file"
            File_Missing = File_Missing + 1
        End If

        'Basic error handling procedure that retains function.
        If File_Missing > 0 Then
            MsgBox ("The following files could not be found. Please check the file paths and try again" & vbCrLf & Join(arr, vbCrLf))
        Else
            MsgBox "Files opened successfully."
        End If

Exit Sub

ErrHand: MsgBox "There has been a critical error with opening the chosen workbooks. If the problem persists, please contact your administrator for assistance."

End Sub
使用图片编辑:

消息框当前输出的屏幕截图

我希望消息框的外观如何

由于您以后只需使用该数组
连接它
,因此您也可以使用
字符串
变量
MyMissingFiles
代替该数组并附加文件名

如果您对这个数字不感兴趣,您甚至不需要计算
File\u Missing
中的文件数

Dim MyMissingFiles As String

If Not Dir(i, vbDirectory) = vbNullString Then
    Workbooks.Open (i)
    Windows(j).Visible = False
Else
    MyMissingFiles = MyMissingFiles & vbCrLf & "Lux file"
End If

' … all the others accordingly here …

If MyMissingFiles <> vbNullString Then
    MsgBox ("The following files could not be found. Please check the file paths and try again" & MyMissingFiles)
Else
    MsgBox "Files opened successfully."
End If
Dim MyMissingFiles作为字符串
如果不是Dir(i,vbDirectory)=vbNullString,则
作业手册.打开(i)
视窗(j).可见=假
其他的
MyMissingFiles=MyMissingFiles&vbCrLf&“Lux文件”
如果结束
“……因此,这里的所有其他人…
如果MyMissingFiles vbNullString,则
MsgBox(“找不到以下文件。请检查文件路径并重试”&MyMissingFiles)
其他的
MsgBox“文件已成功打开。”
如果结束

您是否尝试过重拨保留arr(FileMissing)?其次,编辑您的帖子以显示MsgBox的问题。很好的提示是使用Win+Shift+S来捕获该区域,然后单击帖子中的“添加图像”按钮,然后粘贴即可!谢谢你的提示Badja-现在添加了截图!我不知道我能做到。我会给你一个建议,现在试试看,你的牙齿工作得很好!非常感谢你。看来我只是把事情复杂化了,一旦我有了一个想法,并磨练了它!