Arrays 用图纸名称转置

Arrays 用图纸名称转置,arrays,vba,excel,transpose,Arrays,Vba,Excel,Transpose,我有VBA代码,可以在电子表格中转换数据,以便将其输入到另一个程序中。根据图纸名称,需要在电子表格中的许多图纸中执行以下代码 当手动输入工作表名称时,代码正确执行,但是,现在我正在尝试添加一个数组,当我尝试执行代码时,我收到一个错误;错误显示为“类型不匹配”,并出现在下面带有箭头的行上 如果有人能帮忙,我将不胜感激!我假设问题与图纸名称的读取方式有关,但是,作为VBA的新用户,我在解决问题时遇到了一些问题: Sub LoopThroughSheets() Dim Sheets As Varia

我有VBA代码,可以在电子表格中转换数据,以便将其输入到另一个程序中。根据图纸名称,需要在电子表格中的许多图纸中执行以下代码

当手动输入工作表名称时,代码正确执行,但是,现在我正在尝试添加一个数组,当我尝试执行代码时,我收到一个错误;错误显示为“类型不匹配”,并出现在下面带有箭头的行上

如果有人能帮忙,我将不胜感激!我假设问题与图纸名称的读取方式有关,但是,作为VBA的新用户,我在解决问题时遇到了一些问题:

Sub LoopThroughSheets()

Dim Sheets As Variant
Dim Sheet As Variant

Sheets = Array("Sheet4.3")

For Each Sheet In Sheets
    'Code goes here.

Dim ws As Worksheet
Dim i, k, multiple As Integer
Dim rawrowcount As Long
Dim rawcolcount As Long
    'Define variables for the below-noted code

For i = 1 To ActiveWorkbook.Sheets.Count
    If ActiveWorkbook.Sheets(i).Name = "Q_" & Sheets Then <-- <-- <-- <--
        ActiveWorkbook.Sheets(i).Delete
    End If
Next i
    'Delete Worksheet if already existing for respective tab

With ThisWorkbook
    Set ws = .Sheets.Add(After:=.Sheets(.Sheets.Count))
    ws.Name = "Q_" & Sheets
    ws.Range("A1").Value = "Year"
    ws.Range("B1").Value = "Product"
    ws.Range("C1").Value = "Product Type"
    ws.Range("D1").Value = "Cashflow"
End With
    'Insert column headings for Resulting spreadsheet

With ThisWorkbook.Sheets("4.3")
    '.Range("I:I").Delete
    .Range("A:A").Delete
    '.Rows(111).Delete
    rawrowcount = WorksheetFunction.CountA(.Range("A:A")) - WorksheetFunction.CountA(.Range("A1:A10")) - 1
    rawcolcount = .Cells(10, Columns.Count).End(xlToLeft).Column - 2
End With
'Count the number of rows and columns to determine how many the number of iterations
'for the next set of code

Application.ScreenUpdating = False
    'Do not update screen while executing code

