マンガでよめる痔のこと・薬のこと

エクセルのデータをアクセスにテーブルリンクしたいのですが
エクセルの先頭行が4行目から始まります。
なおかつA1に文字が入ります。
(画像参照)

このエクセルデータをアクセスの
「テーブルのリンク」→ファイルを選ぶ
→ワークシートリンクウィザードが表示され、次のページに進み、
「先頭行をフィールド名として使う」にチェックを入れたいのですが、先頭行は4行目です。

この場合、どうすればエクセルの4行目を
アクセスのテーブルリンクの先頭行にできるのでしょうか?

エクセルのA1の文字を消去すれば自動的に4行目がアクセスで先頭行になりますが
エクセルの方は決まったフォーマットなのでA1の文字を消去することはできません。

ご回答よろしくお願いします。

「テーブルリンク エクセルの4行目を先頭行」の質問画像

このQ&Aに関連する最新のQ&A

A 回答 (3件)

#1です



Excel ファイル側に手を入れられるのなら、#2さんの方がお勧めです。

なお、範囲名部分が行方向に増えるのなら、(Excel側で範囲を再設定)
何もせずに Access 側から変更を含めて値を得ることが出来るようですが、
列方向に範囲が広がった場合、 リンクの更新(RefreshLink)が必要みたいです。

嘘を言ってるかも知れないので、裏取りはしっかりとしてください。
    • good
    • 0
この回答へのお礼

ありがとうございました。

お礼日時:2012/10/14 00:47

当方、Access2007、Excel2007 ですが。



項目名を含む、インポートするデータ範囲に 「範囲名」 を付けておきます。

Access でインポートするときに
 ・ワークシート
 ・名前の付いた範囲
を選択できるところで
「名前の付いた範囲」 を選択します。

表示された 「範囲名」 の一覧からインポートする範囲のものを選択します。
表示されるサンプルデータに項目名が表示されているなら
次の画面で、「先頭行をフィールド名として使う」にチェックをします。

状況によっては、項目名が表示されていなくて、
そのまま、チェックせずに進めても
正しい項目名付きでインポートされる場合もあります。

2003 以前でも、多少の違いがあっても
同様のことができたはずです。

なお Excel が2007 以降なら、
新機能のテーブルと範囲名を組み合わせることで
データが増えても、範囲名の範囲が自動的に調整されるようにできます。
    • good
    • 1
この回答へのお礼

ありがとうございました。

お礼日時:2012/10/14 00:47

VBA は大丈夫ですか



エクセルファイルの拡張子 xls に対してのものになりますが、
新規 Access ファイルを作成し、動作確認してみてください。

手順)

・新規 Access ファイルを作成します
・標準モジュールに以下を記述します

Public Sub Sample()
  Dim db As DAO.Database
  Dim tdf As DAO.TableDef
  Const sCon As String = "Excel 8.0;HDR=YES;IMEX=2;DATABASE="
  Const sFile As String = "E:\hoge\ts4.xls" ' ★ ファイルのパス
  Const sSheet As String = "Sheet1"    ' ★ シート名
  Const sRange As String = "A4:C56"     ' ★ 範囲
  Const sTable As String = "T_Tmp"     ' ★ Access テーブル名

  Set db = CurrentDb
  On Error Resume Next
  db.TableDefs.Delete sTable
  On Error GoTo 0
  Set tdf = db.CreateTableDef(sTable)
  With tdf
    .Connect = sCon & sFile
    .SourceTableName = sSheet & "$" & sRange
  End With
  db.TableDefs.Append tdf
  db.TableDefs.Refresh

  Set tdf = Nothing
  Set db = Nothing
  RefreshDatabaseWindow
End Sub

・上記★部分4つを変更し、実行してみます
・テーブル名で指定したものが出来上がっていると思うので、開いて内容を確認します

動いた/動かなかった・・・程度で良いので、結果報告をお願いします。

※ 動かなかった場合、
・Access のバージョン
・エクセルファイルの拡張子
を補足いただければ、追加で回答できるかもしれません。(できないかも)
    • good
    • 0
