出産前後の痔にはご注意!

VBAにて、ユーザーフォーム上に設置したスプレッドシートを編集するコード

VBAにて、OMC?という機能を使ってユーザーフォームにスプレッドシートを複数設置しました。
このスプレッドシート上にあるデータを、エクセルシートに持ってくる事はできたのですが、スプレッドシートそのもののデータの追加、削除等が出来ません。

スプレッドシート→エクセルシートへのデータ移動はこのようなコードを使っています。これは問題なく動きました。
Sheets("DB").Range("H1").Value = UserForm1.Spreadsheet2.Range("A" & cnt).Value

ですが、逆に
UserForm1.Spreadsheet2.Range("A" & cnt).Value = Sheets("DB").Range("H1").Value
としても、エラーは出ませんが反映されないようです。

やりたい事は、スプレッドシートのある範囲の値をクリアしたいというもので
UserForm1.Spreadsheet1.Range("B10:H22").Select
Selection.Clear

このように設定したのですが、やはり反映されません。

ユーザーフォーム上のスプレッドシートを編集するには、何か特別なコーディングが必要なのでしょうか?

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

A 回答 (1件)

当方の Excel2003 + OWC11のスプレッドシートでは お示しのコードで動作していますよ



スプレッドシートのシートを指示していないのでアクティブシートに対しての操作になっているはずです

cntの値自体は期待通りなのでしょうか

UserForm1.Spreadsheet1.Range("B10:H22").Select
で選択自体は出来ていますか?

Selection.Clear
と記述してしまうとExcelのシートに対しての動作になってしまうと思います

スプレッドシートに対して行いたいのであれば
UserForm1.Spreadsheet1.Selection.Clear
といった具合にオブジェクト指定するか

With/End With などで指示しておきましょう

With UserForm1.Spreadsheet1
  .Range("B10:H22").Select
  .Selction.Clear
End With
といった具合です
    • good
    • 0

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

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

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

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

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

Qユーザーフォームにワークシートを表示させる。

Offics Professional Plus2010を使用しています。あるサイトで「ユーザーフォームにワークシートを表示させる。」を見て説明通り行いましたが、「Microsoft Office Spreadsheet」がなく、説明通りOfficsのCDを入れ、「機能の追加/削除」を選択、Excel項目の+を外しましたが中に見当たりません。あるのは「NET プログラミンサポート」と、「アドイン」と、「サンプルファイル」です。何を選択したら良いのでしょうか?教えてください。

Aベストアンサー

http://oshiete.goo.ne.jp/qa/6402282.html?order=asc

2007用に別途ダウンロードできますが
『2007 Microsoft Office system 用 Microsoft Office 2003 Web Components Service Pack 1 (SP1)』
http://www.microsoft.com/downloads/details.aspx?displaylang=ja&FamilyID=c815dffa-d5f3-4b71-bf46-13721bd44682

これが2010単独環境でも動作するかどうかというのは..さて、どうでしょうか。
http://support.microsoft.com/kb/972129/ja
http://support.microsoft.com/kb/828949/ja

winXPsp3/xl2000,2003,2007,2010 の混在環境で動く事は確認してますが
普段から使いこなしてるわけではないので検証不足は否めません。
他者への配布が関係なく、個人的に使うだけならしばらく試してみると良いかもしれませんね。


#使用時、ActiveXの初期化..等々に関する疑問が発生したら以下を参考に。
http://oshiete.goo.ne.jp/qa/6669982.html

http://oshiete.goo.ne.jp/qa/6402282.html?order=asc

2007用に別途ダウンロードできますが
『2007 Microsoft Office system 用 Microsoft Office 2003 Web Components Service Pack 1 (SP1)』
http://www.microsoft.com/downloads/details.aspx?displaylang=ja&FamilyID=c815dffa-d5f3-4b71-bf46-13721bd44682

これが2010単独環境でも動作するかどうかというのは..さて、どうでしょうか。
http://support.microsoft.com/kb/972129/ja
http://support.microsoft.com/kb/828949/ja

winXPsp3/xl2000,2003,2007,20...続きを読む

Q【Excell VBA】ユーザーフォーム上のスプレッドシートのセルを選択したときのイベント

Excell VBA にて、
ユーザーフォーム(userForm1)に、スプレッドシートを
1)その他のコントロール
2)Microsoft Spreadsheetを追加
によって追加して、
そのspreadSheet1上のsheet1の任意のセル(D:*)をクリックしたとき、その行のD1:D5k一連の値を変数に代入したいのですが、
まず手始めとして、そのセルを選択したときにイベントを発生させたい。
 該当のセルを選択してプロシージャを追加すると
Private Sub Spreadsheet1_BeforeContextMenu( _
ByVal x As Long, _
ByVal y As Long, _
ByVal Menu As OWC11.ByRef, _
ByVal Cancel As OWC11.ByRef _
)
となります。

