2017-06-09 1 views
2

Excel 1702でExcel 2016で正常に動作していたマクロにVBAコードがいくつかあります。ただし、1人のユーザーが新しい更新プログラム(1705)マクロは "1004アプリケーション/オブジェクト不明"エラーを返します。このエラーは、特に2番目のSelection.Offset(1,0).Select行で発生します。私は1703年と1705年にコンピュータ間で気づいExcel 2016 VBAマクロが新しい列を挿入すると更新後1705が発生する

'Get the values from the first column 
Range("A2 : A" & NumRows).Select 
Selection.Copy 
'Paste the copy once for each column containing data 
For I = 2 To NumCols 
    Range("A2").Select 
    Selection.End(xlDown).Select 
    Selection.Offset(1, 0).Select 
    ActiveSheet.Paste 
Next 
'Insert a new column at the front of the worksheet 
Columns("A:A").Select 
Selection.Insert Shift:=xlToRight 
'Get the first data column header and copy it 
Range("C1").Select 
Selection.Copy 
'Paste the selection into the first column 
Range("A2:A" & NumRows).Select 
ActiveSheet.Paste 
'Get and copy the rest of the headers 
For I = 1 To NumCols 
    Range("C1").Select 
    Selection.Offset(0, I).Select 
    Selection.Copy 
    For C = 2 To NumRows 
     Range("A2").Select 
     Selection.End(xlDown).Select 
     Selection.Offset(1, 0).Select 
     ActiveSheet.Paste 
    Next 
Next 

ことの一つは、1703年に挿入された新しい列が空であるということで、1705年に新しい列は、行番号があるすべての方法の行の最大数(に値を持っています> 100万)。

私の質問は、どのようにExcelの最大行までのすべての行を埋めるデータなしで新しい列を挿入できますか?

+0

最初のものまず。 [THIS](https://stackoverflow.com/questions/10714251/how-to-avoid-using-select-in-excel-vba-macros)を参照してください。コードを修正して、まだ問題が発生している場合はお知らせください –

+0

コードはアップデート前に動作していて、Excelの「レコードマクロ」機能で記録されています。あなたがリンクした投稿は、それがパフォーマンスを向上させることを示していたようです。だから、私のパフォーマンスを改善するのを助けてくれてありがとう、本当に私がこの質問でやろうとしていることではありません。 – scratt

+0

あなたはその記事で私の答えを見逃したようです:) '.Select'は非常に信頼性が低く、ランタイムエラーを引き起こす可能性があります:) –

答えて

3

私はこれに関するいくつかの研究を行った。 1703年に動作し、1705年に動作しなかったことを知って、私はさまざまなバージョンの変更ログを探しました。それは彼らがこのアップデートにより、あなたのセルをコピーすることができます」という「コピーを保存」と呼ばれる新機能を追加したと言う

https://support.office.com/en-us/article/What-s-new-in-Excel-2016-for-Windows-5fdb9208-ff33-45b6-9e08-1f5cdb3a6c73#Audience=Office_Insiders

を、そしてあなたが貼り付ける前に、あなたはまだ他の操作を行うことができます。これは私が見つけることができるすべてですタイピングやセルの挿入などのタスクVBAコードを設定して列を選択し、その前に新しい(空の)列を挿入します。ただし、セルは以前にコピーされていたため、新しいフィーチャでは新しいフィーチャが保持され、新しい列に挿入され、列全体が値(100万行以上)で埋められました。

古いバージョンが新しく作成された列に値を持たないことに気付いたので、「コピーを保持する」機能が原因と考えられました。新しい列を作成する前に、クリップボードの内容(ありがとうSO!)をクリアするためにStack Overflowを検索しました。

私はこのことから私のコードを変更:これに

Columns("A:A").Select 
    Selection.Insert Shift:=xlToRight 

Application.CutCopyMode = False 'Clears any copied cells so they do not get inserted into the new column 
Columns("A:A").Select 
Selection.Insert Shift:=xlToRight 

、それは問題を修正しました。誰かがこの知識の中で価値を見つけてくれることを願っています。

+1

ありがとうございました!これは私を苦労させていました。古いプログラムの機能を完全に破り、以前のバージョンのExcelでうまく動作するように維持しています。私たちはバグだと思っていました。真剣にこれを追加するには、Microsoftからのディック移動し、それがオンにデフォルトを持っている。 – WebChemist

関連する問題