この回答へのお礼

ありがとうございました。

お礼日時:2012/10/14 00:47

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QACCESS テーブルに2行目から取り込む方法

Access2013で、
指定の場所に置いてあるCSVファイルに対して、
「リンクテーブルを作成してソースデータにリンクする」設定にてテーブルを作成し、
このCSVファイルが更新されても最新の状態にてレポートを出力できるようにしています。

しかしこのCSVデータが作成される仕様により、1行目に余計な文字列、2行目に項目名、3行目以降にデータが入っているため、毎回CSVデータの1行目を削除する手作業が発生しています。
2行目以降をリンクするようにするとか、テーブルの3行目以降を取り出すクエリとか方法はありませんでしょうか?

Aベストアンサー

>2行目以降をリンクするようにするとか、
>テーブルの3行目以降を取り出すクエリとか方法はありませんでしょうか?
D:\ナントカ\コントカ\オリジナル.csv
に余計な一行があったとして下記のコードを標準モジュールに作成し

Sub LineCut1()
Dim fSo As Object
Dim buf As Variant
Dim f As Object
Set fSo = CreateObject("Scripting.FileSystemObject")

With fSo.GetFile("D:\ナントカ\コントカ\オリジナル.csv").OpenAsTextStream
.SkipLine
buf = .readall
.Close
End With

Set f = fSo.OpenTextFile("D:\ナントカ\コントカ\オリジナル_改.csv", 2, True)
f.Write buf
f.Close
End Sub

出来た"D:\ナントカ\コントカ\オリジナル_改.csv"をリンクテーブルとさせればよいのでは?

オリジナル.csv が更新される都度実行する必要がありますが
>2行目以降をリンクするようにするとか、
CSVのようなテキストファイルでは無いかと。
>テーブルの3行目以降を取り出すクエリとか方法はありませんでしょうか?
一旦取り込んでからだとデータ型の変更などが必要になりそうなので
厄介です。

オリジナル.csv の使われ方がイマイチ不明なのですが
上記のSub LineCut1() を、 Function LineCut1() に改名して
autoexec マクロに
プロシージャの実行に、LineCut1()
としても良いかもですね。

>2行目以降をリンクするようにするとか、
>テーブルの3行目以降を取り出すクエリとか方法はありませんでしょうか?
D:\ナントカ\コントカ\オリジナル.csv
に余計な一行があったとして下記のコードを標準モジュールに作成し

Sub LineCut1()
Dim fSo As Object
Dim buf As Variant
Dim f As Object
Set fSo = CreateObject("Scripting.FileSystemObject")

With fSo.GetFile("D:\ナントカ\コントカ\オリジナル.csv").OpenAsTextStream
.SkipLine
buf = .readall
.Close
...続きを読む

QACCESS IIF関数 複数条件の設定について

 選択クエリにおいて、あるフィールド「 X」 のレコード数値が
 
  0<[X]<=50   であれば A 
  50<[X]<=100  であれば B 
  100<[X]<=150  であれば C

 と表記させるフィールド「Y」を追加したいと考えています。
 この場合、Yのフィールド設定で指定する数式についてご教授願います。

 一応、
  IIf(0<[X]<=50,"A","") Or IIf(50<[X]<=100,"B","") Or IIf(100<[X]<=150,"C","")

  としましたが、実行すると、Yの列がすべて「-1」と表記されてしまいます。

 何卒よろしくお願いいたします。

Aベストアンサー

a)IIF関数で対応する場合:
 IIF関数の第2引数または第3引数に、IIF関数を入れ子とする必要があります。

式: IIF([X]<=0, "", IIF([X]<=50, "A", IIF([X]<=100, "B", IIF([X]<=150, "C", ""))))


b)別の組込関数を使用する場合:
 IIF関数は二択ですので入れ子にする必要がありますが、Accessのクエリで
 使用できる、似た機能の関数に、Switch関数というものもあります。
 これであれば、入れ子にする必要がなくなります。
 (詳しくは、Accessのヘルプを参照下さい)

