EXCELのワークシートにマクロを登録したボタンを設置して、
mysqlのDBのレコードを更新・登録・削除する事は可能でしょうか?

SQLとかVBAの勉強も兼ねてテスト的に作ってみたいなと思っています。
上手くいけば仕事でも使えればとも思っております。


現在phpmyadminで作成したmydbがあります。
testというテーブルにid,商品名,価格,在庫というようなレコードがあります。

ODBCドライバ等の設定をして、EXCELの外部データの取り込みで、データを取り込む事は
できました。

この取り込んだデータを編集したり、新たに新しい商品を登録して、データベースを更新
できるようにしたいのですが、可能でしょうか?

VBAのサンプルコードなどあればご教示ねがいます。

因みに私のレベルはVBAもmysqlも素人なので、できれば解説などもしていただければ
尚助かります。
よろしくお願い致します。

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

A 回答 (4件)

あれま


.Update

.MoveNext

ではいかがでしょうか?
データの抽出は同様のコードでできましたでしょうか?

オブジェクトが開いている場合は、操作は許可されません
を そのまま理解すると ほかのユーザーがデータベースを開いている いうことになりますが。
ほかのユーザーがデータベースを開いていても抽出はできるはずです。

とりあえず
On Error GoTo Err
の行を無効にして どこで エラーになっているか確認されてはいかがでしょうか?
もし
rs.Open Sql, con, adOpenStatic, adLockOptimistic
あるいは
.Update
あたりでは?
同じ状況が確認できる環境ではありませんので、確実な回答ができません。
    • good
    • 0
この回答へのお礼

ありがとうございます。

.MoveNext
を試してみましたがダメでした。

On Error GoTo Err
をコメントアウトしてエラーを確認してみるとご指摘通り

rs.Open Sql, con, adOpenStatic, adLockOptimistic
の行がエラーになっていました。

試しにコメントアウトして
'rs.Open Sql, con, adOpenStatic, adLockOptimistic

にしてみると、ちょっとだけ先に進むのですが、
!ID = Cells(i, 1).Value

のところでエラーになり、

現在の Recordset は更新をサポートしていません。
プロバイダか、選択されたロックタイプの限界の可能性があります。

というメッセージになります。

ロックタイプを指定してみたらいいのかなと思い
con.Open connectionString

のところに追記で
con.Open connectionString, adOpenStatic, adLockOptimistic

という風にしてみると
access denied for user ''@'localhost' using password yes

と、パスワードが違いますよというようなメッセージになってしまいます。


お手上げでしょうか。。。?

お礼日時:2011/04/26 13:09

別案ですが


SQL文でできるかもしれません。
con.Execute ("Update costomer Set 氏名='山田' Where 会員番号='1000'")
とかで実行してみてはいかがでしょうか?

For i = 2 To Cells(1, 1).CurrentRegion.Rows.Count
!会員番号 = Cells(i, 1).Value
!氏名 = Cells(i, 2).Value
!電話番号 = Cells(i, 3).Value
!住所 = Cells(i, 4).Value
.Update
Next i
の部分を
For i = 2 To Cells(1, 1).CurrentRegion.Rows.Count
NyID=Cells(i, 1).Value
MeMess= Cells(i, 2).Value
con.Execute ("Update costomer Set 氏名='" & MyMess & "' Where 会員番号='" & MyID & "'")
MyMess = Cells(i, 3).Value
con.Execute ("Update costomer Set 電話番号='" & MyMess & "' Where 会員番号='" & MyID & "'")
MyMess = Cells(i, 4).Value
con.Execute ("Update costomer Set 住所='" & MyMess & "' Where 会員番号='" & MyID & "'")
Next i
といった感じでしょうか?
重複しない会員番号があって、会員番号は変更しないという条件になりますが。
SQL文に強い人であればほかの書き方もあると思います。
ちなみにSQL Serverでは 更新できました。
ちなみに 追加は Insert 削除は Delete で可能です・
    • good
    • 0

難しそうですね。


できないことはないと思いますが
MySqlについての情報って調べてみましたが私も該当するような
サイトが見つかりませんでした。
ちなみにAccessではできています。
でも仮にできたとしても追加と削除は運用であまり気にしたくても
大丈夫でしょうが、
データの内容を更新するとしたら、抽出したデータと更新する内容が
常に一致する条件が必要ですので複数のユーザーでひとつのデータベースを
活用する場合は注意が必要です。
でも
同じような方法でデータの抽出はできているのですよね。
近いところまで来ていると思います。
ちょっとほかのサイトで質問してはいかがでしょうか。
結果については、私もちょっと興味があります。

