Excel VBA質問箱 IV

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

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


95 / 3841 ページ ←次へ | 前へ→

【80583】Re:ブックモジュール global オブジェク...
発言  γ  - 19/3/14(木) 21:21 -

引用なし
パスワード
   > Set KM = Workbooks("A").Worksheets("K")
のWorkbooks("A")というのはこれでいいのですか?

Bookを指定しなくてもActiveWorkbookと解釈されるはずなので記載しなくてよいし、
明示的に書くなら、
・Thisworkbookもしくは、
・Workbooks("A.xlsm")
とかじゃないんですか?

こちらにはVBEのコードペインからコピーペイストして
投稿されているのでしょうか?
いやほんとうは、これとは別のコードで実行しています、
というのは無しでお願いしたい。

ちなみに、
Set KM = Sheet1
などとしてテスト実行しましたが、特にエラーは発生しませんね。
・ツリー全体表示

【80582】Re:ブックモジュール global オブジェク...
発言  マナ  - 19/3/14(木) 19:59 -

引用なし
パスワード
   ▼みも さん:


KM.Rows.Count

だとどうなるでしょうか?
・ツリー全体表示

【80581】Re:ブックモジュール global オブジェク...
回答  よろずや  - 19/3/14(木) 19:54 -

引用なし
パスワード
   >書く場所が悪いのか
場所ではなく、実行するタイミングの問題です。

Workbook_Open()直後には、まだワークシートが開かれていないようです。
Workbook_WindowActivateイベントで実行させるのが吉。

Workbook_Open()直後にのみ実行させたい場合は、
Workbook_WindowActivateイベントで実行済みフラグを立てるなどの工夫が必要です。

と、思う。
うまくいったら、他の人のために結果報告してね。
・ツリー全体表示

【80580】ブックモジュール global オブジェクト ...
質問  みも  - 19/3/14(木) 18:25 -

引用なし
パスワード
   マクロVBAについて質問です。

最近マクロを始めたものです。

やりたい内容: ブックが開いた時に前回入力されているデータを自動削除したい。

最初はブックモジュールに下記コードを記載していたのですが、“Rowsメソッドは失敗しました_Global オブジェクト” となり実行で来ません。

浅はかですが書く場所が悪いのかと思い、標準モジュールを呼び出すコードをブックモジュールに記載したのですがエラーは出続けて解消できません。

標準モジュールでステップインで実行すると問題なく進みます。

また、コマンドボタンを設置して標準モジュールを実行してもうまくいきます。

This workbookに繋げて書こうとするとなぜかうまくいきません。

初心者で大変申し訳ありませんが、行き詰まっています。

どなたかご教授頂けますと幸いです。

*ブックモジュール

Private Sub Workbook_Open()

Call Module1.Module1

End Sub

*標準モジュール

Sub Module1()

'KシートをKMとする

    Dim KM As Worksheet

    Set KM = Workbooks("A").Worksheets("K")

' KシートA列の最終行をKMMRとする

    Dim KMMR As Long

    KMMR = KM.Cells(Rows.Count, 1).End(xlUp).Row   (ここでエラーになります。)

    If KMMR > 1 Then

    KM.Range(KM.Cells(2, 1), KM.Cells(KMMR, 39)).Delete

    Else

    End If

'HシートをHMとする

    Dim HM As Worksheet

    Set HM = Workbooks("A").Worksheets("H")

' HシートA列の最終行をKMMRとする

    Dim HMMR As Long

    HMMR = HM.Cells(Rows.Count, 1).End(xlUp).Row

    If HMMR > 1 Then

    HM.Range(HM.Cells(2, 1), HM.Cells(HMMR, 30)).Delete

    Else

    End If

End Sub
・ツリー全体表示

【80579】Re:Worksheet.Delete の動き
発言  北浦  - 19/3/14(木) 12:48 -

引用なし
パスワード
   ▼よろずや さん:
レスありがとうございます。
やぱりそうなんですね

▼マナ さん:
レスありがとうございます。
実を言いますと、一部のシートをブックからエクスポートしたり
ブックにインポートしたりしています。

