Excel VBA質問箱 IV

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

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


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

【77560】Re:コメントサイズの自動調整エラー
お礼  くまさん  - 15/10/22(木) 16:49 -

引用なし
パスワード
   ▼ウッシ さん:
すいません、ブックを再作成するという考えが思いつきませんでした。
しかし、お陰様で色々勉強になりました。ありがとうございました。
・ツリー全体表示

【77559】マクロ実行後に「応答なし」
質問  viaggio  - 15/10/22(木) 16:33 -

引用なし
パスワード
   作成したマクロを実行し問題なく処理完了はするのですが、
その後、しばらく(1〜2分ほど)「応答なし」となり動作が止まります。
同一ファイルでも、同じような現象が起きるマクロと起きないマクロがあります。
原因や解決策、わかりましたら教えてください。
現象が起きるマクロの一例↓
------------------------------------------------------------
Sub 選択した項目の前回登録情報をコピー()

Application.EnableEvents = False
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False

bName = Excel.ActiveWorkbook.Name
sName = Excel.ActiveSheet.Name

S_R = Selection(1).Row
E_R = Selection(Selection.Count).Row
S_C = Selection(1).Column
E_C = Selection(Selection.Count).Column

rc = MsgBox("選択しているセルの内容を、前回登録時の情報に書き換えます。" & (Chr(10) & Chr(13)) & _
"この機能はセルの位置が完全一致している時のみ使用できます。" & (Chr(10) & Chr(13)) & _
"よろしければ[OK]を押下してください。", vbOKCancel + vbQuestion, "※要注意※")
  
    If rc = vbOK Then
    
     GoTo LABEL_1
      
      Else
     
     MsgBox "処理を中断します"
     Exit Sub
     End If

LABEL_1:
  
  Windows("151022_同一再稼働支援ツール.xlsm").Activate
  Worksheets("登録票").Activate
  Range(Cells(S_R, S_C), Cells(E_R, E_C)).Select

  Selection.Copy
  Windows(bName).Activate
  Worksheets(sName).Activate
  Range(Cells(S_R, S_C), Cells(E_R, E_C)).Select
  
  Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
    xlNone, SkipBlanks:=False, Transpose:=False
    
    Application.EnableEvents = True
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True

End Sub
・ツリー全体表示

【77558】Re:コメントサイズの自動調整エラー
回答  ウッシ  - 15/10/22(木) 15:56 -

引用なし
パスワード
   こんにちは

こちらでエラーが再現出来ない時点でブックを再作成して貰った方がいい
とは思ってたのですが・・・・

でも、コードも大分整理されましたし良かったですね。
・ツリー全体表示

【77557】Re:コメントサイズの自動調整エラー
お礼  くまさん  - 15/10/22(木) 15:22 -

引用なし
パスワード
   ▼ウッシ さん:
こんにちは。
コメントを設定するブックを新規に作りなおしたところ、なんと解決いたしました。
過去にxlsからxlsxに変換したのが影響していたのでしょうか・・・

結局原因のわからないままでしたが、長いことお付き合いいただきまして本当にありがとうございました。不具合としては大したことありませんでしたが、ずっと気になってはいたのでスッキリしました。
・ツリー全体表示

【77556】Re:メール自動作成マクロの質問です
発言  γ  - 15/10/21(水) 20:54 -

引用なし
パスワード
   >・件名に「日報」と今日の日付(MM月DD日(aaa)のフォーマット)が自動で入力される。
これは
  MsgBox "日報 " & Format(Date, "MM月DD日(aaa)")
が参考になるでしょう。

>  時間が入っているセルにはHH:MMのフォーマットで出力
> 10行目からのセルには
> 9:00 〜 9:15
> ○朝会    
> =C10 〜 0:00                
> みたいな感じで格納されています。

ここがわからない。
(1)列は複数にわたっているのですね。
(2)文字列と文字列の間はどうするのですか?
  各セルの.Textプロパティを単純に連結するのではだめなの?
(3) =C10 と突然、式のようなものがでてきているが、意味不明。

DataObjectを利用する方法もあるけど、まずは、
普通に繰り返しで、文字列を連結していったらどうでしょう。
・ツリー全体表示

【77555】Re:自動作成メールに複数のCCを入れるには
発言  γ  - 15/10/21(水) 20:44 -

引用なし
パスワード
   >初めてマクロに挑戦する超初心者です。
それにしては最初から高度なことをされるんですね。
すごいですね。

>  "cc=" & MailCC1 & "," MailCC2 &"," & _
よく読んでいませんが、
カンマではなく、セミコロン ";" で連結するのでは?
・ツリー全体表示