式: Switch([X]<=0, "", [X]<=50, "A", [X]<=100, "B", [X]<=150, "C", True, "")


なお、数学あるいは一般生活では確かに「0<[X]<=50」という表記をしますが、
Accessの関数などではこれだと正しい結果が得られません。
正しく認識させるためには、等号・不等号を挟んだ式は、「左辺」と「右辺」の
2つの要素からなる形にする必要があります。
(「0<[X]<=50」は「[X]>0 And [X]>=50」と分割してやる、と)

但し、今回のご質問のような『連続した範囲』であれば、前(左)で既出となる
式の要素で「[X]<=0」が「真(=-1)」とならなかった時点で、「[X]>0」が保証
されますので、上記のように、「[X]>0」を省略して「[X]<=50」だけを条件として
指定すればOk、ということになります。
(「0<[X]<=50」の次が「80<[X]<120」などのように、「50~80」が欠けた
 場合は、省略ができない、と)


【参考】
「0<[X]<=50」は、このままだと「0 < ([X]<=50)」という式と解釈されます。
この場合、「[X]<=50」は、「真(=-1)」か「偽(=0)」か「Null」のいずれかに
なります。
何にせよ、「0<[X]<=50」全体として「正(=-1)」となることがないため、
ご質問の式では、IIF関数は常に第3引数に指定された値「""」を返す
ことになります。

この結果、式全体としては「"" Or "" Or ""」という形となり、「0かNull」
以外なので、「真(=-1)」という値が返された、ということです。

なお、Nullについては、以前、他の方の質問につけた回答も、併せて参考までに:
http://oshiete.goo.ne.jp/qa/4850675.html

a)IIF関数で対応する場合:
 IIF関数の第2引数または第3引数に、IIF関数を入れ子とする必要があります。

式: IIF([X]<=0, "", IIF([X]<=50, "A", IIF([X]<=100, "B", IIF([X]<=150, "C", ""))))


b)別の組込関数を使用する場合:
 IIF関数は二択ですので入れ子にする必要がありますが、Accessのクエリで
 使用できる、似た機能の関数に、Switch関数というものもあります。
 これであれば、入れ子にする必要がなくなります。
 (詳しくは、Accessのヘルプを参照下さい)

