[[20250130085013]] 『クリップボードエラーがでます。』(別班の下請け) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『クリップボードエラーがでます。』(別班の下請け)

以下の質問の続きですが別件としました。

 『文脈を考えて適切な位置で分割したい』(別班の下請け)
  https://www.excel.studio-kazu.jp/kw/20250127084806.html

こちらで教えていただいたコードをお借りしてVBAを作成しました。

以下のコードでA列のセルが半角で52文字以上の場合は
テキストボックスの文字列の内容を見てカーソルで分割するようにしていますが
処理中にカーソル(ポインター)が「待ち状態」となり
以下の添付画像のような「クリップボードエラー」が出ます。

 添付画像
 https://imgur.com/e1Mrqg7

このエラー画面が出るとポインターが「待ち状態」なので
「今後表示しない」や「X」をクリックする事は出来ません。

エラーが表示されたまま暫く待つとエラー画面は消え去り
(カーソル(ポインター)は、「待ち状態」が消えて)

次の文字列がテキストボックスに表示されます。
(カーソルは正常な「テキスト選択」と変化する)

エラー表示は毎回出るわけでは無いようで
数回はエラーが出ない場合も有りますが
規則性が無いようでその後このエラー現象が最後まで続きます。
(実際は規則性があるのかもしれませんがよく判りません)
(処理自体は最後まで行われているのでEnd SUBで処理が終了します。)

コードに「クリップボードをクリア」を追加したりしましたが
無関係なのかエラーは無くなりませんでした。

昨日から試行錯誤しましたがエラーが出なくならないので
理由やコードを改善できればお願いします。

    For Each aCell In Range("A1", Cells(Rows.Count, "A").End(xlUp))
            aCellCount = aCellCount + 1
            If aCell.Value <> "" Then
                  cellContent = Trim(aCell)
                  ' LENB関数を使用して文字数バイト数を取得  (半角では何文字?)
                  byteCount = LenB(StrConv(cellContent, vbFromUnicode))

                  If byteCount <= 52 Then '半角で52文字以下の場合
                        rwToWrite = rwToWrite + 1

                        'B列にA列の文字列を転記
                        aCell.Copy Cells(rwToWrite, "B")
                  Else
                        'A列の文字列を赤色に変更
                        aCell.Font.Color = RGB(255, 0, 0)

                        UserForm1.TextBox1.Value = aCell.Value 'データをテキストボックスに転記
                        UserForm1.Show vbModal 'ユーザーフォーム表示
                  End If
            End If
      Next aCell

ユーザーフォームにテキストボックスとラベルを配置して
下記コードを記入

Private Sub UserForm_Initialize()

      Me.Label1.Caption = CStr(aCellCount) & "/" & CStr(UBound(lines))
      Me.Width = 550
      Me.Height = 120

      With Me.TextBox1
            .Width = 500
            .Height = 45
            .MultiLine = True
      End With
End Sub

Private Sub TextBox1_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)

    Dim LN As Long

    LN = TextBox1.SelStart 'クリックした文字位置をメモ

    rwToWrite = rwToWrite + 1
    Range("B" & rwToWrite).Value = Left(TextBox1.Value, LN) 'クリックした文字まで切り取って転記
    TextBox1.Value = Mid(TextBox1.Value, LN + 1, Len(TextBox1.Value)) '残りをテキストボックスに取り込む

    If Len(TextBox1.Value) <= 52 Then '残りが52文字以下の場合は、1件落着させて次に備える。
        If Len(TextBox1.Value) > 0 Then
            rwToWrite = rwToWrite + 1
            Range("B" & rwToWrite).Value = TextBox1.Value
        End If

        Unload Me
    End If

    Application.CutCopyMode = False   'クリップボードをクリア
End Sub

< 使用 Excel:Excel2021、使用 OS:Windows11 >


 コピペせず(クリップボードを使用せず)、直接セルのValueプロパティに代入するようにしては。

(tkit) 2025/01/30(木) 09:27:27


 当該事象については、
[[20240921053711]]の
 (xyz) 2024/09/23(月) 20:51:13
 記事を参考にしてください。

 既に指摘いただいているように、
 Copyメソッドを使わずに、セルに値を代入すると避けられると思います。

(xyz) 2025/01/30(木) 09:30:58


tiketさん、xyzさん、アドバイスありがとうございます。

エラーが出るのは貼っていただいた記事から以下で原因が分かりました。
https://officesupportjp.github.io/blog/cl0m4xkl2003deovs5ntr794w/

「直接セルのValueプロパティに代入するよに」すればエラーが回避できるようなので
以下を考えてみましたがエラーが発生します。

