【问题标题】:use values in a column as a parameters使用列中的值作为参数
【发布时间】:2021-12-05 15:54:41
【问题描述】:

我需要从列中读取值并将单个值作为参数传递给函数。 这是我的代码:

Sub Function3()
Dim FileFull As String
Dim wb As Workbook

Worksheets("Foglio3").Activate
FileFull = Dir(Range("A1").Value)

Do While FileFull <> ""
    Set wb = Workbooks.Open(FileFull)
    Delete_Sheet wb
    InsertCol wb
    wb.Close SaveChanges:=True
    Filename = Dir()
Loop
End Sub

其他函数将使用存储在 FileFull 变量中的值。 Foglio3 上的值是:

C:\scriptest\FolderA\2021\3-Corrs\fileA_2021.xlsm
C:\scriptest\FolderB\2021\3-Corrs\fileB_2021.xlsm
C:\scriptest\FolderC\2021\3-Corrs\fileC_2021.xlsm
C:\scriptest\FolderD\2021\3-Corrs\fileD_2021.xlsm
C:\scriptest\FolderE\2021\3-Corrs\fileE_2021.xlsm

我有两个问题。如何循环进入从 A1 到 A300 的 Foglio3 单元格范围并将这些值用作其他函数的参数? 谢谢!

【问题讨论】:

  • 如果您的其他函数有wb 作为参数,那么FileFull 将是wb.FullName
  • 循环遍历一个范围并传递值 -> For Each Cell in MyRange.Cells: MyFunction(Cell.Value): Next 其中 Cell 定义为 Dim Cell As Range。对于 A1 到 A300 -> Set MyRange = Range("A1:A300") 在循环之前。

标签: excel vba loops parameters


【解决方案1】:

处理多个工作簿

Option Explicit

Sub ProcessMultipleWorkbooks()
    Const ProcTitle As String = "Process Multiple Workbooks"
    
    Dim swb As Workbook: Set swb = ThisWorkbook ' workbook containing this code
    Dim sws As Worksheet: Set sws = swb.Worksheets("Foglio3")
    ' Either...
    Dim srg As Range: Set srg = sws.Range("A1:A300")
    ' ... or to make it dynamic:
    'Dim slCell As Range: Set slCell = sws.Cells(sws.Rows.Count, "A").End(xlUp)
    'Dim srg As Range: Set srg = sws.Range("A1", slCell)
    
    Dim dwb As Workbook
    Dim sCell As Range
    Dim dFilePath As String
    
    For Each sCell In srg.Cells
        dFilePath = CStr(sCell.Value)
        If Len(Dir(dFilePath)) > 0 Then ' destination file path exists
            On Error Resume Next
            Set dwb = Workbooks.Open(dFilePath)
            On Error GoTo 0
            If Not dwb Is Nothing Then ' file opened
                ' Debug.Print dwb.Name
                Delete_Sheet dwb
                InsertCol dwb
                dwb.Close SaveChanges:=True
            'Else ' file not opened
            End If
        'Else ' destination file path doesn't exist
        End If
    Next sCell
    
    MsgBox "Done.", vbInformation, ProcTitle

End Sub

【讨论】:

    猜你喜欢
    • 2018-04-18
    • 2018-12-10
    • 1970-01-01
    • 2013-04-18
    • 2021-01-04
    相关资源
    最近更新 更多