<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>エラー アーカイブ - nyanblog ~にゃんぶろぐ~</title>
	<atom:link href="https://nyanblog2222.com/tag/%E3%82%A8%E3%83%A9%E3%83%BC/feed/" rel="self" type="application/rss+xml" />
	<link>https://nyanblog2222.com/tag/エラー/</link>
	<description>ちょっとしたことを調べているよ</description>
	<lastBuildDate>Tue, 23 Nov 2021 13:38:23 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.7</generator>

<image>
	<url>https://nyanblog2222.com/wp-content/uploads/2021/09/cropped-favicon-32x32.png</url>
	<title>エラー アーカイブ - nyanblog ~にゃんぶろぐ~</title>
	<link>https://nyanblog2222.com/tag/エラー/</link>
	<width>32</width>
	<height>32</height>
</image> 
<atom:link rel="hub" href="https://pubsubhubbub.appspot.com"/><atom:link rel="hub" href="https://pubsubhubbub.superfeedr.com"/><atom:link rel="hub" href="https://websubhub.com/hub"/>	<item>
		<title>【Access】Dcount「クエリ パラメーターとして指定した式でエラー &#8216;xxx&#8217; が発生しました。」対処方法</title>
		<link>https://nyanblog2222.com/office/4300/</link>
					<comments>https://nyanblog2222.com/office/4300/#respond</comments>
		
		<dc:creator><![CDATA[nyan2222]]></dc:creator>
		<pubDate>Tue, 23 Nov 2021 13:34:57 +0000</pubDate>
				<category><![CDATA[Access]]></category>
		<category><![CDATA[Office]]></category>
		<category><![CDATA[VBA]]></category>
		<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[Dcount]]></category>
		<category><![CDATA[エラー]]></category>
		<guid isPermaLink="false">https://nyanblog2222.com/?p=4300</guid>

					<description><![CDATA[<p><img src="https://nyanblog2222.com/wp-content/uploads/2022/11/46.png" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="" decoding="async" fetchpriority="high" srcset="https://nyanblog2222.com/wp-content/uploads/2022/11/46.png 1280w, https://nyanblog2222.com/wp-content/uploads/2022/11/46-300x157.png 300w, https://nyanblog2222.com/wp-content/uploads/2022/11/46-1024x536.png 1024w, https://nyanblog2222.com/wp-content/uploads/2022/11/46-768x402.png 768w" sizes="(max-width: 1280px) 100vw, 1280px" />今回はAccessVBAでDcount関数を使用したときに、 「実行時エラー &#8216;2471&#8217;: クエリ パラメーターとして指定した式でエラー &#8216;xxx&#8217; が発生しました。」  [&#8230;]</p>
<p>投稿 <a href="https://nyanblog2222.com/office/4300/">【Access】Dcount「クエリ パラメーターとして指定した式でエラー &#8216;xxx&#8217; が発生しました。」対処方法</a> は <a href="https://nyanblog2222.com">nyanblog ~にゃんぶろぐ~</a> に最初に表示されました。</p>
]]></description>
										<content:encoded><![CDATA[<img src="https://nyanblog2222.com/wp-content/uploads/2022/11/46.png" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="" decoding="async" srcset="https://nyanblog2222.com/wp-content/uploads/2022/11/46.png 1280w, https://nyanblog2222.com/wp-content/uploads/2022/11/46-300x157.png 300w, https://nyanblog2222.com/wp-content/uploads/2022/11/46-1024x536.png 1024w, https://nyanblog2222.com/wp-content/uploads/2022/11/46-768x402.png 768w" sizes="(max-width: 1280px) 100vw, 1280px" />
<p> 今回はAccessVBAでDcount関数を使用したときに、 <br><span class="marker-under-red"><span class="marker-under-red">「実行時エラー &#8216;2471&#8217;: クエリ パラメーターとして指定した式でエラー<span class="marker-under-red"> &#8216;xxx&#8217; が発生しました。</span>」</span></span> とエラーコードがでてしまった場合の対処方法を紹介します。 </p>



<figure class="wp-block-image size-full"><img decoding="async" width="488" height="236" src="https://nyanblog2222.com/wp-content/uploads/2021/11/2021112301.png" alt="" class="wp-image-4308" srcset="https://nyanblog2222.com/wp-content/uploads/2021/11/2021112301.png 488w, https://nyanblog2222.com/wp-content/uploads/2021/11/2021112301-300x145.png 300w" sizes="(max-width: 488px) 100vw, 488px" /></figure>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-2" checked><label class="toc-title" for="toc-checkbox-2">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">DCount関数の使い方</a></li><li><a href="#toc2" tabindex="0">エラーの原因は？どんな状況で発生する？</a></li><li><a href="#toc3" tabindex="0">対処方法</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">DCount関数の使い方</span></h2>



<p>対処方法を紹介する前に、簡単に使い方を紹介します。</p>



<div class="wp-block-cocoon-blocks-blank-box-1 blank-box block-box">
<p id="block-17ea28f9-618d-416b-9b70-0ecef29269f3"><span class="bold-red">DCount ( expr , domain [, criteria] )</span></p>



<p id="block-e7817aa2-83b0-4993-a141-dc49e5a3c1ee">・expr：必須。 レコード数をカウントするフィールド。「*」可<br>　　　　（テーブル内のフィールド、フォームのコントロール、定数、関数）<br>・domain：必須。テーブル名やクエリ名<br>・criteria：省略可能。 DCount関数が実行されるデータの範囲を制限するために使用される文字列式。</p>



<p><a href="https://support.microsoft.com/ja-jp/office/dcount-%E9%96%A2%E6%95%B0-f6b5d78b-ad0b-4e42-be7a-11a64acbf3d3">（Microsoft Doc：DCount 関数より）</a></p>
</div>



<p>Dcount関数は、<br>テーブル等（domain）のフィールド（expr）で値があるレコード、かつ条件（criteria）に合致するレコード数を取得します。</p>



<p>例えば、以下の「社員情報」テーブルで「氏名」フィールドをカウントし、<br>11000以上の社員NOを取得するときは、このように指定します。</p>



<p>・社員情報</p>



<figure class="wp-block-table"><table><thead><tr><th>社員NO</th><th>氏名</th></tr></thead><tbody><tr><td>10001</td><td>山田</td></tr><tr><td>15000</td><td>今村</td></tr><tr><td></td><td>花輪</td></tr><tr><td>14720</td><td></td></tr><tr><td>93745</td><td>船井</td></tr></tbody></table></figure>



<p>・コード</p>



<pre class="wp-block-code plaintext"><code>Sub DCount_OK()

    Dim Tmp As Long
    
    Tmp = DCount("氏名", "社員情報", "社員NO &gt; 11000")
    
    Debug.Print Tmp

End Sub</code></pre>



<p>結果は「2」です。</p>



<p>ここで、例では各要素がダブルコーテーション（&#8221;）でくくられていることがわかると思いますが、<br><span class="marker-under">Dcount関数を記述する際に一癖あるのが、各要素が文字列であることです。</span></p>



<h2 class="wp-block-heading"><span id="toc2">エラーの原因は？どんな状況で発生する？</span></h2>



<p>私の場合、<span class="marker-under">変数を使って条件を可変にしようとした際にエラー</span>がでました。</p>



<p>前述のDcount関数の使い方にも記述しましたが、<br>Dcount関数は各要素に文字列を入れる必要があります。</p>



<p>そこで、条件の文字列の中に変数名を入れてしまうと、<br>「’変数名’という値と比較できないよ！」とエラーが出てしまいます。<br>なんとなく、「&#8221;A &gt; 999&#8243;」という書き方ができるため、変数でもいけるのでは？と思ったのが間違いでした。</p>



<p>・コード（誤った例）</p>



<pre class="wp-block-code"><code>Sub DCount_Err()

    Dim Tmp As Long
    
    Dim TestErr As Long
    TestErr = 11000
    
    Tmp = DCount("氏名", "社員情報", "社員NO &gt; TestErr")
    
    Debug.Print Tmp

End Sub</code></pre>



<p>・エラーメッセージ</p>



<figure class="wp-block-image size-full"><img decoding="async" width="488" height="236" src="https://nyanblog2222.com/wp-content/uploads/2021/11/2021112301.png" alt="" class="wp-image-4308" srcset="https://nyanblog2222.com/wp-content/uploads/2021/11/2021112301.png 488w, https://nyanblog2222.com/wp-content/uploads/2021/11/2021112301-300x145.png 300w" sizes="(max-width: 488px) 100vw, 488px" /></figure>



<h2 class="wp-block-heading"><span id="toc3">対処方法</span></h2>



<p>対処方法ですが、<br>以下のように<span class="marker-under">変数部分を文字列と「＆」で結合させる</span>と正しく出力されます。</p>



<pre class="wp-block-code"><code>Sub DCount_Err()

    Dim Tmp As Long
    
    Dim TestErr As Long
    TestErr = 11000
    
    Tmp = DCount("氏名", "社員情報", "社員NO &gt; " &amp; TestErr)
    
    Debug.Print Tmp

End Sub
</code></pre>



<p>これで、繰り返し処理などで可変の値が入っても対応することができます。</p>
<p>投稿 <a href="https://nyanblog2222.com/office/4300/">【Access】Dcount「クエリ パラメーターとして指定した式でエラー &#8216;xxx&#8217; が発生しました。」対処方法</a> は <a href="https://nyanblog2222.com">nyanblog ~にゃんぶろぐ~</a> に最初に表示されました。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://nyanblog2222.com/office/4300/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>【対処方法】このプロジェクトのコードは、64ビットシステムで&#8230;【Declare,PrtSafe】</title>
		<link>https://nyanblog2222.com/programming/vba/2666/</link>
					<comments>https://nyanblog2222.com/programming/vba/2666/#respond</comments>
		
		<dc:creator><![CDATA[nyan2222]]></dc:creator>
		<pubDate>Sat, 19 Dec 2020 23:54:42 +0000</pubDate>
				<category><![CDATA[Access]]></category>
		<category><![CDATA[Excel]]></category>
		<category><![CDATA[Office]]></category>
		<category><![CDATA[VBA]]></category>
		<category><![CDATA[64bit]]></category>
		<category><![CDATA[エラー]]></category>
		<guid isPermaLink="false">https://nyanblog2222.com/?p=2666</guid>

					<description><![CDATA[<p><img src="https://nyanblog2222.com/wp-content/uploads/2022/11/38.png" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="" decoding="async" loading="lazy" srcset="https://nyanblog2222.com/wp-content/uploads/2022/11/38.png 1280w, https://nyanblog2222.com/wp-content/uploads/2022/11/38-300x157.png 300w, https://nyanblog2222.com/wp-content/uploads/2022/11/38-1024x536.png 1024w, https://nyanblog2222.com/wp-content/uploads/2022/11/38-768x402.png 768w" sizes="auto, (max-width: 1280px) 100vw, 1280px" />今回はパソコンの入れ替え後等にVBAマクロ付きのExcelやAccessファイルを使用した際、 「このプロジェクトのコードは、64ビットシステムで使用するために更新する必要があります。 Declareステートメントの確認 [&#8230;]</p>
<p>投稿 <a href="https://nyanblog2222.com/programming/vba/2666/">【対処方法】このプロジェクトのコードは、64ビットシステムで&#8230;【Declare,PrtSafe】</a> は <a href="https://nyanblog2222.com">nyanblog ~にゃんぶろぐ~</a> に最初に表示されました。</p>
]]></description>
										<content:encoded><![CDATA[<img src="https://nyanblog2222.com/wp-content/uploads/2022/11/38.png" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="" decoding="async" loading="lazy" srcset="https://nyanblog2222.com/wp-content/uploads/2022/11/38.png 1280w, https://nyanblog2222.com/wp-content/uploads/2022/11/38-300x157.png 300w, https://nyanblog2222.com/wp-content/uploads/2022/11/38-1024x536.png 1024w, https://nyanblog2222.com/wp-content/uploads/2022/11/38-768x402.png 768w" sizes="auto, (max-width: 1280px) 100vw, 1280px" /><p>今回はパソコンの入れ替え後等にVBAマクロ付きのExcelやAccessファイルを使用した際、<br>
<span class="marker-under-red">「このプロジェクトのコードは、64ビットシステムで使用するために更新する必要があります。<br>
Declareステートメントの確認および更新を行い、<br>
次にDeclareステートメントにPrtSafe 属性を設定してください。」</span><br>
とエラーコードがでてしまった場合の対処方法を紹介します。</p>
<p><img loading="lazy" decoding="async" src="https://nyanblog2222.com/wp-content/uploads/2020/11/2020-11-29-min.png" alt="エラー" width="407" height="182" class="alignnone size-full wp-image-2667" srcset="https://nyanblog2222.com/wp-content/uploads/2020/11/2020-11-29-min.png 407w, https://nyanblog2222.com/wp-content/uploads/2020/11/2020-11-29-min-300x134.png 300w" sizes="auto, (max-width: 407px) 100vw, 407px" /></p>

  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-4" checked><label class="toc-title" for="toc-checkbox-4">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">エラーの原因は？どんな状況で発生する？</a></li><li><a href="#toc2" tabindex="0">対処方法</a></li><li><a href="#toc3" tabindex="0">コード変更例</a><ol><li><a href="#toc4" tabindex="0">Declare文の変更</a></li><li><a href="#toc5" tabindex="0">API実行箇所をDeclare文の型に合わせる（引数・戻り値）</a></li><li><a href="#toc6" tabindex="0">補足：PtrSafeやPtrLong型について</a></li></ol></li></ol>
    </div>
  </div>

<h2><span id="toc1">エラーの原因は？どんな状況で発生する？</span></h2>
<p><span class="marker-under">Office64bitで、<br>
Win32API（32bitのWindows API）を呼び出す</span>と該当のエラーメッセージがでます。<br>
64bitと32bitでは使用できる領域が異なるため、<br>
通常そのまま使うと何かしら問題が発生する場合があります。<br>
よって「使っても良いか」確認の意味も込めたエラーメッセージとなります。</p>
<p>例えば、<span class="marker-under">パソコンの入れ替えやOfficeのバージョンアップで、<br>
Officeが32bitから64bitに変わった際</span>に発生します。</p>
<h2><span id="toc2">対処方法</span></h2>
<p>対処方法は以下になります。</p>
<ul>
<li><strong class="brown_color">Declare文の変更</strong>（※１）<br>
①PtrSafeを追加<br>
②Long型を適宜PtrLong型に変更</li>
<li><strong class="brown_color">API実行箇所をDeclare文の型に合わせる（引数・戻り値）&nbsp;</strong></li>
</ul>
<p><span class="marker-under">※１　Office64bitでのDeclare文の記述方法は、<br>
以下のとおりMicrosoft公式より公開されていますので、 コピーして使用します。</span></p>
<p><a class="link" href="https://docs.microsoft.com/ja-jp/office/troubleshoot/office-suite-issues/win32api_ptrsafe-with-64-bit-support">Microsoft Docs：Win32API_PtrSafe</a>　より、<br>
「<a class="link broken_link" href="https://www.microsoft.com/en-us/download/details.aspx?id=9970">Office 2010 ヘルプファイル:64 ビットのサポートが含まれる Win32API_PtrSafe</a>」<br>
へのリンクにとび、<br>
<span>「Office2010Win32API_PtrSafe.exe」をダウンロード・インストール。<br>
</span>インストールすると、<br>
「C:\Office 2010 Developer Resources\Documents\Office2010Win32API_PtrSafe」 に、<br>
Win32API_PtrSafe.TXTが出来上がるので、こちらを開き、該当箇所をコピペする。</p>
<p>なお、Office2010より64bitが新しくできたためOffice2010となっていますが、<br>
他バージョンでも同じように上記のURLからダウンロードします。</p>
<h2><span id="toc3">コード変更例</span></h2>
<p>例えば、以下のようなコードを記述しているとして、どのように修正するか説明します。<br>
コード内容としては、<span class="marker-under">”user32”というWin32APIを使用</span>し、<br>
「<span class="marker-under">アクティブウィンドウの名前を取得して、出力する</span>」という単純なものです。</p>


<pre class="wp-block-code"><code>Declare Function GetActiveWindow Lib "user32" () As Long
Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long

Private Sub GetWindowName()

'アクティブウインドウのハンドル取得
Dim lWindowHwnd As Long
lWindowHwnd = GetActiveWindow()

'バッファを確保
Dim sWindowName As String
sWindowName = String(256, Chr(0))

'アクティブウインドウのウインドウ名取得
Dim lWindowNameLen As Long
lWindowNameLen = GetWindowText(lWindowHwnd, sWindowName, Len(sWindowName))

'イミディエイトに出力
Debug.Print "現在アクテイブウインドウのタイトル名は"
Debug.Print sWindowName
Debug.Print "長さは" + Str(lWindowNameLen) + "です"

End Sub</code></pre>


<p>もちろん、Office32bitではエラーメッセージなしで正常に動きます。</p>
<h3><span id="toc4">Declare文の変更</span></h3>
<p>まず、<span class="marker-under">Win32API_PtrSafe.TXT</span>を開いて該当の箇所<br>
「GetActiveWindow」「GetWindowTextA」などで検索し、コピペします。</p>


<pre class="wp-block-code"><code>Declare PtrSafe Function GetActiveWindow Lib "user32" () As LongPtr
Declare PtrSafe Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As LongPtr, ByVal lpString As String, ByVal cch As Long) As Long</code></pre>


<p>Declare文の変更はたったこれだけです♪<br><span class="marker-under-red">注意点は、必ず「Win32API_PtrSafe.TXT」を見てコピペする</span>ことです。<br>バグの元なので全てのLong型をPtrLong型にしないようにしてください。</p>
<h3><span id="toc5">API実行箇所をDeclare文の型に合わせる（引数・戻り値）</span></h3>
<p>次に<span class="marker-under">API実行箇所については、Declare文と睨めっこしながら変更</span>していきます。<br>今回の場合、GetActiveWindowの戻り値の型であり、<br>GetWindowTextの第一引数であるlWindowHwndを <span class="marker-under">Long型からLongPtr型</span>に変えます。<br>命名規則にもよりますが、変数名のルールで型名も考慮しているのであればそちらも変更します。<br>（<span class="marker-under"> lWindowHwndからlpWindowHwnd</span>）</p>


<pre class="wp-block-code"><code>Private Sub GetWindowName()

'アクティブウインドウのハンドル取得
Dim lpWindowHwndAs LongPtr
lpWindowHwnd = GetActiveWindow()

'バッファを確保
Dim sWindowName As String
sWindowName = String(256, Chr(0))

'アクティブウインドウのウインドウ名取得
Dim lWindowNameLen As Long
lWindowNameLen = GetWindowText(lpWindowHwnd, sWindowName, Len(sWindowName))

'イミディエイトに出力
Debug.Print "現在アクテイブウインドウのタイトル名は"
Debug.Print sWindowName
Debug.Print "長さは" + Str(lWindowNameLen) + "です"

End Sub</code></pre>


<p>他にも元からLong型のものがありますが、Declare文でもLong型なので変更しません。</p>
<p>以上で、VBAのOffice64bit対応は完了です。</p>
<h3><span id="toc6">補足：PtrSafeやPtrLong型について</span></h3>
<p>簡単に紹介すると以下になります。</p>
<ul>
<li><strong class="brown_color">PtrSafe<br />Office64bitで実行しても安全であると明示するキーワード</strong></li>
<li style="list-style-type: none;"> </li>
</ul>
<ul>
<li><strong class="brown_color">PtrLong型</strong><br />Office32bitではLong型に、Office64bitではLongLong形になる型</li>
</ul>
<p>このことから、<br /><span class="marker-under">Office64bitで使えるようにコードを書き換えても、 Office32bitで動くよう</span>になっています。</p><p>投稿 <a href="https://nyanblog2222.com/programming/vba/2666/">【対処方法】このプロジェクトのコードは、64ビットシステムで&#8230;【Declare,PrtSafe】</a> は <a href="https://nyanblog2222.com">nyanblog ~にゃんぶろぐ~</a> に最初に表示されました。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://nyanblog2222.com/programming/vba/2666/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