For i = 1 To rawcolcount
    multiple = rawrowcount * (i - 1)
    For k = 1 To rawrowcount
        'Sheets("4.3").Activate
        'ActiveSheet.Range("A9").Select
        'Selection.Offset(k + 1, 0).Select
        'Selection.Copy
        'Sheets("Q_" & Sheets).Activate
        'ActiveSheet.Range("A1").Select
        'Selection.Offset(k + multiple, 0).Select
        'ActiveSheet.Paste
            'Copy and paste Years 1 to 100

        Sheets("4.3").Activate
        ActiveSheet.Range("A9").Select
        Selection.Offset(k + 1, i).Select
        Selection.Copy
        Sheets("Q_" & Sheets).Activate
        ActiveSheet.Range("A1").Select
        Selection.Offset(k + multiple, 3).Select
        ActiveSheet.Paste
            'Copy and paste the Cashflow for Years 1 to 100 for
            'each Product

    Next k
        'Repeat for each Product Type


    Sheets("4.3").Activate
    ActiveSheet.Range("A9").Select
    Selection.Offset(2, 0).Select
    Selection.Copy
    Sheets("Q_" & Sheets).Activate
    ActiveSheet.Range("A1").Select
    Selection.Offset(multiple + 1, 0).Select
    ActiveSheet.Paste
        'Copy & paste the Year for each respective Cashflow

    'Sheets("Q_" & Sheets).Activate
    'ActiveSheet.Range("A1").Select
    'Selection.Offset(multiple + 1, 1).Value = "Canada Region"
        'Copy & paste Region for the respective Cashflow

    Sheets("4.3").Activate
    ActiveSheet.Range("A9").Select
    Selection.Offset(1, i).Select
    Selection.Copy
    Sheets("Q_" & Sheets).Activate
    ActiveSheet.Range("A1").Select
    Selection.Offset(multiple + 1, 1).Select
    ActiveSheet.Paste
        'Copy & paste the Product for each respective Cashflow

    Sheets("4.3").Activate
    ActiveSheet.Range("A9").Select
    Selection.Offset(0, i).Select
    Selection.Copy
    Sheets("Q_" & Sheets).Activate
    ActiveSheet.Range("A1").Select
    Selection.Offset(multiple + 1, 2).Select
    ActiveSheet.Paste
        'Copy & paste the Product Type for each respective Cashflow

    'Sheets("4.3").Activate
    'ActiveSheet.Range("B8").Select
    'Selection.Offset(0, i).Select
    'Selection.Copy
    'Sheets("Q_" & Sheets).Activate
    'ActiveSheet.Range("A1").Select
    'Selection.Offset(multiple + 1, 4).Select
    'ActiveSheet.Paste
        'Copy & paste Risk for the respective Cashflow

    ActiveSheet.Range(ActiveSheet.Cells(multiple + 2, 1), ActiveSheet.Cells(multiple + 2, 3)).Select
    Selection.AutoFill Destination:=Range(ActiveSheet.Cells(multiple + 2, 1), ActiveSheet.Cells(multiple + 101, 3))
        'Autofill the Region, Product and Product Type for each Cashflow

Next i
    'Repeat for Years 1 to 100

Application.ScreenUpdating = False
    'Do not update screen while executing code

Call Delete
    'Call the next subroutine (Delete)


ThisWorkbook.ActiveSheet.Cells.ClearFormats
    'Clear formatting in Output Worksheet

Set ws = Nothing

Next Sheet
End Sub
Sub-LoopThroughSheets()
变暗板材作为变体
变暗板作为变型
图纸=阵列(“图纸4.3”)
每一张中的每一张
“代码在这里。
将ws设置为工作表
Dim i,k,作为整数的倍数
暗淡的罗罗数等于长
暗淡的罗科尔数得一样长
'为以下注释的代码定义变量
对于i=1到ActiveWorkbook.Sheets.Count

如果ActiveWorkbook.Sheets(i).Name=“Q_216;”和Sheets Then不需要对照数组中的名称检查工作簿中的每个工作表名称,只需将要删除的名称加载到数组中,然后删除它们(使用On Error Resume Next语句忽略工作表不存在的任何实例)

这可能会更有效,因为您不会循环浏览工作簿中的每个工作表,而只循环浏览要删除的工作表(如果它们已经存在)

另外,不要命名与Excel对象名称(如图纸)一致的变量


Sheets
是一个数组,但您的比较是对文本进行比较。您应该将
Sheets=“Sheet4.3”
设置为
=“Q_u”&Sheets
设置为
=“Q_u”&Sheets(0)
,但看看您的代码,我不确定您是否还需要检查一些其他内容。嗨,斯科特,我真的很喜欢您的方法!我没有想到这一点。我将清理代码,首先删除所有不相关的工作表(如上所述),然后让脚本在整个电子表格中循环。
Dim aSheets() as Variant
'Dim aSheets() as String 'alternate approach

aSheets = Array("Sheet4.3","Sheet4.4","Sheet4.5") 'extra added as example
'aSheets = Split("Sheet4.3,Sheet4.4,Sheet4.5",",") 'alternate approach

Dim x as Integer
On Error Resume Next ' will ignore instances where sheet is not in workbook
For x = LBound(aSheets) to UBound(aSheets)

    Worksheets("Q_" & aSheets(x)).Delete

Next
On Error GoTo 0 'resets error catch so any errors in further code will appear