式: Switch([X]<=0, "", [X]<=50, "A"...続きを読む

QVbaでアクセスからエクセルにリンクテーブルする

Vbaでアクセスからエクセルにリンクテーブルするには?
エクセルの情報:
C:\Users\Desktop¥新規 Microsoft Excel ワークシート.xlsx

シート1の情報:
フィールド1 フィールド2
あああ    aaa
いい     iii
ううう    uuu
なのですが、
アクセスからVBAでリンクするにはどうすれば良いでしょう?

手作業なら
外部データ→エクセル→外部データの取り込み→リンクテーブルを作成してソースデータにリンクする
でリンクできますが、vbaで行いたいです。

Sub Sample01()
Dim db As DAO.Database, tb As DAO.TableDef

Set db = CurrentDb
Set tb = db.TableDefs("Sheet1")

tb.Connect = ";DATABASE=" & CurrentProject.FullName & ";TABLE=Sheet1"
tb.RefreshLink ' リンク情報の更新
End Sub

このコードは意味が違いますよね

エクセルのパスとシート名を指定してリンクする方法を教えてください。

最終定期にはシートをループして複数のテーブルを作成したいのです。
リンクが無理ならインポートでもOKです。

Vbaでアクセスからエクセルにリンクテーブルするには?
エクセルの情報:
C:\Users\Desktop¥新規 Microsoft Excel ワークシート.xlsx

シート1の情報:
フィールド1 フィールド2
あああ    aaa
いい     iii
ううう    uuu
なのですが、
アクセスからVBAでリンクするにはどうすれば良いでしょう?

手作業なら
外部データ→エクセル→外部データの取り込み→リンクテーブルを作成してソースデータにリンクする
でリンクできますが、vbaで行いたいです。

Sub Sample01()
Dim db As DAO.Data...続きを読む

Aベストアンサー

手作業でExcelへのリンクテーブルを作って
テーブルをデザインビューで開いてプロパティの「説明」を覗いてみた。
Excel 12.0 Xml;HDR=YES;IMEX=2;ACCDB=YES;DATABASE=D:\DB\SampleData\Small.xlsx;TABLE=Sheet1$
これをConnect に渡せば良いらしい。
IMEX ?
ACCDB ?
分からないのでGoogleと
こちらでも素晴らしい回答をされているkikuさんの
http://kikutips.blog13.fc2.com/blog-entry-107.html
を発見。

http://www.f3.dion.ne.jp/~element/msaccess/AcTipsExcelLinkDataType.html
こちらではIMEXに関わる説明がされています。

docmd.TransferSpreadsheet acLink ,acSpreadsheetTypeEx・・後略でシートの一部分だけだと
(VBAのヘルプで↑を調べてください)
Excel 12.0 Xml;HDR=NO;IMEX=2;ACCDB=YES;DATABASE=D:\DB\SampleData\Small.xlsx;TABLE=sheet2$B5:D16
とかになりました。
直接、接続情報を指定するもよし、docmd.TransferSpreadsheet・・・でもお好きな方で。
今日はとても賢くなった。寝たら忘れるかも。。。

手作業でExcelへのリンクテーブルを作って
テーブルをデザインビューで開いてプロパティの「説明」を覗いてみた。
Excel 12.0 Xml;HDR=YES;IMEX=2;ACCDB=YES;DATABASE=D:\DB\SampleData\Small.xlsx;TABLE=Sheet1$
これをConnect に渡せば良いらしい。
IMEX ?
ACCDB ?
分からないのでGoogleと
こちらでも素晴らしい回答をされているkikuさんの
http://kikutips.blog13.fc2.com/blog-entry-107.html
を発見。

http://www.f3.dion.ne.jp/~element/msaccess/AcTipsExcelLinkDataType.html
こちらではIMEXに関わる説...続きを読む

Qクエリで「データ型が一致しません」と表示される

クエリ1とクエリ2をクエリ3で結合するとクエリ3で「データ型が一致しません」と表示されます。

クエリ1のSQL文
SELECT Trim(Replace([PC管理台帳.使用者氏名]," ","")) AS 式1, PC管理台帳.新PC名, PC管理台帳.部署名, PC管理台帳.マシンベンダ名, PC管理台帳.マシンモデル
FROM PC管理台帳;

クエリ1では[使用者氏名]の苗字と名前のスペースを置換しました。

クエリ2のSQL文
SELECT 職員アカウント.職員番号, Trim(Replace([職員アカウント.氏名]," ","")) AS 式1, 職員アカウント.パスワード, 職員アカウント.メールアドレス
FROM 職員アカウント;

クエリ2では[氏名]の苗字と名前のスペースを置換しました。

クエリ3で[使用者氏名]と[氏名]が一致しているものを抽出したいです。

ちなみにクエリ3のSQL文は
SELECT [クエリ2].[式1], [クエリ2].[職員番号]
FROM クエリ1 INNER JOIN クエリ2 ON [クエリ1].[式1]=[クエリ2].[式1];

これでクエリ3をひらくと
「データ型が一致しません」
と表示されます。

どなたかアドバイスお願いします

クエリ1とクエリ2をクエリ3で結合するとクエリ3で「データ型が一致しません」と表示されます。

クエリ1のSQL文
SELECT Trim(Replace([PC管理台帳.使用者氏名]," ","")) AS 式1, PC管理台帳.新PC名, PC管理台帳.部署名, PC管理台帳.マシンベンダ名, PC管理台帳.マシンモデル
FROM PC管理台帳;

クエリ1では[使用者氏名]の苗字と名前のスペースを置換しました。

クエリ2のSQL文
SELECT 職員アカウント.職員番号, Trim(Replace([職員アカウント.氏名]," ","")) AS 式1, 職員アカウント.パスワー...続きを読む

Aベストアンサー

「データ型が一致しません」のエラーが発生するパターンのひとつに、『結合に使用している演算
フィールド(ご質問の件では式1が該当)の結果がエラーとなるレコードが含まれている』というのが
あります。
クエリ1・クエリ2の式1にはReplace関数が使われていますが、Replace関数の第1引数にNullを
指定すると、エラーになります。
従って、恐らく「PC管理台帳」テーブルの「使用者名」か、「職員アカウント」テーブルの「氏名」の
どちらか(或いは双方)が、空欄(Null)になったままのレコードがある可能性があります。
(なお、Trim関数は、第1引数がNullであってもエラーになりません)

上記推測が当たっていれば、
 a)上記フィールドが空欄になっているレコードをなくす
  (その上で、今後のことを考えると値要求を「はい」に設定しておくことをお勧めします)
 b)式1の関数を下記のように変更する