【77554】自動作成メールに複数のCCを入れるには
質問  hanako  - 15/10/21(水) 20:30 -

引用なし
パスワード
   はじめて投稿します。
初めてマクロに挑戦する超初心者です。
よろしくお願いします。

現在サンダーバードを使用して
メールを自動作成させるマクロを作っているのですが、
CCが複数ある場合はどのようにプログラムを書けばいいのでしょうか。

現在以下のように書いているのですが、
メールにはCC1しか反映されません。

おそらく最下段のShell sPath〜のCCの定義の
書き方に問題があると思われますが、分かりません。

Dim sPath As String
  Dim Mailad As String
  Dim MailCC1 As String
  Dim MailCC2 As String
  Dim MaikCC3 As String
  Dim strTITLE As String
  Dim strDOC As String
  Dim strWORK As String
  Dim stryLINE As Integer
  
  sPath = """C:\Program Files (x86)\Mozilla Thunderbird\thunderbird.exe"" -compose "
  
  
  '宛先アドレス
  Mailad = "aaa@xxx.co.jp";
  MailCC1 = "bbb@xxx.com";
  MailCC2 = "ccc@xxx.co.jp";
  MailCC3 = "ddd@xxx.co.jp";
  '件名
  strTITLE = Trim(Sheets("あいうえお").Range("B7"))
  '本文作成
  strDOC = " "
  For stryLINE = 10 To 29
  strWORK = Sheets("あいうえお").Cells(stryLINE, "A")
  If strWORK = "↑ここまで" Then Exit For
  strDOC = strDOC & strWORK & vbCrLf
 Next stryLINE
 
 Shell sPath & "to=" & Mailad & "," & _
        "cc=" & MailCC1 & "," MailCC2 &"," & _
         "subject=""" & strTITLE & """," & _
         "body=""" & strDOC & """"
  
End Sub

どうぞ宜しくお願いいたします。
・ツリー全体表示

【77553】Re:コメントサイズの自動調整エラー
回答  ウッシ  - 15/10/21(水) 18:45 -

引用なし
パスワード
   こんばんは

そのエラーは存在しないシートやセルやオブジェクトに対する処理で起きていると考えられます。

無関係だとは思いますが参照設定に参照不可の項目は無いですか?

ちょっと他に思い付かないのですが、コメントを設定するブックを新規に作り直してテストしてみてどうなるか試してみて下さい。
・ツリー全体表示

【77552】Re:コメントサイズの自動調整エラー
発言  くまさん  - 15/10/21(水) 18:11 -

引用なし
パスワード
   ▼ウッシ さん:
ありがとうございます。読みやすいコードが書けるように努力します。

早速記述頂いたコードで実行してみましたが、2回目(主要な製品の在庫シートへの)のコメント書き込み時にエラーが起こりました。エラーの箇所は下記の追加した部分です。

xlRange.Comment.Shape.TextFrame.AutoSize = False

エラーの内容はTrueに書き換える際に出ていたのと同じエラーでした。”実行時エラー'1004': アプリケーション定義またはオブジェクト定義のエラーです。”
・ツリー全体表示

【77551】Re:コメントサイズの自動調整エラー
回答  ウッシ  - 15/10/21(水) 16:48 -

引用なし
パスワード
   こんにちは

コード綺麗になってきましたね。
後はインデント揃えると見易くなりますね。

と言っても、エラーの原因は分かりません・・・

無駄な処理ですけど、一旦内容クリアしてセットしなおしてから
コメント欄のサイズを自動調整するとどうなりますか?

'コメントが既にあるかないかで新規記入か追記かを判断しています。
    If xlRange.Comment Is Nothing Then
      xlRange.AddComment Text:=ComTxt
    Else
      If ComTxt = "" Then
        ComTxt = xlRange.Comment.Text
      Else
        ComTxt = xlRange.Comment.Text & vbCrLf & ComTxt
      End If
      xlRange.Comment.Text Text:=""
      xlRange.Comment.Shape.TextFrame.AutoSize = False
      xlRange.Comment.Text Text:=ComTxt
    End If
'コメント欄のサイズを自動調整します。ここでエラー発生(2回めのみ)。
    xlRange.Comment.Shape.TextFrame.AutoSize = True
・ツリー全体表示

【77550】Re:コメントサイズの自動調整エラー
発言  くまさん  - 15/10/21(水) 16:18 -

引用なし
パスワード
   ▼ウッシ さん:
毎度丁寧にアドレスいいただきありがとうございます。
最初の行でActiveSheetをPrtSheetというワークシートオブジェクトに代入し、以降使用を止めました。
その上で書き込んで頂いたコードを試しましたが、xlRangeのアドレス、加算セルのアドレス共に意図した通りのアドレスが表示されることを確認いたしました。

念のため書き直したコード全てを下記に記載します。


  Dim PrtSheet As Worksheet
Private Sub Workbook_BeforePrint(Cancel As Boolean)
  Dim xlSheet As Worksheet
  Dim yer As String
  Dim mon As String
  Dim item(4) As Object
  Dim i As Long
  i = 1
  Dim objx As Object
  Dim objy As Object
  Dim WMon As Long
  Dim WItem As Long
  
'PrtSheetには受注明細を記載したシートがセットされます。
  Set PrtSheet = ActiveSheet
  PrtSheet.PageSetup.BlackAndWhite = True

'受注明細を記載したシートのタブの色が赤の時のみ実行されるようにしています。
  If PrtSheet.Tab.ColorIndex = 3 Then
'xlSheetには1つ目のファイルの出荷履歴のシートがセットされます。
    Set xlSheet = ThisWorkbook.Worksheets("商品マスター")
    With PrtSheet
'yerには受注明細シートに記載されている納入年を、monには納入月が代入されます。それらの変数を使用し、出荷数を記入すべき出荷履歴シートのX軸を検索します。
      yer = Year(.Range("B5"))
      mon = Month(.Range("B5"))
      Set objx = xlSheet.Cells.Find(What:=DateValue(yer & "/" & mon & "/1"), SearchOrder:=xlByRows, LookIn:=xlFormulas)
'itemには製品コードが入ります。受注明細には最大4製品の売上まで1つのシートに記入できるので、item(4)まで有ります。それらの変数を使用し、出荷数を記入すべき出荷履歴シートのY軸を検索します。
      Set item(1) = .Range("B9")
      Set item(2) = .Range("B14")
      Set item(3) = .Range("B19")
      Set item(4) = .Range("B24")
      Do Until item(i) = ""
        Set objy = xlSheet.Cells.Find(What:=item(i), SearchOrder:=xlByColumns)
'検索されたX軸、Y軸の行、列の情報をそれぞれWMonとWItemに代入します
        WMon = objx.Column
        WItem = objy.Row
'出荷数量、コメント書き込みのプロージャーを呼び出します。
        Call WComment(xlSheet, WItem, WMon, item(), i)
'2つ目のファイルに記入するプロージャーを呼び出します
        Call Standard(mon, item(), i)
        
        i = i + 1
      Loop
'受注明細に印刷日時を記入し、タブの色をオレンジに変更します。
    .Range("I2") = Date
    .Tab.ColorIndex = 7
    End With
    ThisWorkbook.Activate
  End If
End Sub

'----------------------------------------------------------------------------

Sub Standard(mon As String, item() As Object, i As Long)
  Dim xlSheet As Worksheet
  Dim objx As Object
  Dim objy As Object
  Dim WMon As Long
  Dim WItem As Long
  
'Function IsBookOpenを使用し、既にファイルが開いているかを確認し、ファイルを開きます。
  If IsBookOpen("RFMラドル出荷状況一覧.xlsx") = False Then
    Workbooks.Open Filename:="C:\Users\Yusuke Kumano\Dropbox\RFMラドル出荷状況一覧.xlsx"
  End If
  
  With PrtSheet
'xlSheetに主要な製品の在庫数を記載したシートをセットします。
    Set xlSheet = Workbooks("RFMラドル出荷状況一覧.xlsx").Worksheets("標準品在庫")
'objxにコメントを書き込むX軸(売上月)の位置を検索します。
'objyにコメントを書き込むY軸(製品)の位置を検索します。
    Set objx = xlSheet.Cells.Find(mon & "月", SearchOrder:=xlByRows, LookAt:=xlWhole)
    Set objy = xlSheet.Cells.Find(item(i), SearchOrder:=xlByColumns, LookAt:=xlWhole)
'主要な製品ではければ、Subを抜けます。
    If objy Is Nothing Then
      Exit Sub
    End If
'WMonに出荷数量とコメントを書き込む列を、WItemに行をいれます。
    WMon = objx.Column + 1
    WItem = objy.Row
'出荷数量、コメント書き込みのプロージャーを再度呼び出します。
    Call WComment(xlSheet, WItem, WMon, item(), i)
    
  End With
End Sub

'----------------------------------------------------------------------------

Function IsBookOpen(strBookName As String) As Boolean
  Dim objBook As Workbook

  IsBookOpen = False

  For Each objBook In Workbooks
    If objBook.Name = strBookName Then
      IsBookOpen = True
    Exit For
  End If
  Next
End Function

'----------------------------------------------------------------------------

Sub WComment(xlSheet As Worksheet, WItem As Long, WMon As Long, item() As Object, i As Long)
  Dim xlRange As Range
  Dim ComTxt As String

'PrtSheetは1つ目のファイルにある売上詳細を記入したワークシートです。
  With PrtSheet
'xlSheetは出荷履歴(在庫数)をまとめたシートがセットされています。WMonは出荷月、WItemは売上製品です。
    Set xlRange = xlSheet.Cells(WItem, WMon)
    MsgBox "xlRangeのアドレスは-----" & xlRange.Address(0, 0, xlA1, True)
    MsgBox "加算セルのアドレスは-----" & .Range("F" & item(i).Row).Address(0, 0, xlA1, True)
'xlRangeに既に数字(出荷数)が記入されている場合、加算します。
    xlRange.Value = .Range("F" & item(i).Row).Value + xlRange.Value
'ComTxt(コメント内容)はPrtSheet(売上明細シート)に記載されている日付:.Range("D5")、客先:.Range("D5")、出荷数:.Range("F" & item(i).Row)を記載します。
    ComTxt = .Range("B5") & " " & .Range("D5") & " " & .Range("F" & item(i).Row).Value & "PC"
'コメントが既にあるかないかで新規記入か追記かを判断しています。
    If xlRange.Comment Is Nothing Then
      xlRange.AddComment Text:=ComTxt
    Else
      xlRange.Comment.Text Text:=xlRange.Comment.Text & vbCrLf & ComTxt
    End If
'コメント欄のサイズを自動調整します。ここでエラー発生(2回めのみ)。
    xlRange.Comment.Shape.TextFrame.AutoSize = True
  End With
End Sub


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

【77548】Re:メール自動作成マクロの質問です
発言  SHO  - 15/10/21(水) 10:00 -

引用なし
パスワード
   遅くなりましたが質問させていただいたソースコードを掲載します


Sub MAKE_MAIL_ITEM()

Dim oApp As Object
Dim myNameSpace As Object
Dim myFolder As Object

Dim objMAIL As Object
Dim strMOJI As String

Set oApp = CreateObject("Outlook.Application")

Set myNameSpace = oApp.GetNameSpace("MAPI")
Set myFolder = myNameSpace.GetDefaultFolder(6)
myFolder.Display

Set objMAIL = oApp.CreateItem(0)
objMAIL.To = ""
objMAIL.subject = ""
'objMAIL.Attachments.Add "C:\あああ.xls"

strMOJI = ""

objMAIL.body = strMOJI
objMAIL.Display

Set oApp = Nothing
Set myFolder = Nothing
Set objMAIL = Nothing


End Sub


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

【77547】Re:コメントサイズの自動調整エラー
回答  ウッシ  - 15/10/20(火) 15:31 -

引用なし
パスワード
   こんにちは

Sub WComment(xlSheet As Worksheet, WMon As Long, WItem As Long, item() As Object, i As Long)
  Dim xlRange As Range
  Dim ComTxt As String
  
  'ActiviSheetは1つ目のファイルにある売上詳細を記入したワークシートです。
  With ActiveSheet
    'xlSheetは出荷数をまとめたシートです。WMonは出荷月、WItemは売上製品です。(シートには出荷月・売上製品ごとに出荷数をまとめています。)
    Set xlRange = xlSheet.Cells(WMon, WItem)
    'xlRangeに既に数字(出荷数)が記入されている場合、加算します。
    MsgBox "xlRangeのアドレスは-----" & xlRange.Address(0, 0, xlA1, True)
    MsgBox "加算セルのアドレスは-----" & .Range("F" & item(i).Row).Address(0, 0, xlA1, True)
    xlRange = .Range("F" & item(i).Row).Value + xlRange.Value

として、それぞれのセルのアドレスが正しいか確認して下さい。

また、全体的にコードを見直して、ActiveSheetという部分を

ThisWorkbook.Worksheets("受注明細シート")
とか、
Workbooks("主要な製品在庫.xlsx").Worksheets("標準品在庫")
のように、

実際にActiveSheetであって欲しいシートを指定するようにしてみて下さい。
・ツリー全体表示

【77546】Re:コメントサイズの自動調整エラー
発言  くまさん  - 15/10/20(火) 14:25 -

引用なし
パスワード
   ▼ウッシ さん:
レスありがとうございます。

1つ目のファイルはThisWorkbookです。2つ目のファイルは別ファイルです。

Private Subの中で売上明細からyer(売上年)、mon(売上月)、item(製品コード)、WMon&WItem(書き込み行列)を取得して、Sub Wcommentを呼び出し、出荷数とコメント入力を行っています。
その後、Sub Standardを呼び出しPrivate Subの中で取得したmon(売上月)とitem(製品コード)を引数として割り当て、それを元にWMon&WItem(書き込み行列)を取得します。
主要な製品ではないものは下記コードでSub Standardを抜けるようになっているので、書き込みされません。
Set objy = xlSheet.Cells.Find(item(i), SearchOrder:=xlByColumns, LookAt:=xlWhole)
If objy Is Nothing Then
  Exit Sub
End If
・ツリー全体表示

【77545】Re:コメントサイズの自動調整エラー
回答  ウッシ  - 15/10/20(火) 13:58 -

引用なし
パスワード
   こんにちは

1つ目・2つ目のファイル書き込み時とはどこで行っている処理なのですか?

Private Sub Workbook_BeforePrint(Cancel As Boolean)
には、1つ目のファイル
Set xlSheet = ThisWorkbook.Worksheets("商品マスター")
のコードしか無いですよね?


Sub Standard(mon As String, item() As Object, i As Long)
と、
Private Sub Workbook_BeforePrint(Cancel As Boolean)
の関連はどうなっていますか?
・ツリー全体表示

【77544】Re:コメントサイズの自動調整エラー
発言  くまさん  - 15/10/20(火) 13:22 -

引用なし
パスワード
   ▼ウッシ さん:

丁寧なご説明ありがとうございます。
確認いたしましたところ、1つ目・2つ目のファイル書き込み時共に下記変数には適切な引数が代入されておりました。
xlSheet, WItem, WMon, item(i)

xlSheet
1回目書き込み時 : "商品マスター"(正しいシート名)
2回目書き込み時 : "標準品在庫"(正しいシート名)

WItem, WMon
1回目書き込み時 : "4", "51"(正しい行と列)
2回目書き込み時 : "8", "13"(正しい行と列)

item(i)
1回目・2回目書き込み時とも同じ正しい製品コード

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

【77543】Re:コメントサイズの自動調整エラー
回答  ウッシ  - 15/10/20(火) 12:05 -

引用なし
パスワード
   こんにちは

Set xlSheet = ThisWorkbook.Worksheets("商品マスター")

マクロがセットされたブックの「商品マスター」シートで良いのか?

    With ActiveSheet
      yer = Year(.Range("B5"))
      mon = Month(.Range("B5"))

アクティブシートは意図したシートなのか?

年月はそのシートのセルB5から取得でいいのか?

  Set objx = xlSheet.Cells.Find(What:=DateValue(yer & "/" & mon & "/1"), SearchOrder:=xlByRows, LookIn:=xlFormulas)

商品マスタシート上の意図したセル(該当年月初日)が検索されているか
チェックする。

itemにはアクティブシートのセルB9等がセットされているか。

Set objy = xlSheet.Cells.Find(What:=item(i), SearchOrder:=xlByColumns)

で、商品マスタシート上の意図したセル(製品コード)が検索されているか
チェックする。

上記の内容が正しければ、

'コメント記入のプロージャーを呼び出します。
        Call WComment(xlSheet, WItem, WMon, item(), i)

に、正しい引数がセットされるはずです。
・ツリー全体表示

【77542】Re:コメントサイズの自動調整エラー
発言  くまさん  - 15/10/20(火) 11:54 -

引用なし
パスワード
   ▼ウッシ さん:
すいませんが、どの部分を確認すればよいか教えて頂けますでしょうか?
・ツリー全体表示

【77541】Re:コメントサイズの自動調整エラー
回答  ウッシ  - 15/10/20(火) 11:29 -

引用なし
パスワード
   こんにちは

xlRangeに何がセットされるのかステップ実行で確認して下さい。
・ツリー全体表示

【77540】Re:コメントサイズの自動調整エラー
発言  くまさん  - 15/10/20(火) 11:24 -

引用なし
パスワード
   ▼ウッシ さん:
アドバイスありがとうございます。
早速試したところ、
1つ目のファイル(Thisworkbook)に書き込む際は、該当のセルがアクティブになりましたが、2つ目のファイルに書き込む際はアクティブになっていませんでした。

>こんにちは
>
>'コメント欄のサイズを自動調整します。ここでエラー発生(2回めのみ)。
>xlRange.Comment.Shape.TextFrame.AutoSize = True
>
>の前に、Application.GoTo xlRange, True
>と入れて実行して、該当のセルがアクティブになるか確認して下さい。
・ツリー全体表示

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