循环周期中的偏移问题。需要对象

时间:2017-11-15 22:08:39

标签: excel vba

我在带有偏移量的While周期中遇到问题。

代码:

    Sub Voucher()

            Dim rangoCargo, rangoTAG, rangoTipo As Range
            Dim archivo As String
            Dim vFound As Boolean

            Dim subFldr As Object
            Dim subsubFldr As Object

            Worksheets("OC").Visible = True
            Worksheets("OC").Select

            Set rangoTAG = Range("B2")
            Set rangoCargo = Range("C2")
            Set rangoTipo = Range("E2")

            Dim fso As Object
            Set fso = VBA.CreateObject("Scripting.FileSystemObject")

            rutaAño = ActiveWorkbook.Path & "\2017"
            rutaFARFI = rutaAño & "\FAR_FI"
            rutaFARTA = rutaAño & "\FAR_TA"
            rutaFARTN = rutaAño & "\FAR_TN"
            rutaGOPMTI = rutaAño & "\GOPM_TI"

            rutaDocumentos = ActiveWorkbook.Path & "\SGSCM\02_ORDENES_DE_COMPRA\"                                                             

            If Dir(ActiveWorkbook.Path & "\2017", vbDirectory) = "" Then 'This checks if a main folder exist, do the procedure, nothing special

                MsgBox "Please, Check if the [2017] Folder Exists"

            Else 'if it exists:

                Do While Not IsEmpty(rangoCargo) 'Starts the cycle

                    If rangoTipo = "C" Then 'If Letter Type is C it loops through a folder until it finds the "C" Like one.

                        rangoCargo = Left(rangoCargo, 6) 

                        For Each subFldr In CreateObject("Scripting.FileSystemobject").GetFolder(rutaFARFI).Subfolders
                            For Each subsubFldr In CreateObject("Scripting.FileSystemobject").GetFolder(subFldr).Subfolders
                                Debug.Print subsubFldr

                                vFound = False

                                If subsubFldr Like "*\" & rangoTipo & rangoTAG Then 'If it finds it, copy and move the file from another folder to it.

                                    vFound = True
                                    cFolder = subsubFldr.Path

                                    archivo = Dir(rutaDocumentos & "\" & rangoCargo & "\*.*")
                                    Do Until archivo = ""

                                        Call fso.copyFile(rutaDocumentos & "\" & rangoCargo & "\" & archivo, cFolder & "\" & archivo)
                                        archivo = Dir

                                    Loop

                                End If 'ends subsubFldr

                                If vFound = True Then
                                    Exit For
                                End If

                            Next subsubFldr

                            If vFound = True Then
                                Exit For
                            End If
                        Next subFldr

                    ElseIf rangoTipo = "P" Then

                        archivo = Dir(rutaDocumentos & "\" & rangoCargo & "\*.*")
                        Do Until archivo = ""

                            Call fso.copyFile(rutaDocumentos & "\" & rangoCargo & "\" & archivo, rutaFARFI & "\" & rangoTipo & "\" & rangoTAG & "\" & archivo)
                            archivo = Dir
                        Loop

                    End If

                    Set rangoTAG = rangoTAG.Offset(1, 0)
                    Set rangoTipo = rangoTipo.Offset(1, 0)
                    Set rangoCargo = rangoCargo.Offset(1, 0) 'THIS OFFSET HAS THE PROBLEM
                'When the command Set rangoCargo = rangoCargo.Offset(1, 0) executes it throws the next message: Run Time Error '424' object required

                Loop 'The cycle end when it founds ""

            End If 'End if the folder [2017] doesn't exists

        End Sub

Excel Worksheet (OC)

好的,这就是问题所在:

我使用循环在包含"文件夹"的字符串的工作表之间循环。在他的cellValue中,在这种情况下文档赞。我做了一个Left(rangoCargo,6)来捕获确切的字符数,等于包含要复制它们的文件的文件夹,然后将它们移动到新文件夹。

正如您在Document Like Column中看到的那样,第一个值是" E-0001-997818"。如果主文件夹包含另一个子文件夹,我们将调用主文件夹 OC 。从OC我必须得到一个文件并将其移动到搜索到的文件夹(IE E-001),因此,E-001包含必须移动到新文件夹的文件但是,E-001被称为这样,并且"文件赞"列他们被称之为,但很多额外的数字(我不知道为什么,公司给我excel文件,我必须使用它而不修改它)。 所以我做了一个Left()来获取文件夹的确切字符串以找到它们,而且问题是,我不知道如何修复"它需要一个对象&#34 ;错误。 我几乎可以肯定这是因为Offset,但我不知道如何解决它。

所以,任何帮助都可能非常有用。谢谢你的时间。

1 个答案:

答案 0 :(得分:0)

好的,我想我已经找到了你的问题。

当你像这样标注变量时;

Dim rangoCargo, rangoTAG, rangoTipo As Range

你会认为它们都是Range类型,但这是错误的。前两个将是variant类型,因为它们未被声明为任何类型,最后一个将是唯一声明为Range类型的变量。

您应该将声明更改为以下任一项,然后您的代码才能正常运行。

Dim rangoCargo As Range, rangoTAG As Range, rangoTipo As Range

Dim rangoCargo As Range
Dim rangoTAG As Range
Dim rangoTipo As Range

因为rangoCargo被宣布为变种,所以它不知道它是Range对象因此导致您收到错误的原因。第一次将变量设置为Range("C2")时,它实际上并未设置范围,而是将值设置为自身。要进行测试,请在第一次设置rangoCargo之后立即添加此代码,它应该会失败;

p = rangoCargo.Value

它会给你同样的错误。 Run-time error '424': Object required

希望有所帮助。请记住,如果这可以解决您的问题以标记为答案。因此,如果遇到问题,其他人也可以看看如何解决问题。