http://www.moug.net/
などではいかがでしょうか?
お力になることができずごめんなさいです。
    • good
    • 0

現在のコードを提示してもらうと回答が付きやすいかと思います。


たぶん、今は
http://www.cocoaliz.com/excelVBA/index/40/
で紹介されているような Recoredsetを使って データベースの内容を
エクセルに抽出、表示できた所だと想定して回答いたします。
ちょっと検索しましたがmysplの場合の

>この取り込んだデータを編集したり、新たに新しい商品を登録して、データベースを更新
について見かけませんでしたので Accessの場合ですが
データを新しく登録する場合の例がありました。
http://www.moug.net/tech/exvba/0150040.htm

この取り込んだデータをエクセルで編集し、データベースの内容を置き換える場合は
上記のサイトの
.AddNew
!伝票番号 = Cells(i, 1).Value
!日付 = Cells(i, 2).Value
!コード = Cells(i, 3).Value
!得意先 = Cells(i, 4).Value
!金額 = Cells(i, 5).Value
.Update
の .AddNew を抜いたコードで考えてみてください。
修正の場合は、エクセルに抽出したデータが編集中にほかのユーザーで変更されないことなど
注意して使うことになります。
エクセルのシートの上には
抽出のボタンと抽出した内容を編集後に、データベースの内容を置き換えるボタンをおいて活用しています。

参考までに
http://www.moug.net/tech/exvba/0150041.htm
データを削除する場合のサンプルがあります。
    • good
    • 0
この回答へのお礼

ご回答いただき、ありがとうございます。

早速
http://www.moug.net/tech/exvba/0150040.htm
の分のサンプルコードを参考にして、下記のような形にしました。


Sub 追加()
Dim con As ADODB.Connection
Dim rs As ADODB.Recordset
Dim connectionString As String
Dim sqlStr As String

'接続文字列
connectionString = "Driver={MySQL ODBC 5.1 DRIVER};" _
& " SERVER=localhost;" _
& " DATABASE=torys;" _
& " USER=root;" _
& " PASSWORD=;"

'ADODB.Connection生成
Set con = New ADODB.Connection
On Error GoTo Err

'MySQLに接続
con.Open connectionString

'SQL文
sqlStr = "select * from customer"

'SQL文実行
Set rs = con.Execute(sqlStr)
rs.Open Sql, con, adOpenStatic, adLockOptimistic
With rs 'シートの項目行(1行目)を除いてデータ行数分ループ
For i = 2 To Cells(1, 1).CurrentRegion.Rows.Count
!会員番号 = Cells(i, 1).Value
!氏名 = Cells(i, 2).Value
!電話番号 = Cells(i, 3).Value
!住所 = Cells(i, 4).Value
.Update
Next i
End With

'クローズ
con.Close
Set rs = Nothing
Set con = Nothing
Exit Sub
Err:
Set rs = Nothing
Set con = Nothing
MsgBox (Err.Description)
End Sub

すると、
「オブジェクトが開いている場合は、操作は許可されません」
というメッセージが表示されます。

どこが問題でしょうか…

どんくさい質問で申し訳ありません。

お礼日時:2011/04/25 13:23

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

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

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

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

Qヨドバシカメラのゴールドポイントカードの更新

ヨドバシカメラのゴールドポイントカードは有効期限が2年ですよね?

使ったらその日からまたポイントが更新されるようなのですがよくわかりません。

例えば10000ポイント、有効期限が2008年10月であったとして2007年9月に1000ポイント使ったら9000ポイントが2009年9月まで有効期限は延びるのですか?
それとも10000ポイントは全部2008年10月までしか有効期限はないのでしょうか?

Aベストアンサー

  こんばんは。

 ヨドバシカメラのポイントは、最後に何か買った日から2年間ポイントの有効期間が発生します。

 使った日はカウントされず、買った日でのカウントになりますので、質問例の場合は2008年10月までです。
 この有効期限内に乾電池1個でも買えばさらに2年間有効期間が延びます。


 ヨドバシカメラのQ&Aサイトに解説されていますので貼っておきます。
 参考までにどうぞ↓

参考URL:http://www.yodobashi.com/enjoy/more/nhcontents/42921712.html

QExcelのマクロを使ってワークシート1にワークシート2のセルの値をコ

Excelのマクロを使ってワークシート1にワークシート2のセルの値をコピーするマクロを作りたいと思っています。

