ByRef参数类型不匹配:

时间:2013-06-27 13:44:04

标签: excel-vba excel-addins byref vba excel

在Excel 97中运行fileconv.xla加载项时,ByRef参数类型不匹配。

我需要这个工作的原因是因为我需要将~100个Lotus 1-2-3文件从wk *转换为xls。

编译时在VBA中突出显示的术语在分隔代码中用双星号标记:

Workbooks.Open Filename:=PathFile(**p_FileInfo**(i, 3), p_FileInfo(i, 4)), ReadOnly:=True, Password:="password"
Sub FinishSub()


Dim TestOpen As Boolean
Dim DirDest As String

Application.ScreenUpdating = False
CreateDir "wzkfpbdxwzkfpbdxwzkfpbdx"
If Not (DirCreated) Then
    Application.ScreenUpdating = True
    Exit Sub
End If

If Len(dlg.DropDowns("DriveDD").List(dlg.DropDowns("DriveDD").ListIndex)) <> 2 Then
    DirDest = Right(dlg.DropDowns("DriveDD").List(dlg.DropDowns("DriveDD").ListIndex), _
                Len(dlg.DropDowns("DriveDD").List(dlg.DropDowns("DriveDD").ListIndex)) - 3) & _
                Right(FullPath, Len(FullPath) - 2)
Else
    DirDest = dlg.DropDowns("DriveDD").List(dlg.DropDowns("DriveDD").ListIndex) & _
                Right(FullPath, Len(FullPath) - 2)
End If

Set wbResult = Workbooks.Add
ActiveCell.Value = LookupString("File")
Range("B1").Value = LookupString("ConvertedTo")
Range("C1").Value = LookupString("Result")
Range("D1").Value = LookupString("Reason")
Range("A2").Select

k = 0
For i = 1 To CountFile
    p_FileInfo(i, 5) = DirDest
    If p_FileInfo(i, 7) = "yes" Then
        k = k + 1
        On Error GoTo ErrorOpen
            Success = "True"
            ErrorMsg = ""
            SetWaitCursor True
            If TestIfWorkbookIsOpen(p_FileInfo(i, 4)) Then Workbooks(p_FileInfo(i, 4)).Close saveChanges:=False
            Application.StatusBar = LookupString("Opening") & p_FileInfo(i, 4) & "(" & k & "/" & CountFileToConvert & ")"
            Application.DisplayAlerts = False


            Workbooks.Open Filename:=PathFile(**p_FileInfo**(i, 3), p_FileInfo(i, 4)), ReadOnly:=True, Password:="password"



        On Error GoTo 0
        On Error Resume Next
            Application.StatusBar = LookupString("Saving") & p_FileInfo(i, 6) & "(" & k & "/" & CountFileToConvert & ")"
            ' Check if the XLS filename already exists.
            FindFileName
            Workbooks(p_FileInfo(i, 4)).SaveAs Filename:=PathFile(p_FileInfo(i, 5), p_FileInfo(i, 6)), FileFormat:=xlNormal
            'Application.StatusBar = False
            Workbooks(p_FileInfo(i, 4)).Close saveChanges:=False
            Workbooks(p_FileInfo(i, 6)).Close saveChanges:=False
            SaveIsSuccess Success
            SetWaitCursor False
        On Error GoTo 0
    End If
Next i
SaveIsSuccess "End"
Application.StatusBar = False
Application.ScreenUpdating = True
Exit Sub

ErrorOpen:   ' Error-handling routine.
Select Case Err ' Evaluate Error Number.
    Case 18
        TestMsgBox = MsgBox(LookupString("UserInterruption", "AlertTable"), vbYesNo)
        If TestMsgBox = vbYes Then
            On Error Resume Next
                Application.StatusBar = False
                Workbooks(p_FileInfo(i, 4)).Close saveChanges:=False
                Workbooks(p_FileInfo(i, 6)).Close saveChanges:=False
                Application.ScreenUpdating = True
                Exit Sub
            On Error GoTo 0
        Else
            Resume Next
        End If
    Case 1004
        SetWaitCursor False
        Set dlg = ThisWorkbook.DialogSheets("Password")
        dlg.DialogFrame.Characters.Text = p_FileInfo(i, 4)
        If TryAgain = False Then
            dlg.TextBoxes("PassTB").Text = LookupString("IsProtected", "AlertTable")
            dlg.EditBoxes("PassEB").Text = ""
        Else
            dlg.TextBoxes("PassTB").Text = LookupString("InvalidPassword", "AlertTable")
        End If
        ShowTest = dlg.Show
        Select Case ShowTest
            Case True
                Resume
            Case False
                Success = "False"
                ErrorMsg = Error()
                Resume Next
        End Select
        SetWaitCursor True
        End Select
  Application.StatusBar = False
End Sub

1 个答案:

答案 0 :(得分:0)

我假设你有这个

Public Function PathFile(ByRef a As String, ByRef b As String)
PathFile = "C:\Bla.txt"
End Function

p_FileInfo是一个数组,所以在这种情况下你必须像这样调用函数:

Workbooks.Open Filename:=PathFile(CStr(p_FileInfo(i, 3)), CStr(p_FileInfo(i, 4))), ReadOnly:=True, Password:="password"

如果我没有误解你的问题,这应该有用。