私が持っているこの問題には、
「ローカルセールス」、「グローバルセールス」および「テンプレート」という3つのファイルがあります。
セールスファイルのカラム1とカラム2は同じですが、3はそれぞれ異なる情報を持っています。そのデータはすべて「テンプレート」のシートにコピーされなければなりません。 カラム1とカラム2は同じ場所にコピーする必要があります(カラム1 & 2).3番目のカラムはローカルセールスファイルの3番目のカラムで、4番目のカラムはグローバルセールス3番目のカラムでなければなりません。これまでの私と?私はそう望んでいます...VBA「プラスループをアクティブにする」コンフリクト
このルーチンが初めて実行されたとき、すべてがうまく行きました。これは、最初のソースファイル内のすべての列を反復し、テンプレートに貼り付けます。しかし、fileNumber = 2(2番目のソースファイルと同じことが必要な場合)の場合、マークされた行は「オブジェクトが必要です」と主張します。 これは私が最初に動作する理由を見ることができないので、ナットを運転していますが、2回目ではありません!
「アクティブ化」などのコマンドを使用するのは間違っていることがわかりますが、VBAを使用するのは初めてです。これが最初に見たものです。リッチホルトンが指摘したようにfileNumber
あなたは声明templateFile.Sheets("Data").Activate
に得るとき、それは何templateFile
知らない、したがって1でない限り、それと慈悲てください:)
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のときに値は与えられません。 –
そこにエラーがありました - 今修正されました。ここ ワークブック 設定templateFile = Application.Workbooks.Open( "Template.xls")として 'code' 薄暗いテンプレート」 "Template.xls" のパス ' code' がcode' 薄暗い 'てきたはずtemplateFileはワークブックとして templateFile = Application.Workbooks.Open( "Template.xls")ここに "Template.xls"のパスを設定します 'code' それでも実行されません。 – Powdertrail