のどちらかの対応をされれば、ご質問のエラーは解消されるものと思います。


式1の変更で対応する場合は、それぞれ以下のようにしてみてください:
(「[PC管理台帳.使用者名]」と「[職員アカウント.氏名]」は、それぞれ「[PC管理台帳].[使用者名]」と
 「[職員アカウント].[氏名]」の誤記と判断して記述しています)

クエリ1:
Select Replace(Nz([PC管理台帳].[使用者氏名], ""), " ", "", 1, -1, 1) As 式1, PC管理台帳.新PC名, PC管理台帳.部署名, PC管理台帳.マシンベンダ名, PC管理台帳.マシンモデル From PC管理台帳;

クエリ2:
Select 職員アカウント.職員番号, Replace(Nz([職員アカウント].[氏名], ""), " ", "", 1, -1, 1) As 式1, 職員アカウント.パスワード, 職員アカウント.メールアドレス, From 職員アカウント;


Nz関数は、第1引数がNull(=文字列扱い不可の空白)だった場合に、第2引数の値に置換する関数
です。第2引数に「""」(空文字=文字列扱い可の空白)を指定することで、Replace関数がエラーに
なるのを回避しています。
Replace関数の一番最後の引数「1」は、半角/全角を区別させないためのものです。これにより、
スペースは全て削除されるため、Trim関数は不要になります。
(その前の「1, -1」は、それぞれ開始位置と置換する文字数の指定です。この辺りは、詳しくは
 ヘルプを確認して下さい)

「データ型が一致しません」のエラーが発生するパターンのひとつに、『結合に使用している演算
フィールド(ご質問の件では式1が該当)の結果がエラーとなるレコードが含まれている』というのが
あります。
クエリ1・クエリ2の式1にはReplace関数が使われていますが、Replace関数の第1引数にNullを
指定すると、エラーになります。
従って、恐らく「PC管理台帳」テーブルの「使用者名」か、「職員アカウント」テーブルの「氏名」の
どちらか(或いは双方)が、空欄(Null)になったままのレコードがある可能性があ...続きを読む

Qアクセスで#エラーを表示させない方法は?

アクセス2000を使用しています。フォームにテキストボックスを貼り付けて、計算式を入れています。計算できない数値になると、#エラーと表示されます。目障りなので、#エラー という表示を消したいのですが、どうしたらよろしいでしょうか?宜しくお願い申し上げ候。

Aベストアンサー

はじめは「IIF関数とIsError関数を使用して」と考えたものの、IIF関数は引数がエラーになった時点で
エラーが返されてしまう(=元の木阿弥)ので、どうしたものかと思ったのですが・・・
とりあえず、「見た感じ、何も表示されていないように見える」ということで、『条件付書式』での対応と
いうのはいかがでしょうか。

