使用variables作为列
我正在制作一个macros来从多个Excel文件中收集数据,然后将它们合并成一个可以在同一个图上绘制所有数据的macros。
有问题使用variables来显示要粘贴的列。
cq = ColumnLetter(n) cp = ColumnLetter(n + 1) Columns("cq:cp").Select
每次循环n变化3次。 它已经粘贴了CQ和CP列中的所有数据。
我知道这是一个基本的问题,Code是凌乱的,我通常不使用Excel VBA。
Function ColumnLetter(ByVal intColumnNumber) Dim sResult intColumnNumber = intColumnNumber - 1 If (intColumnNumber >= 0 And intColumnNumber < 26) Then sResult = Chr(65 + intColumnNumber) ElseIf (intColumnNumber >= 26) Then sResult = ColumnLetter(CLng(intColumnNumber \ 26)) _ & ColumnLetter(CLng(intColumnNumber Mod 26 + 1)) Else Err.Raise 8, "Column()", "Invalid Column #" & CStr(intColumnNumber + 1) End If ColumnLetter = sResult End Function 'Loop through each Excel file in folder Do While myFile <> "" 'Set variable equal to opened workbook Set wb = Workbooks.Open(Filename:=myPath & myFile) cq = ColumnLetter(n) cp = ColumnLetter(n + 1) Columns("A:B").Select Selection.Copy Windows("Results.xlsx").Activate Columns("cq:cp").Select ActiveSheet.Paste 'Change First Worksheet wb.Worksheets(1).Range("A1") = ColumnLetter(n) wb.Worksheets(1).Range("B1") = Left(myFile, 9) 'Save and Close Workbook wb.Close SaveChanges:=True 'Get next file name myFile = Dir n = n + 3 Loop
这是一个获取列字母的函数。
Function Col_Letter(lngCol As Long) As String Dim vArr vArr = Split(Cells(1, lngCol).Address(True, False), "$") Col_Letter = vArr(0) End Function
更改
Columns("cq:cp).Select
至
Columns(cq & ":" & cp).Select
Function ColumnLetter(ByVal intColumnNumber) ColumnLetter = Replace(Cells(1, intColumnNumber).address(false,false),"1","") End Function
对于其余的:
Dim wsRes As Worksheet Set wsRes = Workbooks("Results.xlsx").Worksheets("sheetNameHere") Do While myFile <> "" Set wb = Workbooks.Open(Filename:=myPath & myFile) With wb.Worksheets(1) .Range("A:B").Copy wsRes.Cells(1, n) .Range("A1").Value = ColumnLetter(n) .Range("B1").Value = Left(myFile, 9) End With wb.Close SaveChanges:=True 'Save and Close Workbook 'Get next file name myFile = Dir n = n + 3 Loop