例えば、ワークシート2のA1~A30のセルには1~30の値が順に入っているとします。
それをA1から3の倍数分、つまりA1,A3,A6,A9,・・・,A27,A30の値を
ワークシート1のA1~A11のセルに自動で挿入してくれるマクロってどう作ればいいのでしょうか?

わかりにくいかもしれませんが、よろしくお願いします。

Aベストアンサー

No.3です!
補足の件ですが・・・

実は定義しても良かったのですが、
Dim ○○ as ・・・ と定義してもそのまま入力してもあまり変わらないかな?と思って
前回のように単純にやってみました。

Sheet名が変更されても、ある程度汎用性があったほうが良いということですかね?

もしそうであれば、仮にSheet1のSheet名が「あああ」・Sheet2が「いいい」 とすると

Sub test()
Dim i As Long
Dim sh1, sh2 As Worksheet
Set sh1 = Worksheets("あああ")
Set sh2 = Worksheets("いいい")
For i = 2 To sh2.Cells(Rows.Count, 1).End(xlUp).Row
sh1.Cells(1, 1) = sh2.Cells(1, 1)
sh1.Cells(i, 1) = sh2.Cells((i - 1) * 3, 1)
Next i
End Sub

というような感じでしょうか?

的外れならごめんなさいね。m(__)m

No.3です!
補足の件ですが・・・

実は定義しても良かったのですが、
Dim ○○ as ・・・ と定義してもそのまま入力してもあまり変わらないかな?と思って
前回のように単純にやってみました。

Sheet名が変更されても、ある程度汎用性があったほうが良いということですかね?

もしそうであれば、仮にSheet1のSheet名が「あああ」・Sheet2が「いいい」 とすると

Sub test()
Dim i As Long
Dim sh1, sh2 As Worksheet
Set sh1 = Worksheets("あああ")
Set sh2 = Worksheets("いいい")
Fo...続きを読む

Q新規更新時、ポイントは使えるか?

今月更新月なので、いったん解約し、また加入して
新しい機種とコースに加入しようと思ってます。

ポイントがたまっているのですが、機種は0円なのですが、これを事務手数料や初期加入条件のサイト料金などには使えないのでしょうか?

たぶん使えないと思いますが、他に何か利用できないでしょうか?
5000ポイント以上たまってます。

Aベストアンサー

ご質問の趣旨とはずれてしまいますが......
5000ポイントはそのまま新しい契約に移行出来ます。

新しい機種を新しいコースで購入する場合
お友達紹介キャンペーンを申込みします。
※自分の携帯から新しい自分の携帯を紹介出来ます

新しい電話機を購入時にキャンペーン適用します。
と同時に一括請求申込も行います。
(1日~数日間は2台契約になります)
一括請求処理がauの管理上で完了した時点で旧契約は解約します。

解約した時点で旧の5000ポイントは
新しい電話番号の契約に移行されます。

紹介された自分自身の新しい携帯に
2100ポイントがプレゼントさせます。
※新規契約後1~2ヶ月後

本来は紹介した方、今回の場合は自分の旧契約の携帯にも
2100ポイントがプレゼントされるのですが
解約してしまうと消滅します。
これを月末、今であれば9月いっぱいまで継続すると
紹介ポイントも新しい携帯の契約に移行されます。
正確には9月30日を超えて10月1日に解約。
1日に解約すると10月分となる1日分は請求されない。

以上のことをうまくやれば 現在の基本料金コースや
日割りの計算によって若干の違いはあるものの
元からの5000ポイント+2100ポイント+2100ポイントが
新しい契約に引き継がれます。

あとは契約によって更新月、解約違約金の発生しない
微妙な話になるのでauショップでご相談下さい。

私自身は上記の方法をとりましたが
何度もau本社?で確認したところ
紹介ポイントが発生するのは月末まで解約されずに
管理コンピュータ上で当月の課金がされることが条件と
判明しました。 ※月末に解約したら×

以上 ポイントの有効利用ではなく
ポイントを捨ててしまわなくても済む方法です。
参考程度に.....

ご質問の趣旨とはずれてしまいますが......
5000ポイントはそのまま新しい契約に移行出来ます。

新しい機種を新しいコースで購入する場合
お友達紹介キャンペーンを申込みします。
※自分の携帯から新しい自分の携帯を紹介出来ます

新しい電話機を購入時にキャンペーン適用します。
と同時に一括請求申込も行います。
(1日~数日間は2台契約になります)
一括請求処理がauの管理上で完了した時点で旧契約は解約します。

解約した時点で旧の5000ポイントは
新しい電話番号の契約に移行されま...続きを読む

Qマクロのワークシート変換でエクセルシートを取込ました。テスト用のデータ

