Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


2205 / 13645 ツリー ←次へ | 前へ→

【69398】エラー6が出ました。助けてください。 David 11/7/5(火) 16:48 質問[未読]
【69399】Re:エラー6が出ました。助けてください。 neptune 11/7/5(火) 16:59 回答[未読]
【69402】Re:エラー6が出ました。助けてください。 David 11/7/5(火) 22:36 回答[未読]
【69403】Re:エラー6が出ました。助けてください。 みそじのおじさん 11/7/6(水) 7:04 発言[未読]
【69405】Re:エラー6が出ました。助けてください。 David 11/7/6(水) 9:21 発言[未読]
【69417】Re:エラー6が出ました。助けてください。 David 11/7/6(水) 22:16 お礼[未読]

【69398】エラー6が出ました。助けてください。
質問  David E-MAIL  - 11/7/5(火) 16:48 -

引用なし
パスワード
   他の2つのブックを開いて、コピペをやるつもりで、
下記のコードを書きました。
Private Sub CommandButton1_Click()
Dim ExcelFileOpen, ToFileOpen
On Error GoTo ErrHandler
Application.ScreenUpdating = False
’ブック1を開く
  ExcelFileOpen = Application.GetOpenFilename _
    (FileFilter:="MicroSoft Excel Files (*.xls), *.xls", _
    MultiSelect:=False, Title:="Files to Merge")
  
  If TypeName(ObjectObject) = "Boolean" Then
    MsgBox "No Files were selected"
    GoTo ExitHandler
  End If
'-----------ブック2を開く
  ToFileOpen = Application.GetOpenFilename _
    (FileFilter:="MicroSoft Excel Files (*.xls), *.xls", _
    MultiSelect:=False, Title:="Files to Merge")
  
  If TypeName(FilesToOpen) = "Boolean" Then
    MsgBox "No Files were selected"
    GoTo ExitHandler
  End If
  If ToFileOpen <> False Then
    Set wb2 = Workbooks.Open(Filename:=ToFileOpen)
  End If
’貼り付けしたいブックの最初の位置を選択
Application.ScreenUpdating = True
  Dim c As Range
  Set c = Application.InputBox(prompt:="Choose the cell,please.", Title:="Choose cells", Type:=8)
'------------
  If ExcelFileOpen <> False Then
    Set wb1 = Workbooks.Open(Filename:=ExcelFileOpen)
  End If
’ブック1のある列の中の一部を選択、末端は不定。
’シートは保護されている。しかも、コピーしたいセルは関数が入っている。 
  Workbooks.Open Filename:=ExcelFileOpen
  Dim Xia As Integer
ActiveSheet.Unprotect Password:="123"
  Xia = Range("B7").End(xlDown).Row  '===ここでエラー6が出ました。
  Sheets(1).Range(Cells(7, 15), Cells(Xia, 15)).Copy
ActiveSheet.Protect Password:="123"
  
  c.PasteSpecial xlPasteValues

ActiveWorkbook.Close
ThisWorkbook.Close

ExitHandler:
Application.ScreenUpdating = True
Exit Sub

ErrHandler:
MsgBox Err.Description
Resume ExitHandler
End Sub

【69399】Re:エラー6が出ました。助けてください。
回答  neptune  - 11/7/5(火) 16:59 -

引用なし
パスワード
   ▼David さん:
>Dim Xia As Integer
のデータ型をlongにしてみましょう。

※Err.Descriptionは必ず書きましょう。番号でなんか覚えてない方は沢山います。

【69402】Re:エラー6が出ました。助けてください。
回答  David E-MAIL  - 11/7/5(火) 22:36 -

引用なし
パスワード
   ご回答、ありがとうございました。

早速、long にしてみたんですが、
次の「Sheets(1).Range(Cells(7, 15), Cells(Xia, 15)).Copy」を
実行したところ、
「アプリケーション定義またはオブジェクト定義のエラーです。」が、
出ました。
どうしたんでしょうかな。。。

【69403】Re:エラー6が出ました。助けてください。
発言  みそじのおじさん  - 11/7/6(水) 7:04 -

引用なし
パスワード
   おはようございます。

>次の「Sheets(1).Range(Cells(7, 15), Cells(Xia, 15)).Copy」を

CellsもRangeも、その前を省略すると
標準モジュールにコードを書いたなら→アクティブシートが対象
シートモジュールにコードを書いたなら→そのシートが対象

になります。

ですので、RangeはSheets(1)を指定しているのに、Cellsのほうは対象が
Sheets(1)になっていない為にそのエラーが発生します。

Sheets(1).Range(Sheets(1).Cells(7, 15), Sheets(1).Cells(Xia, 15)).Copy

の様に省略せずに指定します。
コードが長くなるのが嫌ならば、下記の様な書き方を使います。

  Dim wh As WorkSheet

  Set wh = WorkSheets(1)
  'Set wh = WorkSheets("シート名")

  wh.Range(wh.Cells(7, 15), wh.Cells(Xia, 15)).Copy
  
  Set wh = Nothing

【69405】Re:エラー6が出ました。助けてください。
発言  David E-MAIL  - 11/7/6(水) 9:21 -

引用なし
パスワード
   みそじのおじさん
どうも、早速おっしゃったとおり、実行したら、
うまくいきました。
本当に感謝いたします。ありがとうございます。

でも、もう一つ問題がありました。
値を表示されないセルまで、選択したいのですが、
今のコードで動かしたら、全列貼り付けされちゃうんです。

実のデータはこんな感じです。
たとえば、P列(実はO列)でP7からP54まで関数を入れているけれども、
値は途中までで終わっちゃうんです。
P55は空白です。続いてP56〜P62まで、またデータや関数が入っています。
私の場合はP7からP54までのなかで、値を表示されるところだけ、
コピーして、貼り付けしようと思っているんです。

このところはうまくいかない。
どうすればいいでしょうか。
また教えてください。たびたびすみません。

【69417】Re:エラー6が出ました。助けてください。
お礼  David  - 11/7/6(水) 22:16 -

引用なし
パスワード
   ▼みそじのおじさん さん、neptuneさん:
どうもありがとうございました。
データ型とは関係なかったみたいです。
Sheets(1).Range(Sheets(1).Cells(7, 15), Sheets(1).Cells(Xia, 15)).Copy
のところでうまく行きました。
その後Application.ScreenUpdating = False
のところに、問題があるみたい。
それを削除すると、解決できた。
後、みそじのおじさんの
「標準モジュールにコードを書いたなら→アクティブシートが対象
シートモジュールにコードを書いたなら→そのシートが対象」
のところは、ものすごく勉強になりました。
どうもありがとうございました。

2205 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free