比較のため
Private Sub Spreadsheet1_SelectionChange(ByVal Target As Range)
  If Target.Address() = "$A$1" Then
    MsgBox "このセルはA1です。"
  End If
End Sub

だと、

Error・・・「コンパイル エラー:
プロシージャの宣言が、イベントまたはプロシージャの定義と一致していません。」

・・・どうすればよいのでしょう。
最終的には、「その行のいくつかの値を変数に代入したい」のですが

Excell VBA にて、
ユーザーフォーム(userForm1)に、スプレッドシートを
1)その他のコントロール
2)Microsoft Spreadsheetを追加
によって追加して、
そのspreadSheet1上のsheet1の任意のセル(D:*)をクリックしたとき、その行のD1:D5k一連の値を変数に代入したいのですが、
まず手始めとして、そのセルを選択したときにイベントを発生させたい。
 該当のセルを選択してプロシージャを追加すると
Private Sub Spreadsheet1_BeforeContextMenu( _
ByVal x As Long, _
ByVal y As Long, _
ByVal Menu A...続きを読む

Aベストアンサー

こんにちは。

Private Sub Spreadsheet1_SelectionChanging(ByVal Range As OWC11.Range)
 With Spreadsheet1
 'クリックしたセルの1行目の値
  MsgBox .Cells(1, Range.Column).Value
 End With
End Sub

Qユーザーフォームを表示中にシートの操作をさせるには

ユーザーフォームを表示中にシートの操作をさせる事はできるのでしょうか。
セルへの入力、画面のスクロールなどは、ユーザーフォームからマクロを実行させたり、.hideでユーザーフォームを一時的に隠すなどすればいいのでしょうが、そういう手段をとらないでユーザーフォームを表示中にシートの操作をさせる事はできるのでしょうか。

Aベストアンサー

ユーザフォームの
ShowModalプロパティを
falseにすればよいかと。

Q無料で使えるグリッドコントロール

こんにちわ。

WindowsXP/Excel VBAで、無料で使用できる
グリッドコントロールを探しています。

チェックボックスを追加できたりできると、
さらに嬉しいです。

お勧めのコントロールがあれば、教えてください。
有料でも、安価であれば結構です。
よろしくおねがいいたします。

Aベストアンサー

お世話になります。

リストビューコントロールを使われてはいかがでしょう。
http://www.officetanaka.net/excel/vba/listview/index.htm

# VBA の場合、CheckBox プロパティってあったかな...。

Qエクセル VBA ユーザーフォームを閉じる

ユーザーフォームを開く時は
UserForm1.Showですが
閉じる時は?
UserForm1.Close
だとコンパイルエラーになります。
End
にするしかないですか?

Aベストアンサー

Unload Me とか Unload UserForm1 でユーザーフォームを閉じることができます。

QEXCEL VBA リストビューの項目編集

質問させさせていただきます。
EXCEL VBAで、フォーム上にEcxelシートのような表形式のコントロールを貼り付けて、編集したいと考えています。
調べたら、見た目はリストビューが良かったのですが、2列目以降が選択できないとの事なので、
他にグリッド系コントロール(無料)で良いものがあったら教えていただきたいと思います。
また、リストビューを使った場合でも、何か案があれば助言いただきたいと思います。
リストビューに期待しただけに、ショックは大きいです・・・

Aベストアンサー

>..それと余談なのですが、スプレッドに限らず2003で作ったマクロは、
>問題なく2007で動くのでしょうか?

下位バージョン互換を考慮されている機能は動きます。
ですがやはりCommandbar関連など、仕様が大きく変わった部分や
FileSearchオブジェクトなどのように、消えた機能を使ってると動きません。
http://www.asahi-net.or.jp/~ef2o-inue/kankyo/sub02_04_04.html
http://office.microsoft.com/ja-jp/excel-help/HA010198895.aspx
http://technet.microsoft.com/ja-jp/library/cc179188%28office.12%29.aspx
http://msdn.microsoft.com/en-us/library/bb242669%28office.12%29.aspx

Q【Excel VBA】マクロでExcel自体を終了させたい

環境:WindowsXP、Excel2003

マクロでエクセルを終了(ブックを閉じて、アプリケーション自体も終了)させたいのですが、以下のコードではアプリケーションが閉じてくれません。

ThisWorkbook.Close
ExcObj.Quit
Application.Quit

どこか悪いところはありますでしょうか?

よろしくお願いします。

Aベストアンサー

普通に考えれば質問者のコードで上手くいきそうですが
hana-hana3さんの回答にもあるようにThisWorkBook.Closeでコード終了となりますので
Application.QuitをThisWorkBook.Closeの前にもってこないといけません。
Application.Quitはそれがあるプロシージャのコードが全て終わるまで
その実行を保留するちょと特別動作をします。

'-------------------------------------
 Application.Quit
 ThisWorkbook.Close
'-------------------------------------
 
 

QEXCELのVBAでのSelectとActivateの違い

VBAの初心者です。
ExcelのVBAでメッセージを表示してシートを切換えるというのを作りたいのです。
見真似で作成したのが↓です。


Dim rtn As String
rtn = MsgBox("シートを切換えますか", vbYesNo, "シートの切替")
If rtn = vbYes Then
Worksheets("送付先一覧").Activate
Range("a1").Select

Else
Exit Sub
End If

動作確認はできましたが、上記の「Activate」を「Select」に変更しても特に動作異常がありません。
そこで、疑問ですが、「Activate」と「Select」ってどうやって使い分けるのでしょうか?

Aベストアンサー

こんにちは。

通常は、シートもセルも Select でよいと思います。
選択して、扱えるようにするということだと思います。

#2さんも述べておりますが、Activate って、ひとつを選ぶことですね。でも、なぜか、Activate は、ほとんど使いません。

たぶん、Select は、選択した後に、その選択したものを、そのままオブジェクトとして確保して使えるので便利だから選ばれるのかもしれません。

Select → Selection
として使えます。

QEXCEL VBA で現在開いているブックのファイル名を取得する方法

EXCEL2003 VBAで業務を簡素化するために、現在開いているブックのファイル名を取得する方法が分かりません。
作業手順をマクロを使って処理していますが、オリジナルのワークブックをファイル名を変えて保存し、以後、このワークブックを読み込んで使用しています。
このときのVBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり、以後の業務に使用できません。
常にファイル名を取得出来るVBAをどなたか、教えて下さい。

Aベストアンサー

>現在開いているブックのファイル名
 ちょっと曖昧な表現かなぁという気もいたしますが、VBAが書いてあるブックのブック名は
ThisWorkbook.Name
で、現在 "アクティブにして" 操作対象になっているブックの名前は
ActiveWorkbook.Name
ですね。

 しかし、
>VBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり
というような文脈からすると、
ThisWorkbook.Name
の方ですかね。

QEXCEL VBA で指定した範囲に入力があるかどうか?

こんばんは!!
EXCEL VBAを使い出して、初日からつまずいてます・・・。
みなさん、アドバイスよろしくお願いします!!

で、早速、質問なんですけど、
指定したセル範囲のいずれかに入力があるか調べたいんですけど、それができるプロパティとかってあるんでしょうか?
地道にセル毎にチェックするしかないいんでしょうか??

たとえば、範囲をA1:H1として、その範囲内のセルに何か入力があったらTrueが返ってくるとか・・・。

もし、知ってる方がいらっしゃたら教えてください!!
よろしくお願いします!!!!!

Aベストアンサー

>これは、まず範囲を選択して、入力チェック()を呼ぶことなのでしょうか
書いたモジュールは範囲が指定してあります。("A1:H11"は間違いです。質問からすると"A1:H1"です)何もしないで入力チェックを実行します。
モジュールを CountA(Selecton) に変えれば任意の選択範囲がチェックの対象になります。任意の範囲を選択して実行します。
メッセージは確認するためで、IF ・・・・ で入力有無が判定できます。

>ワークシート関数CountAってどうやったら出てくるんですか??
ついApplicationと書いてしまうんですが、『WorksheetFunction.』と打てば、候補の関数名が表示されると思います。

下記の fnc入力チェック は入力有無を返すユーザー定義関数です。
書き方の例です。分かりやすくなった?この例は引数に"A1:H1"をセットしています。任意の範囲にするには Selection.Address に変えます。

Sub 入力チェック()
  Dim 入力有無フラグ As Boolean        '入力有無の答え

  入力有無フラグ = fnc入力チェック("A1:H1")  'モジュール内でA1~H1を指定(固定)

  MsgBox 入力有無フラグ            '帰ってきた答えをメッセージボックスで確認
End Sub

'入力有無を返すユーザー定義関数
Function fnc入力チェック(checkAddress As String)
  If WorksheetFunction.CountA(Range(checkAddress)) > 0 Then
    fnc入力チェック = True
  Else
    fnc入力チェック = False
  End If
End Function

>これは、まず範囲を選択して、入力チェック()を呼ぶことなのでしょうか
書いたモジュールは範囲が指定してあります。("A1:H11"は間違いです。質問からすると"A1:H1"です)何もしないで入力チェックを実行します。
モジュールを CountA(Selecton) に変えれば任意の選択範囲がチェックの対象になります。任意の範囲を選択して実行します。
メッセージは確認するためで、IF ・・・・ で入力有無が判定できます。

>ワークシート関数CountAってどうやったら出てくるんですか??
ついApplicationと書いてし...続きを読む


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

人気Q&Aランキング