私はコピーしてSheet1からSheet3への一意の値を貼り付けるVBAを持っています。しかし、私はVBAを実行するときにランタイムエラー438を取得します。 私のVBAは、次のようになります。エラーが発生しますThisWoorkbookランタイムエラー438
Sub UniqueList()
Application.ScreenUpdating = False
Dim lastrow As Long
Dim i As Long
Dim dictionary As Object
Set dictionary = CreateObject("scripting.dictionary")
ThisWorkbook.Sheet1.Activate
lastrow = Sheet1.Cells(Rows.Count, "M").End(xlUp).Row
On Error Resume Next
For i = 1 To lastrow
If Len(Cells(i, "M")) <> 0 Then
dictionary.Add Cells(i, "M").Value, 1
End If
Next
Sheet3.Range("a2").Resize(dictionary.Count).Value = _
Application.Transpose(dictionary.keys)
Application.ScreenUpdating = True
MsgBox dictionary.Count & " unique cell(s) were found and copied."
End Sub
行は次のようになります。
ThisWorkbook.Sheet1.Activate
私はシート3からボタンを使用してVBAを実行します。しかし、私はまた、AltF8とAltF11を使ってシート1を開いて実行しようとしましたが、何も動作しません。私は解決策
コードが書かれている方法は、単に 'ThisWorkbook.Sheet1を削除することができます。活性化 '行。シートをメンバオブジェクトで動作させるために 'Activate 'する必要はありません。しかし、作業しているオブジェクトを修飾することがベストプラクティスです。たとえば、 'Cells(i、" M ")'を 'Sheet3.Cells(i、" M ")'に変更します。 'Sheet1'と' Sheet1'の使用はVBAシートのオブジェクト名を仮定しています。これは 'Worksheets(" Sheet1' ")とは異なる構文です。 –