マクロのワークシート変換でエクセルシートを取込ました。テスト用のデータが200件でそれは上手くいったのですが、次に件数を変更(200件から1件に減らしました)してマクロを走らせると、データ1件、空白199件の結果になりました。取込むファイル名は毎回同じですが、件数は可変します。この場合はどのように設定をすればいいのかお教えいただきたく思います。件数を増やした分にはそれは取り込んだのですが、減らした分がダメなようです。

Aベストアンサー

DoCmd.RunMacro "MC_XXXデータ取り込み用"
の内容がわからないと何ともできません

QTポイントカードについて

Tポイントカードの更新期限がもう少しできれそうです。
Tポイントカードを更新しなくてはツタヤなどでDVDレンタルができなくなるのでしょうか?
Tポイントカードの更新の仕方ってどうすればいいんでしょうか?
更新に料金は掛かるんでしょうか?

よろしくお願いします。

Aベストアンサー

お持ちのTポイントカードがツタヤで発行されたレンタル会員証であれば、
更新料として、300円程度必要です。
更新しないと、レンタルはできなくなります。

更新の方法は、お店に持っていけば店員さんがレジで「更新しますか?」と聞いてくれます。
更新のお知らせのハガキがあれば、更新料は必要ですが、旧作1本無料レンタルなどの
サービスを受けられることがあります。
(ハガキが必ず来るかどうかは、すみません分かりません)

ちなみに、更新期限を過ぎてしまっても、ツタヤでレンタルできなくなるだけで、
Tポイントは、最後に加算してから1年間は有効です。
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1139333956

Qワークシート移動のキーボード操作について

Microsoft Office Excel 2003において、ワークシート間を移動するにあたり、キーボートで操作したいと思っているのですが、ネット上で調べたところの

Ctrl + PgUP
Ctrl + PgDn

での操作ができなくて不便してます。
これにFnキーを加えて、Fn + Ctrl + PgUP/PgDnをやっても操作できませんでした。Ctrl + Cといった操作はできます。

パソコンはLavieのLL750/Fという型を使用しています。

どなたか原因が分かる方がいらっしゃいましたら、お教え願います。

Aベストアンサー

[タスクバー](画面の最下端で左端に“コマンド”と表示)の右端を眺めてみてください。“NUM”が表示されていませんか?ひょっとして、“CAPS”や“SCRL”も?
キーボードの“NumLock”(ナムロック)キーを一発叩いて“NUM”表示を消してみたら如何でしょ?

Q条件で更新内容を分岐させるには?

はじめまして、SQL文について教えて下さい。

今、以下のテーブルがあります。
会員マスタ MSTMEMBER
ユーザID USERID varchar(10)
ポイント POINT integer
お試しポイント OTAMESI_POINT integer

やりたいことは、以下の通りです。

この会員がポイントを利用して商品を買ったときに
お試しポイント≧利用ポイントの場合、
 お試しポイントから利用ポイントを減算更新
お試しポイント<利用ポイントの場合、
 お試しポイントは0更新
 ポイントは、利用ポイント-お試しポイントを減算更新
コレを一行のSQLでやりたいのです。

以上、宜しくお願い致します。

Aベストアンサー

使用しているRDBMSは何で、バージョンはいくつですか?

>この会員がポイントを利用して商品を買ったときに

insertやupdateの背景で、動かしたいという意味でしょうか?
トリガを使うのですか?
自分(アプリケーション側)で制御を渡すのですか?

>コレを一行のSQLでやりたいのです

ケースにより異なる更新を行うのだから、ストアドプロシジャを使うといった方法になると思いますが?
最初に質問したRDBMS名、バージョンで、使用できないかも知れません。その場合は、アプリケーション側で判定して・・・となると思います。

QExcelマクロ: 用紙の縦/横に連動してマクロボタンの凹凸も制御したい

以下は、Word2003で「用紙の向きを90度回転する」マクロです。
(Wordのメニューのファイル→ページ設定→余白タブ→印刷の向き「縦/横」)
一回実行すると90度回転、もう一回実行すると元に戻るようになってます、

これをツールバーボタンに割り付け、紙を横にしたらツールバーボタンが凹み、
紙を縦に戻したらツールバーボタンの凹みが元に戻るようにしてます。

一見これでよさそうですが、ボタンを押して紙を横にしてボタンを凹まし、
Wordを再起動すると、紙が横でないのにボタンを凹んだ状態で新規文書が
起動してしまいます。

改善はどう記述すれば良いでしょうか。
印刷の向きが「横」に設定されている間はボタンが凹んでいて欲しいのですが。