エクスポートは、ブック内のシート1つを別ブックで保存しており、
インポートは、ブック内にあるインポート対象シートを削除した後、
エクスポートしたシートを取込んでいます。

このインポートの際に問題が生じています。

インポートの処理としては
 シートの Delete コマンドで、インポート対象のシートを削除し、
 インポートするシートを Copy コマンドで取り込んでいます。

通常は、特に問題が起こらないのですが、
以下のように、
 Button1 で インポート対象シートのコード名を参照した処理を行い
 Button2 で、インポート処理を行うと、
  Delete コマンドで、シートのオブジェクトが残ってしまい
  Copy コマンドで、取り込んだシートのコード名が変わり
  処理終了後、Delete コマンドで削除したオブジェクトが消えてなくなります。
  結果、違うコード名で取り込んだような状態になります。

Sub Button1_Click()
  Debug.Print SHT.Name
End Sub

Sub Button2_Click()
  Call Import
End Sub

※インポート対象のコード名が SHT とすると、インポート後は、SHT1 となる。

この後、コード名が変わっている為、別のプログラムでコード名を
参照している箇所で、エラーが発生します。

回避方法としては、インポート対象のシートに関して、
そのコード名を使用しないようにすればよいというのは、分かっているのですが、
この方法しかないのか、それ以外の方法があるのか探りたいと考えています。

よろしくお願いいたします。
・ツリー全体表示

【80578】Re:変数の参照が不正ですを直したい
発言  よろずや  - 19/3/14(木) 10:17 -

引用なし
パスワード
   マルチポストで、あちらでも適切な回答が付かないですね。

突っ込み処満載で、どっから手を付けていいやら。

コンパイルエラーの前に、
どんな表でどんな処理をしたいのかを説明すると、
適切な回答が付くかも。
・ツリー全体表示

【80577】Re:変数の参照が不正ですを直したい
発言  マナ  - 19/3/13(水) 23:14 -

引用なし
パスワード
   ▼モリチャン さん:

まずは、インデントから
ht tp://kabu-macro.com/word/sa-so/zisage.html

次に、変数宣言
ht tp://officetanaka.net/excel/vba/beginner/11.htm

質問は、それからで。
・ツリー全体表示

【80576】変数の参照が不正ですを直したい
質問  モリチャン E-MAIL  - 19/3/13(水) 22:54 -

引用なし
パスワード
   以下の様なマクロ部分のプログラムです。他にフォーム部分がありますが動かすとコンパイルエラ:Nextで指定された変数の参照が不正ですと表示します。そして、Next iのiの部分が強調されますので、変数i関係が違うと思いますがどう直したらよいでしょうか?
Sub main()
Application.ScreenUpdating = False
Workbooks.Open Filename:=gfilename
sinn = ActiveWorkbook.Name
Sheets("規格値").Select
Range("E10").Select
ActiveCell.Offset(0, 0).Range(Cells(2, 1), Cells(15, 7)).Select
Selection.ClearContents
Workbooks.Open Filename:=dfilename
For i = 1 To 7
For k = 1 To 14
Data = ActiveWorkbook.Name
Windows(sinn).Activate
Range("E10").Select
ActiveCell.Offset(k - 1, i - 1).Select
Windows(Data).Activate
D = Val(Mid(TESTNO, (k - 1) * 2 + 1, 2))
Range(Cells(D, 1), Cells(D, 6)).Copy
Windows(sinn).Activate
Selection.PasteSpecial Paste:=xlFormula
Next i
Windows(Data).Activate
ActiveWindow.Close
If i = 7 Then Exit For
Application.ScreenUpdating = True
MsgBox ("終了しました")
End Sub
・ツリー全体表示

【80575】Re:Worksheet.Delete の動き
発言  マナ  - 19/3/13(水) 20:15 -

引用なし
パスワード
   ▼北浦 さん:

回答はできないのですが、

そもそも、それで何か不都合があるのでしょうか?
・ツリー全体表示

【80574】Re:Worksheet.Delete の動き
発言  よろずや  - 19/3/13(水) 20:08 -

引用なし
パスワード
   コード名が書かれているプロジェクトで