1)当該フォームをデザインビューで開く
2)当該テキストボックスを選択
3)メニューで「書式(O)→条件付き書式(D)」を選択
4)『条件付き書式設定』ダイアログが開くので、『条件1(1)』枠の左端にあるコンボボックスで「式」を選択
5)上記コンボボックスの隣が1つのテキストボックスになるので、そこに以下のような式を入力
 IsError([テキスト0])
 ※上記の式は当該テキストボックスの名前が「テキスト0」の場合です。
6)上記テキストボックスの下、右から2番目に「A」と表示された、文字色を指定するボタンがあるので、
 その左の小さな「▼」をクリックし、当該テキストボックスの背景と同じ色(既定では白のはず)を選択
7)『OK』ボタンをクリックしてダイアログを閉じる

・・・以上です。
これで、『テキスト0』の計算式がエラーになった場合は、文字色が背景と同じ色になるので、「#エラー」と
いう表示はされていないように見える、という状態にすることができると思います。

はじめは「IIF関数とIsError関数を使用して」と考えたものの、IIF関数は引数がエラーになった時点で
エラーが返されてしまう(=元の木阿弥)ので、どうしたものかと思ったのですが・・・
とりあえず、「見た感じ、何も表示されていないように見える」ということで、『条件付書式』での対応と
いうのはいかがでしょうか。

1)当該フォームをデザインビューで開く
2)当該テキストボックスを選択
3)メニューで「書式(O)→条件付き書式(D)」を選択
4)『条件付き書式設定』ダイアログが開くので、『条件1(1)』枠の...続きを読む

QACCESSで空白のデーターをクエリで判定/識別する方法を教えてくださ

ACCESSで空白のデーターをクエリで判定/識別する方法を教えてください。
EXCELでは空白を""で判定/識別表していますがACCESSではどうなるのでしょうか。

下の例はフィールドに試験番号があればその番号を、空白なら”欠席”と表示しようとしています。
IIf(([試験番号]="空白の場合何を入れる?"),[試験番号],"欠席")

Aベストアンサー

もうひとつの書き方は
式1: IIf([試験番号] Is Not Null,[試験番号],"欠席")
第2、第3引数の、質問の順序にあわせるとこうなる。

QAccessのRefresh・Requery・Repaintの違い

Requeryはもう一度ソースレコード(テーブル)を読み込むようです。このとき、テーブルの先頭レコードに移動してしまいます。
Refreshは最新のレコード(テーブル)を再表示するような気がします。レコードの移動は起こらない気がします。
Repaintは、VBAでキャプションなどを変更したとき使っています。
でも、よくわかっていません。
どんなときにどんなメソッドを使えばいいのでしょうか?
詳しい方、よろしくお願いいたします。

Aベストアンサー

たびたびすみません。
調べてたらこんなのがでてきました。
http://www.nurs.or.jp/~ppoy/access/access/acF007.html

参考URL:http://www.nurs.or.jp/~ppoy/access/access/acF007.html

QAccessのマクロでモジュールを実行させたい。

Access2002を勉強中の初心者です。

AccessでDB1という名前のデータベースを作成し、その中で、モジュール1というモジュールを作成しました。これを実行するマクロを作成したく、次のようにマクロを作成しました。
マクロのデザイン画面でアクションに「プロージャの実行」を選択、プロージャ名入力覧の右側の...のボタンを押して式ビルダ画面を表示、ここの「関数」フォルダを開いてDB1を選択、表示されたモジュール1を貼り付けてOK。
しかし、このマクロを実行すると、次のエラーとなります。「DB1 指定されたDB1が見つけることができない関数名が含まれています」

根本的に方法が間違っているのでしょうか?
アドバイスをよろしくお願いします。

Aベストアンサー

#1です。

ちょっと時間ができたので、Accessのヘルプで、
 "RunCode/プロシージャの実行" アクション
についてのトピックを見てみました。

結論から言うと、基本的な考え方が間違っているみたいです^^;。

「プロシージャの実行」アクションでは、「Function」プロシージャを指定するようです。
Subプロシージャではエラーになります。


つまりご質問の件では、
「Subプロシージャを呼び出すFnctionプロシージャ」をまず書かなけれえばならない。
そして、マクロのアクションでは、あらためてこのFunctionプロシージャを指定しなければいけません。