Private Sub TextBox1_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)

    Dim LN As Long

    LN = TextBox1.SelStart ' クリックした文字位置をメモ

    rwToWrite = rwToWrite + 1
    Cells(rwToWrite, 2).Value = Left(TextBox1.Value, LN) ' クリックした文字まで切り取って転記 (B列に代入)
    TextBox1.Value = Mid(TextBox1.Value, LN + 1, Len(TextBox1.Value)) ' 残りをテキストボックスに取り込む

    If Len(TextBox1.Value) <= 52 Then ' 残りが52文字以下の場合は、1件落着させて次に備える。
        If Len(TextBox1.Value) > 0 Then
            rwToWrite = rwToWrite + 1
            Cells(rwToWrite, 2).Value = TextBox1.Value ' 残りの文字列をB列に代入
        End If

        Unload Me
    End If
End Sub

(別班の下請け) 2025/01/30(木) 11:15:04


 >「直接セルのValueプロパティに代入するよに」すればエラーが回避できるようなので
 > 以下を考えてみましたがエラーが発生します。

 どういった番号、コメントのエラーですか?

 その際、どこのコードがハイライトされますか?

 その際、各変数の値は想定した値ですか?

(tkit) 2025/01/30(木) 11:52:00


 修正する箇所は、

  'B列にA列の文字列を転記
  aCell.Copy Cells(rwToWrite, "B")
 ここじゃないんですか?
(xyz) 2025/01/30(木) 12:08:29

コードの変更箇所が間違っているとのアドバイスありがとうございます。

ユーザーフォームに飛んだ後でエラーが出ていると思ったので
それ以前に原因があるとは思わず
関係ない部分訂正しようとしてもエラーが止まらないのがご指摘を受けて理解できました。

コピペを使わない以下のコードに変換したのでエラーが出なくなりました。

                        'B列にA列の文字列を転記
                        'コピペせず(クリップボードを使用せず)、直接セルのValueプロパティに代入
                        Cells(rwToWrite, "B").Value = aCell.Value

’-----------------------------------------
エラーが取れないので参照先の情報に有る以下を行うのも
視野に入れていましたがこれで解決できたと思います。

エラーを表示させなくてもエラーが出るだけで
処理自体はうまく出来ているとの理解は正しいですか?

補足) Excel でエラーメッセージを表示しない方法
<レジストリ>
キー: HKEY_CURRENT_USER\Software\Microsoft\Office\16.0\Excel\Options
名前: SkipClipboardLockedError
種類: REG_DWORD
値 : 1
(別班の下請け) 2025/01/30(木) 12:33:08


tkitさんへの回答です。

>どういった番号、コメントのエラーですか?

以下の添付図の画像を参照ください

  添付画像
 https://imgur.com/e1Mrqg7

>その際、どこのコードがハイライトされますか?

エラー画像(添付図)が出た後は、
カーソル(ポインター)は、「待ち状態」でコードがハイライトされる状況ではありません。

>その際、各変数の値は想定した値ですか?

ctrl+breakで強制終了しないと上記の状態なのでチェックできませんでした。

エラーが出るのはすでに教えていただいた以下のURLに尽きると思います。
https://officesupportjp.github.io/blog/cl0m4xkl2003deovs5ntr794w/
(別班の下請け) 2025/01/30(木) 12:40:24


 貴方のコード変更のミスで、継続してクリップボードのエラーが発生し、
 コードを修正して解決したこと、理解しました。
 同じエラーだと忖度できませんでした。

 >エラーを表示させなくてもエラーが出るだけで
 >処理自体はうまく出来ているとの理解は正しいですか?

 間違っています。
 処理が失敗した(する)からエラーが発生です。
 また、エラーをレジストリで非表示にすることは推奨できません。
 本件以外の何かしらでエラーが発生する可能性が0ではないからです。
(tkit) 2025/01/30(木) 13:59:53

tiketさん、ごめんなさい。

質問内容に真のエラー箇所が含まれておらず、
別件の内容を知らないと忖度出来なくて当然だと思います。

エラー表示が出ても処理自体は最後まで行われるので
エラー表示の内容では、
 「 このブック内にコンテンツを貼り付けすることは出来ます」
と表示されているので
エラーは出るが処理自体=コピペは出来ていると判断しましたが
間違った判断と言う回答ですね。

エラー表示は、英語を日本語にしているので判断に迷う内容と感じます。

>エラーをレジストリで非表示にすることは推奨できません。
  
  レジで非表示にするのはリスクがあるので止めにします。

(別班の下請け) 2025/01/30(木) 14:40:36


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.