超初心者です。 セルの値が変化したときにマクロが実行されるようなものを作りたいです。 セルに入力されているのは、”関数”です。 なので、関数の”戻り値”が変化したときにマクロを実行したいのです。 今は、戻り値が変化しても式自体が変わっていないため マクロが実行されません。 (セルの式を切り取ってもう一度貼りなおせば、マクロは実行される) ちなみに今は Private Sub Worksheet_Change(ByVal Target As Range) で書いています。 まずVBAの勉強をしろと言われてしまいそうですが><; 何卒アドバイスのほどよろしくお願いいたします!
↧
”戻り値”が変化したときに、マクロを実行したい
↧
EXCEL VBAで、PnPでCOMポート番号取得
EXCELで、USB-RS232C変換アダプタをPCに繋げたとき、使用しているCOMポート番号を取得するマクロを作ろうとしています。 下記のコードのGetUseComNameプロシージャを実行してポート番号を取得できるようになりました。 わざわざGetUseComNameプロシージャを実行しなくても、USB-RS232C変換アダプタをPCに接続されたのをプラグアンドプレイで検知して、 COMポート番号を取得する仕様に改良したいのですが、どうすれば良いでしょうか。 私のパソコンの環境は(windows XP 2002 SP3 office excel2003 sp3)です。 '-------------------- Option Explicit '-------------------- Sub GetUseComName() Dim a, b, port_no As String Range("a1").Select Selection.Clear '通信ポート名を取得 a = GetUseComNo() '通信ポート名の文字列からCOMポート番号(書式「1,2,・・・」の形で)を取り出す。 Do While InStr(a, "(COM") <> 0 a = Mid(a, InStr(a, "(COM") + 4) port_no = port_no + Left(a, 1) If InStr(a, "(COM") <> 0 Then port_no = port_no & "," End If Loop 'USB-232C変換アダプタが接続されていれば、セルa1に通信ポート番号を表示する。 If port_no = "" Then MsgBox ("使用できるCOM Portがありません。") Exit Sub ElseIf InStr(port_no, ",") <> 0 Then Selection = port_no End If End Sub '--------------------- Function GetUseComNo() As String Dim Serial As Object Dim SerialSet As Object Dim objWMIService As Object Dim strComputer As String Dim intCnt As Integer '要素数 Dim strComName As String '取得したデバイス名 strComputer = "." 'WMIを呼び出す Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2") 'PnPで登録されているもの(デバイスマネージャで見えるもの)から 'シリアルポートのクラスでかつ名前に「(COMxx)」と付いているものを抽出 Set SerialSet = objWMIService.ExecQuery("Select * from Win32_PNPEntity Where " & _ "(ClassGuid = '{4D36E978-E325-11CE-BFC1-08002BE10318}') and " & _ "(Name like '%(COM%)')") '全ポートの数(取得できた項目数) intCnt = SerialSet.Count '情報の取得 strComName = "" For Each Serial In SerialSet 'デバイス名を取得 「"通信ポート (COM1)"」 If strComName <> "" Then strComName = strComName & vbCrLf End If strComName = strComName & Serial.Name Next '戻り値セット GetUseComNo = strComName End Function
↧
↧
えくせるVBAでの集計マクロについて
Excelシート上にボタンをひとつ置いてあります。 1.ボタンを押すとファイルダイアログが開く ※フォルダ選択ではなく、ファイル選択です(GetOpenFileめそっど?) ※ファイル形式は*.xls形式、または*.csv(表形式)とします 2.ファイル(例:xxx.csv)を選択すると新規ブック(例:Book1.xls)を開き、 プログラム上でデータの集計を行い、Book1.xlsへ表示させる 3.添付画像で、「田中」という人が「青森」「岩手」「福島」にひとりづついるので、出力先ファイルには「東北」というくくりをつけ「3」という値を表示したいです という流れにしたいです。 但し、 1.Excelシート上にはボタンひとつのみで、データの表示等は行いません 2.Excelの関数機能やピボットテーブルの使用は行いません データ件数が多いので手打ち入力するわけにもいかず、非常に困っております どなたか救いの手をさしのべてください。 どうかよろしくお願いいたします
↧
vb6でCultureInfoオブジェクトをSet
vb6でCultureInfoオブジェクトをSetしたいのですが、うまくできません。 Visual Basic 6.0 SP6 WindouwsXP Professional Microsoft .NET Framework 2.0 参照設定でmscorlibを追加し、下記コード作成。 Dim calendar as Calendar Dim culture as CultureInfo Dim format_info as DateTimeFormatInfo Set calendar = New JapaneseCalendar Set culture = New CultureInfo("ja-JP") ←ここでエラー(Newキーワードの使用法が不正です。) Set format_info = New DateTimeFormatInfo format_info = culture.Datetimeformat format_info.Calendar = New JapaneseCalendar() … 最終的には元号コード1~4の元号名を自動で取得したいと思っています。 (新元号対策として) そもそも、vb6ではCultureInfoクラスは使えないのでしょうか? それとも、違う方法で元号自動Getできるんでしょうか? どなたか教えて頂けたら幸いです。。。
↧
picture boxにパワーポイントをドラッグ
ご存知の方がおられましたら、お教えください。 Access2003でフォーム上のコントロール(OLE)を右クリックで「オブジェクトの挿入」 を選ぶと、パワーポイントを画像として表示することができているプログラムが あります。 これと同じことをvb.net2010でしたいと考えております。 フォーム上にpicture boxを置いて、以下のコードを書いているのですが、当然 普通の画像はドラッグ&ドロップで表示できています。 Private Sub Form5_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load PictureBox1.AllowDrop = True End Sub Private Sub PictureBox1_DragDrop(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles PictureBox1.DragDrop TextBox1.Text = CType(e.Data.GetData(DataFormats.FileDrop), String())(0) PictureBox1.Image = System.Drawing.Image.FromFile(TextBox1.Text) ←←← End Sub Private Sub PictureBox1_DragEnter(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles PictureBox1.DragEnter If (e.Data.GetDataPresent(DataFormats.FileDrop)) Then e.Effect = DragDropEffects.Copy Else e.Effect = DragDropEffects.None End If End Sub しかし、パワーポイントをドラッグすると←←←の部分でメモリーが不足 していますとエラーが表示されます。 恐らく、根本的に方法が間違えているのでしょうが、パワーポイントで作った 図をフォーム上に表示する方法をお教えください。 よろしくお願い申し上げます。
↧
↧
イベントプロシージャ 印刷が終わったあと…
VBA初心者です。 イベントプロシージャ 「beforeprint」 を使用して 印刷時、不要なオートシェイプを不可視にしています。 ~~ visible = false にすると、確かに印刷時に消えてくれるのですが 印刷が終わった後も消えたままなのです。 印刷が終わったあと、オートシェイプを再可視化するには どうしたらよろしいでしょうか?? 可視化に限らず、印刷後(もしくは印刷プレビューを閉じた後) なんらかの処理を加える方法でもかまいません。 ヒントだけでもいいので、なにとぞアドバイスの程よろしくお願いいたします!
↧
ADO 「認証に失敗しました」
ADOでデータベースに接続したいのですが ”実行時エラー -2147217843(80040e4d) 認証に失敗しました。” になります。 コードは Sub ado() Dim cn As New ADODB.Connection Dim rs As New ADODB.Recordset cn.Open "Provider = Microsoft.ACE.OLEDB.12.0;Data Source" & CurrentProject.FullName ★ rs.Close cn.Close Set rs = Nothing Set cn = Nothing End Sub です。 ★ 印の所でエラーになります。 宜しくお願いいたします。
↧
ステップ イン: 非ユーザー コード ステップ オ
VB初心者です。 簡単なフォームを作っているのですが、 ビルドは正常に終了するのに、F5を押してフォームを表示すると ----------------------------------------------------------------------- ステップ イン: 非ユーザー コード 'WindowsApplication1.My.MyApplication.New' をステップ オーバーしています ----------------------------------------------------------------------- というのが50行くらい出てきます。 しかしフォームのイベントは問題なく実行できます。 何を直せばいいのでしょうか? VBのコードのどこかがおかしいのでしょうか? フォームは1つでその上にコントロールが5つ位乗っています。 標準モジュールも1つあります。
↧
vb.netで教えてgooにログインしたい
参照設定でMicrosoft Internet Controlsを選択し、 モジュールに ******************************************************** Sub osietegoo() Dim objIE As InternetExplorer On Error GoTo Err0 '既にログイン済みなら objIE = CreateObject("InternetExplorer.Application") objIE.Visible = True objIE.Navigate("https://c.oshiete.goo.ne.jp/mypage.php3") Do While objIE.Busy = True Or objIE.ReadyState <> 4 DoEvents() Loop objIE.Document.all("uname").Value = "test" objIE.Document.all("pass").Value = "test" objIE.Document.all("Submit3").Click() Err0: '既にログイン済みなら If Err.Number = 13 Then End If objIE = Nothing End Sub ******************************************************** を貼りつけました。 その結果、 InternetExplorerの部分と DoEventsの部分がエラーになります。 (画像を参照してください) Module Module1の外に、Imports で何かを宣言しなくてはいけないですか? そもそも上記のコードはVBAなのですが VBで使う場合どうすればいいでしょうか? ご回答よろしくお願いします。
↧
↧
VBで、非アクティブでも入力を受け取る
VBをやっている中学生です。 いま、ウインドウ上にキーボードのカタチをしたものを表示させ、ユーザーが押したキーに応じてそのどこかのキーの色が変わるというソフトを作成しようと思っています。 それにあたっていくつか質問があります。 1.VBでウインドウを常に最善面に表示する方法を教えてください 2.ウインドウがアクティブになってなくても、キーさえ押されればその入力を受け取る方法を教えてくださ い。 ちなみに、キーが押されている間だけ色をかえさせたいので KeyDownと KeyUpを利用しようと思っています。 回答よろしくお願いします。
↧
アクセスVBA。ADO
CSVから列を分割してテーブルにしたいかったので 下記のコードを記述しましたが、 Dim cn As ADODB.Connection Dim rs As New ADODB.Recordset Dim datacount As Long Set cn = New ADODB.Connection With cn .ConnectionString = "Provider=Microsoft.jet.OLEDB.4.0;Data Source=" & CurrentProject.Path & "\;" .Properties("Extended Properties").Value = "text;HDR=YES;" .Open End With Set rs = cn.Execute("SELECT * FROM 構成マスタ.csv") datacount = rs.Fields.Count For i = 0 To datacount strsql = "SELECT " & rs.Fields(i).Name & " INTO " & rs.Fields(i).Name & " FROM 構成マスタ.csv;" cn.Execute strsql Next i rs.Close cn.Close Set rs = Nothing Set cn = Nothing SQLを実行するところで、「日付エラー」となってしまいます。 データには特に日付等はないのでエラーになる原因がわかりません。 どなたかご教示いただけますでしょうか。
↧
数式バーに表示される値(文字列)を取得したい
とあるセルの数式バーに表示されている文字列を取得したいのですが、 うまくいきません。 Excelが作成されたときの状況がわからない(確認することができません)のですが、 以下のようなセルがあります。 (1) セルに表示されている値: 00:00.0 (2) セルの書式設定: mm:ss.0 (3) 数式バーに表示されている値: 2012/10/6 0:00:00 このセルのvalue、value2、text、formulaをそれぞれmsgboxで表示させてみたところ、 下記のようになりました。 value = 41188 value2 = 41188 text= 00:00.0 formula = 41188 数式バーに表示される文字列が格納されているのがformulaだと思っていたのですが、 シリアル値が表示されてしまいました。 また、このセルをダブルクリックして編集状態にした後、内容を変えずにリターンキー押下で 確定させると、表示形式が "yyyy/m/d h:mm" に変更されてしまいます。 マクロの目的としては、このセルの表示形式を "yyyymmdd" に変更したいのですが、 他にも数値のデータ列があるため、このセルが「日付」であるかどうかをなるべく固定の入力値なしで (例えば表示形式が "mm:ss.0" かどうか、などの判断をせずに)やりたいと考えています。 数式バーに表示されている文字列が取得できれば、IsDateで判定できると思ったのですが・・・ どなたかお詳しい方、ご教授よろしくお願い致します。
↧
mdeファイルに変更すると開かないエラー
まったく検討もつかないエラーに見舞われています。 一度に内容が書ききれるかわからないので、足りない情報がありましたら言ってください。 mdb ファイルから mdeファイルに変更すると mdeに変更した本人だけはエラーになりません。 他の人がそのmdeを開くととあるフォームだけ イベントプロパティに指定した式 クリック時 でエラーが発生しました~ オブジェクトまたはクラスがこのイベント セットをサポートしていません。」 のエラーが出ますが 作成した本人はエラーがでません。 もちろんmdbで使用させれば誰も出ません。 クリック時と書いてあるのでクリックしたイベントにmsgbox("番号")などを書いて順番にとめて エラーの場所を探していますが サブフォームが3つあり全部に msgbox("番号")をつけて フォームとサブォームの間のロードでおきているの検討がついているのでが、コメントに変えたりして探していますが見つかりません。 同じような現象が出た経験のある方、検討のつ来そうな方教えてください。
↧
↧
Access フォームからの検索について
初歩的な質問で申し訳ありませんが教えて下さい。 Access2000を使っています。 フォームに作ったテキストボックスに、入力した値又は文字と、特定のフィールドと比較し一致した場合にそのレコードをフォームに表示する方法はないでしょうか? いろいろと、web上のQ&Aなども見ましたが、思った動作をしませでした。 考えているのは、 ・テキストボックスにある値を入力し、『Enter』を押すとテキストボックスに入力した値と特定のフィールドと一致したレコードをフォームに表示 ・一致しない場合はメッセージボックスで一致しない旨を表示 です。 ・完全一致のみ表示 VBAでの動作を考えていますが、合わせて他の方法があれば教示頂ければと思います。 以上、お手数をお掛け致しますがよろしくお願い致します。
↧
VB.Netのテキストボックスのコントロール
VB2010を使用しています。チェックボックスのon/offでテキストボックスの入力を制限しようとしています。 If Check1.Checked = True Then For Each Cont As Control In Me.Groupko顧客数.Controls If Cont.Name Like "Text*" Then ここの記述ですが 『Cont.ReadOnly = True』と書いても構文が違うのか認識しません?? End If Next Else 逆のコードの予定 End If 大量のテキストボックスがあるので一つ一つコードを書くのは面倒なので ご教授お願いします。
↧
文字列を含んだ自動採番
■見積番号というテーブルに、Dmaxで最大値+1で番号を取りたいのですが、うまくいきません。 見積番号は、「AA-9999」という形で、テキスト型です。 そしてAAのところは、Indexにコンボボックスで[リスト_チーム名]というものから選択した値を使いたい。 http://okwave.jp/qa/q5742518.html を参考に下記の式をつくってみました。 フォームの[リスト_チーム名] の値をうまくもってこれないことと、 クエリで表じするとレコード数が、Max値と同じ数だけどんどん増えていくのが問題です。 どなたか教えてもらえませんか。 ----------------------------------------------------------- 式1: Format(DMax("Right(見積番号,4)","■見積番号")+1,"Forms![F_A_Index]![リスト_チーム名] " & "-" & "0000")
↧
エクセル2003で作ったVBAが2007で動かない
現在、エクセル2003で作成したVBAがエクセル2007だと、マクロを有効にして起動させようとするとコンパイルエラーとなって動作しない現象が起きていて困っています。 どなたか、解決方法をご教授頂けないでしょうか? ・VBAを含んだファイルを開いて、マクロを有効にすると ”コンパイルエラー:変数が定義されていません” というエラーボックスが出てきてプログラムの矢印のポイントがPrivate Sub User Form_Initialize() のところを指したまま止まってしまう。 ・このVBAはエクセルの表の書かれたデータをRS-232Cで出力するようなプログラムが使われていて、MSCommというものが使われています。この関連のプログラムが2003と2007では互換がないということはありますでしょうか? どうぞ、よろしくお願い致します。
↧
↧
VBかVBAでIEのようなWEBブラウザ
VBかVBAでIEのようなWEBブラウザを作ろうと思ってるのですが VBとVBAとどちらがいいでしょうか? コントロールや出来る事の多さは同じでしょうか? ご回答よろしくお願いします。
↧
Excel VBA のコンパイルエラー
Excel VBA で GDI32 にある API を declare するとメモリ不足のコンパイルエラー となってしまいます。 どなたか解決策を御教示下さい。 使用するAPI は GetTextExtentPoint32 です。 コンパイルエラーが起きるVBAコードは、MSのVBサンプルから拾ったものです。 private Declare Function GetTextExtentPoint32 Lib "gdi32" Alias "GetTextExtentPoint32A" ( _ ByVal hdc As Long, _ ByVal lpsz As String, _ ByVal cbString As Long, _ ByRef lpSize As CSize) As Long Private Type CSize cx As Long cy As Long End Type 同じ GDI32 にある DeleteObject の declare 文はエラーが発生しません。 環境は以下の通りです。 Excel 2007 OSはVista 32bit メモリは 3G で約60%使用 宜しくお願いします。
↧
MSDNでVisualBasicコードを印刷には?
WindowsXP, InternetExplore8でMicrosoftのMSDNのあるページの画面を印刷したいのですが、画面上には、VisualBasic、C#、VisualC++などいろいろなプログラムの言語のサンプルコードが表示されているのですが、[ファイル]メニューの[印刷プレビュー]で確認するとC#のサンプルコードだけしか表示されません。実際に[ファイル]メニューの[印刷]で印刷してみてもC#のサンプルコードだけしか印刷されません。 ここで、「C#のサンプルコードだけ」とは、全体の説明文と、C#のサンプルコードだけあり、他の言語のサンプルコードがないという意味です。 例えば、 http://msdn.microsoft.com/ja-jp/library/system.runtime.interopservices.varenum.aspx のMSDNのページには、「VarEnum 列挙体」の説明が記載されていますが、VisualBasicのサンプルコード(説明文を含む)を印刷することはできるのでしょうか。 このページ上にある「言語フィルタ」や「印刷用ページ」なども試してみましたができませんでした。 よろしくお願いします。
↧