そのコード名のオブジェクトを削除すると
プログラムエラーになってしまいます。(実行時エラー)

プログラム実行中にプログラムの状態が変わると
調子が悪いので、プログラム終了まで保持しているのでは。
・ツリー全体表示

【80573】Worksheet.Delete の動き
質問  北浦  - 19/3/13(水) 15:18 -

引用なし
パスワード
   はじめまして。
現在、作成したマクロの動きを調査していて、
シート削除の以下の2つの動きが微妙に異なることに気づきました。
 a) Worksheets(1).Delete
 b) Sheet1.Delete
a:すぐにシートが削除され、VBEのプロジェクト内からも、すぐに無くなります。
b:すぐにシートが削除され、VBEのプロジェクト内は、処理終了後に無くなります。

また、以下のようにすると、
  Debug.Print Sheet1.Name
  Worksheets(1).Delete
上記bと同じ動きになります。
どうも、コード名を利用したのち、シートを削除すると、
プロジェクト内のオブジェクトは、処理終了後にしかなくならないようです。

すべてWorksheets(1)のような記述にすれば、解決するのは分かっているのですが
どうしてコード名を利用した処理の後にシートを削除すると、
プロジェクト内のオブジェクトは、処理終了後にしか無くならないのか、
理由を知りたいと思っています。

どなたか、ご教授いただけないでしょうか
よろしくお願いいたします。

動作環境
 OS: Windows 10 64ビット メモリ4GB
 Excel: Excel 2016 32ビット
・ツリー全体表示

【80572】Re:複数選択したシートに、ページ番号の...
発言  マナ  - 19/3/12(火) 17:43 -

引用なし
パスワード
   ▼わか さん:

>With ActiveSheet.PageSetupを
>ActiveWindow.SelectedSheets.PageSetup
>に書き換えてみましたが
>エラーが表示されます。

手作業と同じで、まとめて設定はできないので

For each sht in ActiveWindow.SelectedSheets
  With sht.PageSetup

のように、1シートずつ設定してください。
・ツリー全体表示

【80571】Re:複数選択したシートに、ページ番号の...
質問  わか  - 19/3/12(火) 8:23 -

引用なし
パスワード
   ▼マナ さん:

回答ありがとうございます。
重要書類で、またシートを増やしたりすることも多いので、間違いがないようにあえてマクロで印刷までの一括を組もうとしています。

下記では、

>>With ActiveSheet.PageSetup

が問題であるとのことでしたので

With ActiveSheet.PageSetupを
ActiveWindow.SelectedSheets.PageSetup
に書き換えてみましたが
エラーが表示されます。

どう記載すれば選択しているシートに対し
ヘッダー、フッダーが作動するのか
今後の他への展開への勉強も兼ね、ご教授頂ければ幸いです。

宜しくお願い致します。

Sub ページ番号設定印刷()
'
' ページ番号設定印刷 Macro
'
With ActiveSheet.PageSetup
    .LeftHeader = ""
    .CenterHeader = ""
    .RightHeader = ""
    .LeftFooter = ""
    .CenterFooter = "&P/&N"
    .RightFooter = ""
    .LeftHeader = ""
  End With

  ActiveWindow.SelectedSheets.PrintOut Copies:=1
  
End Sub

>▼わか さん:
>
>>印刷は選択したすべてが出ます。
>
>印刷の部分は、ちゃんと選択したシートが対象になっているからです。
>
>>  ActiveWindow.SelectedSheets.PrintOut Copies:=1
>
>
>'-----
>
>>1枚にページ設定は入るのですが、全部に設定されません。
>
>それは、ActiveSheetにのみ、ページ設定しているからです。
>
>>With ActiveSheet.PageSetup
>
>でも、最初に1回だけ、全シートで設定しておけば、
>印刷の都度、設定する必要がないと思います。
・ツリー全体表示

【80570】Re:複数選択したシートに、ページ番号の...
発言  マナ  - 19/3/11(月) 20:38 -

引用なし
パスワード
   ▼わか さん:

>印刷は選択したすべてが出ます。

印刷の部分は、ちゃんと選択したシートが対象になっているからです。

