我得到的這個問題有三個文件:
「本地銷售」,「全球銷售」和「模板」。
銷售文件的第1列和第2列是相同的,第3列中的每個都有不同的信息。所有這些數據都必須複製到「模板」中的工作表中。 必須將第1列和第2列複製到相同的地方(第1列),第3列必須是本地銷售文件的第3列,第4列必須是全球銷售文件第3列。和我一起到目前爲止?我希望如此...VBA「Activate plus loop」衝突
這個例程第一次運行時,一切都很好。它迭代第一個源文件中的所有列,並將它們粘貼到模板上。但是,當fileNumber = 2(當它應該對第二個源文件執行相同操作時),標記行聲稱「需要一個對象」。 這讓我瘋狂,因爲我無法看到它第一次運作的原因,但不是第二次!
我知道使用諸如「activate」之類的命令是錯誤的,但是這是我第一次使用VBA,而且這是我第一次看到。請仁慈與:)
Sub OpenFiles(ByVal fileNumber)
If fileNumber = 1 Then
Dim localFile As Workbook
Set localFile = Application.Workbooks.Open("local sales.xls") ' here the path of "local sales.xls"
Dim templateFile As Workbook
Set templateFile = Application.Workbooks.Open("Template.xls") ' here the path of "Template.xls"
localFile.Sheets("Sheet1").Activate
Else
Dim globalFile As Workbook
Set globalFile = Application.Workbooks.Open("global sales.xls") ' here the path of "global sales.xls"
globalFile.Sheets("Sheet1").Activate
End If
Dim lastColumnOnSource, lastRow, lastColumnOnDestiny As Long
Dim textLastRow, textCol, areaToSelect, areaToPaste As String
lastColumnOnSource = (ActiveSheet.Cells(1, Columns.Count).End(xlToLeft).Column)
lastRow = ActiveSheet.UsedRange.Rows.Count
textLastRow = CStr(lastRow)
For currentColumnOnSource = 1 To lastColumnOnSource
If fileNumber = 1 Then
localFile.Sheets("Sheet1").Activate
Else
globalFile.Sheets("Sheet1").Activate
End If
columnAsLetter = ColumnLetter(currentColumnOnSource)
Let areaToSelect = columnAsLetter & "1:" & columnAsLetter & textLastRow
Range(areaToSelect).Select
Selection.Copy
' Moving to the template, to paste the data
templateFile.Sheets("Data").Activate ' HERE IS THE ERROR
lastColumnOnDestiny = ActiveSheet.Cells(1, Columns.Count).End(xlToLeft).Column
Dim cell1, cell2 As String
Dim cell2AsRange As Range
For currentColumnOnDestiny = 1 To lastColumnOnDestiny
' I take the first cell ("header") on the column and compare it until it's header
' matches the header on the column that is being copied and paste it there
Let cell1 = columnAsLetter & "1"
Let cell2 = ColumnLetter(currentColumnOnSource) & "1"
If Range(cell1).Value = Range(cell2).Value Then
' select the column that cell 2 belongs on, to paste in it
Let areaToPaste = cell1 & ":" & cell2
Range(areaToPaste).Select
Range(areaToPaste).PasteSpecial
Exit For
End If
Next
Next
Application.CutCopyMode = False
'Application.ActiveWorkbook.Save
End Sub
這是一個典型的SQL任務,請看[this](http://stackoverflow.com/a/34376642/2165759)和[this](http://stackoverflow.com/a/34601871/2165759 ),你需要JOIN SQL查詢。 – omegastripes
templateFile在哪裏聲明?如果它是一個局部變量,當fileNumber <> 1時它沒有被賦值。 –
有一個錯誤 - 現在修復。 'code' 昏暗的模板工作簿 設置templateFile = Application.Workbooks.Open( 「Template.xls」)「這裏 」Template.xls「 'code' 應該已經 的路徑'code' 暗淡templateFile As Workbook 設置templateFile = Application.Workbooks.Open(「Template.xls」)'這裏的「Template.xls」的路徑 '代碼' 它仍然不會運行。 – Powdertrail