【问题标题】:Looping through an array of values in VBA循环遍历 VBA 中的值数组
【发布时间】:2019-11-25 18:28:40
【问题描述】:

我为我们收到的 .csv 文件中的 pil 信息创建了一个数据库。然后,我设置了一个表格,使用匹配和索引公式在我们发送的漂亮表格中显示所有数据。我正在尝试在 VBA 中使用 For Each 来更轻松地导出这些表。当前代码是

Sub ExportAllSheets()

Dim DB As Workbook
Dim OSR As Worksheet
Dim EL As Worksheet
Dim SN As Range
Dim List As Range
Dim Name As Range
Dim x As String

Set DB = Workbooks("Database")
Set OSR = DB.Sheets("OilSamplingResults")
Set EL = DB.Sheets("ExportList")
Set List = EL.Range("A2:A100")
Set Name = EL.Range("B2:B100")

x = InputBox("Enter File Name")

ScreenUpdating = False

For Each SN In List

EL.Range("A2").Copy OSR.Range("G5")
  OSR.Copy After:=OSR
    Sheets("OilSamplingResults (2)").Range("A1:BN45").Select
        Selection.Copy
         Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
         :=False, Transpose:=False
            Sheets("OilSamplingResults (2)").Move After:=Workbooks(x).Sheets("Master")
Workbooks(x).Sheets("OilSamplingResults (2)").Name = Workbooks("Database").Sheets("ExportList").Range("B2")
Workbooks("Database").Sheets("ExportList").Activate
ScreenUpdating = True

Next

End Sub

工作簿数据库有我要导出的结果页面和一个 ExportList 页面。 A 列是在结果页面上驱动我的匹配公式的序列号。复制序列并将其粘贴到 G5 中,G5 检索所有数据,复制结果页面,并通过仅将值复制回来“展平”它。将新展平的工作表移动到导出文件并根据 ExportPage 列 B 的值对其进行重命名。

我目前的工作是什么,但由于我在循环中硬设置了 A2 和 B2,它给了我一个“该名称已被占用”错误。我不知道如何让它使用 A3 和 B3...4.5.6 等等。

我还应该澄清一下,当我导出数字列表时,它们都会转到同一个文件。下次我导出时将使用不同的文件名,但同样是该文件的整个列表。

我看到很多人使用 Dim I 作为 Integer 和 I + 1 和计数函数,只是以前从未这样做过。

【问题讨论】:

    标签: excel vba for-loop count


    【解决方案1】:
    Sub ExportAllSheets()
    
    Dim DB As Workbook
    Dim OSR As Worksheet
    Dim EL As Worksheet
    Dim SN As Range
    Dim List As Range
    Dim Name As Range
    Dim x As String
    Dim i As Long
    
    Set DB = Workbooks("Database")
    Set OSR = DB.Sheets("OilSamplingResults")
    Set EL = DB.Sheets("ExportList")
    Set List = EL.Range("A2:A100")
    Set Name = EL.Range("B2:B100")
    
    x = InputBox("Enter File Name")
    
    ScreenUpdating = False
    
    For Each SN In List
    For i = 2 To 100
    If EL.Range("A" & i) = "" Then GoTo SheDone
    EL.Range("A" & i).Copy OSR.Range("G5")
        OSR.Copy After:=OSR
            Sheets("OilSamplingResults (2)").Range("A1:BN45").Select
               Selection.Copy
                 Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone,     SkipBlanks _
                 :=False, Transpose:=False
                     Sheets("OilSamplingResults (2)").Move After:=Workbooks(x).Sheets("Master")
                        Workbooks(x).Sheets("OilSamplingResults (2)").Name =Workbooks("Database").Sheets("ExportList").Range("B" & i)
                            Workbooks("Database").Sheets("ExportList").Activate
    ScreenUpdating = True
    Next
    Next
    
    SheDone:
        MsgBox ("Export Complete")
    End Sub
    

    【讨论】:

      猜你喜欢
      • 2022-01-22
      • 1970-01-01
      • 1970-01-01
      • 2017-05-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多