>  ActiveWindow.SelectedSheets.PrintOut Copies:=1


'-----

>1枚にページ設定は入るのですが、全部に設定されません。

それは、ActiveSheetにのみ、ページ設定しているからです。

>With ActiveSheet.PageSetup

でも、最初に1回だけ、全シートで設定しておけば、
印刷の都度、設定する必要がないと思います。
・ツリー全体表示

【80569】複数選択したシートに、ページ番号の設定...
質問  わか  - 19/3/11(月) 19:41 -

引用なし
パスワード
   初めまして。マクロ初心者です。
前任者が組んだマクロを参考に初めてマクロに挑戦しています。
うまく行かない作業があるため、どなたかご教授の方よろしくお願い致します。

同一エクセル内の複数あるシートの中で
任意のシートを「手動で選択」し
その後マクロで「ページ番号/総ページ」を設定し
印刷したいのですが、うまく作動できません。

以下、現在の状態です。

1枚にページ設定は入るのですが、全部に設定されません。
印刷は選択したすべてが出ます。


Sub ページ番号設定印刷()
'
' ページ番号設定印刷 Macro
'
With ActiveSheet.PageSetup
    .LeftHeader = ""
    .CenterHeader = ""
    .RightHeader = ""
    .LeftFooter = ""
    .CenterFooter = "&P/&N"
    .RightFooter = ""
    .LeftHeader = ""
  End With

  ActiveWindow.SelectedSheets.PrintOut Copies:=1
  
End Sub
・ツリー全体表示

【80568】Re:コマンドボタンで記録をしたいのですが
お礼  颯太  - 19/3/9(土) 15:08 -

引用なし
パスワード
   マナさん色々とありがとうございました!帰宅後に早速やってみたら出来ました。検索の方もやってみますね、本当にありがとうございました(^.^)
・ツリー全体表示

【80567】Re:コマンドボタンで記録をしたいのですが
発言  マナ  - 19/3/9(土) 13:32 -

引用なし
パスワード
   ▼颯太 さん:

検索すれば、他にもたくさんあります。
わかりやすいところを、さがすとよいです。
検索上手になることが上達の近道です。

www.sejuku.net/blog/34619
www.moug.net/tech/exvba/0050088.html
www.sejuku.net/blog/31704
・ツリー全体表示

【80566】Re:コマンドボタンで記録をしたいのですが
発言  颯太  - 19/3/9(土) 13:14 -

引用なし
パスワード
   最近始めたばかりなのですみません。今外出先なので帰宅してから試してみます!コード三種類有って全部違うように見えますけど同じ意味合いなんですね。ありがとうございました
・ツリー全体表示

【80565】Re:コマンドボタンで記録をしたいのですが
発言  マナ  - 19/3/9(土) 12:44 -

引用なし
パスワード
   ▼颯太 さん:

>初心者がこのような質問してすみません。

そういうことであれば、
まずは、単純な固定のセル範囲をコピーするマクロが
先ではないでしょうか。

1)コピー元.Copy 貼り付け先

Range("G8:G50").Copy Range("Z8").End(xlToLeft).Offset(, 1)

 
2)または
コピー元.Copy
貼り付け先.PasteSpecial xlPasteValues

Range("G8:G50").Copy
Range("Z8").End(xlToLeft).Offset(, 1).PasteSpecial xlPasteValues
Application.CutCopyMode = False


3)または
貼り付け先,Value = コピー元.value

Range("Z8").End(xlToLeft).Offset(, 1).Resize(43).Value = _
    Range("G8").Resize(43).Value
・ツリー全体表示

【80564】Re:コマンドボタンで記録をしたいのですが
発言  颯太  - 19/3/9(土) 11:58 -

引用なし
パスワード
   ▼マナ さん:
>▼颯太 さん:
>
>>未記録(空白)の列
>
>End(xlToLeft)で、データのある最終列を求めて
>その右横のセルに貼り付けると考えるとよいです。
>右横は、Offset(, 1)になります。
マナさん返信ありがとうございます!コマンドボタンのコードの表示内はどの様に記入したら良いでしょうか?初心者がこのような質問してすみません。
・ツリー全体表示

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