範囲選択時にエラー1004(Application-defined or Object-defined error)が発生します。
行の選択(Rows("21:21").select
)や、同じワークブックの他のシートの範囲の選択はできています。エラーがコードにあるとは思えません。もしかしたら、私の知らない設定があるのでしょうか?
以前から全く同じコードを何度も使っているのですが、なぜかこのサブでは機能させることができません(エラーが発生する箇所はコメントしました)。
Sub CopySheet1_to_PasteSheet2()
Dim CLastFundRow As Integer
Dim CFirstBlankRow As Integer
'Finds last row of content
Windows("Excel.xlsm").Activate
Sheets("Sheet1").Activate
Range("C21").Select
'>>>Error 1004 "Application-defined or Object-defined error" Occurs
Selection.End(xlDown).Select
CLastFundRow = ActiveCell.Row
'Finds first row without content
CFirstBlankRow = CLastFundRow + 1
'Copy Data
Range("A21:C" & CLastFundRow).Select
Selection.Copy
'Paste Data Values
Sheets("PalTrakExport PortfolioAIdName").Select
Range("A21").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
'Bring back to top of sheet for consistancy
Range("A21").Select
Range("A1").Select
End Sub
行数が頻繁に変わるので、コピーに凝る必要があります。繰り返しますが、以下のコードは以前はエラーなく使用できましたが、今回は違います。
Dim CLastFundRow As Integer
Dim CFirstBlankRow As Integer
'Finds last row of content
Windows("Excel.xlsm").Activate
Sheets("Sheet1").Activate
Range("C21").Select
'>>>Error 1004 "Application-defined or Object-defined error" Occurs
Selection.End(xlDown).Select
CLastFundRow = ActiveCell.Row
'Finds first row without content
CFirstBlankRow = CLastFundRow + 1
おそらく、あなたのコードはSheet1の後ろにあり、Sheet2にフォーカスを移したときにオブジェクトが見つからないのではないでしょうか?もしそうであれば、対象のワークシートを指定すれば解決するかもしれません:
Sheets("Sheet1").Range("C21").Select
私はSelectがどのように機能するのかよく知りません。)選択しなくても範囲を定義したり操作したりできます。また、参照するものはすべて明示的にするのがよいでしょう。そうすれば、あるシートやワークブックから別のシートやワークブックに移動しても、見失うことはありません。試してみてください:
Option Explicit
Sub CopySheet1_to_PasteSheet2()
Dim CLastFundRow As Integer
Dim CFirstBlankRow As Integer
Dim wksSource As Worksheet, wksDest As Worksheet
Dim rngStart As Range, rngSource As Range, rngDest As Range
Set wksSource = ActiveWorkbook.Sheets("Sheet1")
Set wksDest = ActiveWorkbook.Sheets("Sheet2")
'Finds last row of content
CLastFundRow = wksSource.Range("C21").End(xlDown).Row
'Finds first row without content
CFirstBlankRow = CLastFundRow + 1
'Copy Data
Set rngSource = wksSource.Range("A2:C" & CLastFundRow)
'Paste Data Values
Set rngDest = wksDest.Range("A21")
rngSource.Copy
rngDest.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
'Bring back to top of sheet for consistancy
wksDest.Range("A1").Select
End Sub
大規模な配列文字列をExcel 2003の範囲にプログラム的に設定すると、「実行時エラー1004」エラーメッセージが表示されることがあります。
Office Excel 2003では、大きな文字列を含む配列で範囲値をプログラム的に設定すると、次のようなエラーメッセージが表示されることがあります。
ランタイムエラー「1004」。 アプリケーション定義または操作定義のエラー。
この問題は、配列(セルの範囲)内の1つ以上のセルに、911文字を超えるように設定された文字列が含まれている場合に発生する可能性があります。
この問題を回避するには、911文字を超える文字列が配列に含まれないようにスクリプトを編集します。。
たとえば、以下の例のコードブロックからの次のコード行は、912文字を含む文字列を定義します。
Sub XLTest()
Dim aValues(4)
aValues(0) = "Test1"
aValues(1) = "Test2"
aValues(2) = "Test3"
MsgBox "First the Good range set."
aValues(3) = String(911, 65)
Range("A1:D1").Value = aValues
MsgBox "Now the bad range set."
aValues(3) = String(912, 66)
Range("A2:D2").Value = aValues
End Sub
私も同じ問題を抱えていて、ほとんど狂っていました。 解決策はかなり予想外でした。
私のExcelはデフォルトで出荷され、次のようにExcel-Cellに数式を入力します。
=COUNTIF(Range; Searchvalue)
=COUNTIF(A1:A10; 7) 'Example
パラメータはセミコロン ;
で区切られていることに注意してください。 次に、その文字列をVBA内の数式に正確に貼り付けます(例:)。
Range("C7").FormulaArray = "=COUNTIF(A1:A10; 7)" 'this will not work
説明がまったくないこの1004エラーが表示されます。 これをデバッグするのに何時間も費やしました。. すべてのセミコロンをコンマで置き換えるだけです。
Range("C7").FormulaArray = "=COUNTIF(A1:A10, 7)" 'this works
最初の空白行を取得するには、dbのシートに移動する必要があります。この方法を試すことができます。
Sub DesdeColombia ()
Dim LastRowFull As Long
'Here we will define the first blank row in the column number 1 of sheet number 1:
LastRowFull = Sheet1.Cells(Rows.Count,1).End(xlUp).Offset(1,0).Row
'Now we are going to insert information
Sheet1.Cells(LastRowFull, 1).Value = "We got it"
End Sub
私も同様の問題を抱えていましたが、ページから外れているセルを参照しているだけであることがわかりました{つまり、. cells(i、1).cut cells(i-1,2)
}。
VBAの開発/デバッグ中に突然問題が発生しました。一部の(私には知られていない)関数(ality)によってセルがロックされたためです(おそらく問題のある段階で名前付き参照の名前を変更)。
セルを手動でロック解除正常に動作しました。
すべてのワークシートセル( CTRL + A
)を選択し、 右クリック->でロックを解除します。セルフォーマット->保護-> [] lock
(異なる場合があります-ドイツ語から翻訳: Zellen formatieren -> Schutz -> [] Gesperrt
)。
ワークブックの各シートにループしようとすると、同様の問題がありました。 それを解決するために、私はこのようなことをしました。
dim mySheet as sheet
for each mysheet in myWorkbook.sheets
mySheet.activate
activesheet.range("A1").select
with Selection
'any wanted operations here
end with
next
そして、それはうまくいきました。
あなたの状況でそれを適応できることを願っています。
次のコードを使用できます(たとえば、セルデータを Sheet2
から Sheet1
にコピーする場合)。
Sub Copy
Worksheets("Sheet1").Activate
Worksheets("Sheet1").Range(Cells(i, 6), Cells(i, FullPathLastColumn)).Copy_
Destination:=Worksheets("Sheet2").Cells(Path2Row, Path2EndColumn + 1)
End Sub
私も同様の問題を抱えていました。 シートをコピーして貼り付けた後、カーソル/選択したセルを、貼り付けたばかりの範囲ではなくA1にしたかったのです。
Dim wkSheet as Worksheet
Set wkSheet = Worksheets(<sheetname>)
wkSheet("A1").Select
しかし、実際には1004エラーである400エラーを取得しました。
選択したセルを変更する前に、シートをアクティブにする必要があります。 これはうまくいきました。
Dim wkSheet as Worksheet
Set wkSheet = Worksheets(<sheetname>)
wkSheet.Activate
wkSheet("A1").Select
この一般的なエラーコードの実際の理由を見つける必要があります:1004。 function / VBAコードを編集し、プログラムをデバッグモードで実行して、それを引き起こしている行を識別します。 次に、コードを下に追加してエラーを確認します。
On Error Resume Next
//Your Line here which causes 1004 error
If Err.Number > 0 Then
Debug.Print Err.Number & ":" & Err.Description
End If
注: PCで使用するショートカットキーのデバッグ: ステップイントゥ(F8)、ステップオーバー(シフト+ F8)、ステップアウト(Ctrl +シフト+ F8)。