QACCESSで、フォームのレコードごとに背景色変更

OS:Windows XP
Access Version: ACCESS 2000
ACCESSを利用して一日の時間外を計算するフォームを作成しています。
>   16 金 4:00
> 17 土 3:00
> 18 日 2:00
>  というような感じで時間を入力するのですが、曜日に特徴をつけて誤った入力をしないように、曜日が日曜日の時だけそのレコードの背景色を変更したいのです。よく、レポートで背景色を交互に変更するというやりかたをみてそれを行う方法はわかるのですが、それとおなじよなことをフォームでしたいのです。どうかお願いします!!ちなみにVBAはある程度わかりますのでVBAを利用した方法でもかまいません。

Aベストアンサー

帳票形式の場合ですが(多分データシートビューのフォームでも行けるとは思いますが)・・・
例えばですが、次のようにしてやると、できます。


(1)フォームヘッダー(もしくは詳細セクション)に、「txtID」という名前の
非連結テキストボックスを配置。「可視」プロパティは「いいえ」。
これには、真のIDフィールド(例えば連番フィールドや主キーフィールド)の値を
レコード移動時に転記します。(言わばダミーのテキストボックス)

(2)フォームのレコード移動時のイベントプロシージャを下記の様に
記述します。
サブフォームでやりたいなら、サブフォームのレコード移動時イベントに
記述します。

Private Sub Form_Current()

'真のIDフィールドの値を[txtId]へ代入。
  Me!txtID = Me!真のIDフィールドの名前(例えば連番フィールドや主キーフィールドと連結したテキストボックスの名前)

End Sub



(3)詳細セクション上にある、色変えしたいすべてのテキストボックスを一括選択して、
[書式][条件付き書式]で、条件付の書式設定をします。

条件(1)で、まず ドロップダウンリストから 「 式 」を選び、
その右の条件内容を

[txtID]=[フォームに配置した真のIDフィールドの名前(連結テキストボックス名)]

とします。

そして、背景色を白や透明以外に設定します。

以上

ダミーの非連結テキストボックスは、詳細セクションに置いてもOKですが、
その場合、速度を多少でもアップさせたいならフォームヘッダーに
配置する方がいいのかもしれません。(あんましかわらないかもしれないが)

※※
なお、もし選択した行だけを色変えしたい条件も同時に設定する場合は
カレントレコード色変えの条件を後に(条件(2)に)設定します。

【例】
条件(1)・・・「 式 」、[選択状態]=[選択フラグ] ←選択行だけを色変えする条件
条件(2)・・・「 式 」、[txtID]=[連番]


ただし、あまり色がつく行が増えると、フォームの
動作が遅くなるかもしれません。


お望みの機能でなかったらごめんなさい。

帳票形式の場合ですが(多分データシートビューのフォームでも行けるとは思いますが)・・・
例えばですが、次のようにしてやると、できます。


(1)フォームヘッダー(もしくは詳細セクション)に、「txtID」という名前の
非連結テキストボックスを配置。「可視」プロパティは「いいえ」。
これには、真のIDフィールド(例えば連番フィールドや主キーフィールド)の値を
レコード移動時に転記します。(言わばダミーのテキストボックス)

(2)フォームのレコード移動時のイベントプロシージャを下...続きを読む

Q別のシートから値を取得するとき

Worksheets("シート名").Activate
上記のを行ってから別シートの値を取得するのですが、
この処理を行うと指定したシートへ強制的にとんでしまいます。。。

※イメージ
For ~ To ~
  Worksheets("シートA").Activate
  シートAの値取得
       :
  Worksheets("シートB").Activate
  シートBの値取得
Next

このイメージ処理を行うとものすごい勢いで画面がチカチカします。。。
シートを変えずに他のシートから値を取得する方法はないのでしょうか。
教えてください!

Aベストアンサー

Worksheets("シートA").Range("A1")

みたいな感じでできませんか?


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング