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