'用紙の向きを90度回転する
Sub Orientation()
  Dim myButton As Office.CommandBarButton
  Set myButton = Application.CommandBars.ActionControl
  With myButton
    If .State = msoButtonUp Then
      With ActiveDocument.PageSetup
        .Orientation = wdOrientLandscape
      End With
      .State = msoButtonDown
    Else
      With ActiveDocument.PageSetup
        .Orientation = wdOrientPortrait
      End With
      .State = msoButtonUp
    End If
  End With
  Set myButton = Nothing
End Sub

以下は、Word2003で「用紙の向きを90度回転する」マクロです。
(Wordのメニューのファイル→ページ設定→余白タブ→印刷の向き「縦/横」)
一回実行すると90度回転、もう一回実行すると元に戻るようになってます、

これをツールバーボタンに割り付け、紙を横にしたらツールバーボタンが凹み、
紙を縦に戻したらツールバーボタンの凹みが元に戻るようにしてます。

一見これでよさそうですが、ボタンを押して紙を横にしてボタンを凹まし、
Wordを再起動すると、紙が横でないのにボタンを凹んだ状態で新規文...続きを読む

Aベストアンサー

>  マクロが見つからないか、またはマクロに対する
>  セキュリティ レベルが高く設定されているため
>  マクロが無効にされています。

この件に付きましては、#3で既に説明されていますが、
http://www.patent-boy.com/products/faq/faq.cgi?mode=view&no=3

「オプション」の設定が読まれるように設定されていないものだと思います。
ユーザーテンプレート:
>場所:C:\Documents and Settings\(ユーザー名)\Application Data\Microsoft\Templates

それと、
ツール--マクロ--セキュリティ--信頼できる発行元[タブ]
 レ 組み込み済みのアドインとテンプレートをすべて信頼する(A)
ここにチェック

マイクロソフト側の説明(上記と重複します)
起動または Word 2002 を終了すると「このプロジェクト内のマクロは無効」のエラー メッセージ
http://support.microsoft.com/kb/302632/ja

OSは、XPでも、Vista でも通りますし、これに関しては、管理者権限自体は関係なかったはずです。もしも、これでも出来ないような状態というのは、こちらでは分かりませんが、Office 2000などバージョンが低い場合を除いては考えられません。

>  マクロが見つからないか、またはマクロに対する
>  セキュリティ レベルが高く設定されているため
>  マクロが無効にされています。

この件に付きましては、#3で既に説明されていますが、
http://www.patent-boy.com/products/faq/faq.cgi?mode=view&no=3

「オプション」の設定が読まれるように設定されていないものだと思います。
ユーザーテンプレート:
>場所:C:\Documents and Settings\(ユーザー名)\Application Data\Microsoft\Templates

それと、
ツール--マクロ--セキュリティ...続きを読む

QTSUTAYAカードの更新

カード自体は、1年間有効のようなのですが、
更新は、更新日の1ヶ月前後となっています。

そこで素朴な疑問なのですが、ポイントとかは、
更新日を過ぎて1ヵ月後まで有効なのでしょうか?
それとも更新はできるが、ポイントは消滅するのでしょうか?

Aベストアンサー

ポイント有効期限は:TSUTAYA会員証の有効期限内でかつティーポイントの最終変動日から1年です。

更新日期間内の更新はポイント持ち越しできます。

しかし更新日を過ぎての更新は新規扱いになるためポイントは消滅します。

参考URL:http://www.tpoint.jp/

QExcelマクロの勉強を始めました マクロの記録で保存先を個人用マクロ

Excelマクロの勉強を始めました マクロの記録で保存先を個人用マクロブックにしようとすると ”起動フォルダにある個人用マクロブックは記録のために開かれた状態でなければなりません”とのメッセージです
ところが表示タブのウィンドウの再表示をクリックしようにもグレイになっていてクリックできません

さっぱり訳が分からずお手上げです どういったことが考えられるでしょうか
何かヒントでもよろしくお願いします
なお WindowsXP オフィス2007を使っています

Aベストアンサー

「使用できないアイテム」に設定されているのかも知れません。
以下のような操作を試してみてください。

Microsoft Officeボタンをクリックし、「Excel のオプション」をクリック
左側のウィンドウで「アドイン」をクリック
右側のウィンドウの「管理」ボックスの一覧で「使用できないアイテム」を選択して、「設定」をクリック
一覧に表示されている「個人用マクロブック(personal.xlsb)」をクリックし、「有効にする」をクリック


人気Q&Aランキング

おすすめ情報