Quantcast
Channel: OKWAVE 最新質問(Visual Basic/257)【本日】
Viewing all 6510 articles
Browse latest View live

シートへのD&Dを禁止にする

$
0
0
VBAでフォーム上のListViewにavi動画ファイルをD&Dすると そのパスを読み取って、自動でプログラムを実行するマクロを作成しました。 問題無く実行できる場合には問題ないのですが バグがあったりして、デバッグモードに入ったり 途中でプログラムの実行を中断したりすると、 そのavi動画ファイルをシート上にD&Dしたのと同じ状態になり Excelでavi動画ファイルを開こうとしてしまいます。 大きなファイルなら開けませんが、 小さなファイルだとバイナリデータとして無理矢理開くことになり Excelがフリーズしてしまいます。 それでVBAかExcelの設定で シート上にファイルをD&Dしても読み込まない設定にしたいのですが どのようにすれば良いでしょうか? 一応検索して調べたのですが見つかりませんでした。 どなたか教えてください。

フェオームコントロールとActiveXコントロール

$
0
0
VBAについての質問です。 Excel2013を使っています。次のような場合に不具合があります。 sheet1上にフェオームコントロールのボタンを配置し、ユーザーフォームを呼び出します。 ユーザーフォームにはコマンドボタンを配置し、コードは Worksheets("Sheet2").Select です。 実行すると、Sheet2に画面は変わりますが、セルに何かを入力すると、入力したはずのものがすぐ 消えて、しまいます。スクロールもできません。 実際には Sheet1 に入力されています。 sheet1上のボタンをActiveXコントロールのコマンドボタンを使用して、同じユーザーフォームを呼び出し実行すると、正常に作動します。 この現象は、2010以前のバージョンだと、どちらも同じ動作をすると思います。すべてを調べたわけではありませんが。 12月10日(水)の更新後、Excel2013ではActiveXコントロールのコマンドボタンが使用できなくなったと思いますが、VBAに詳しい方で、何か解決策をご存じの方、アドバイスをお願いします。

vba 住所で判断して担当支店に振り分ける マクロ

$
0
0
困っております。助けてください。。。 顧客一覧があります。 それぞれの町名で判断して、これぞれの顧客に担当支店を振り分けたいのですが、 if文で ○○町 だったら 01支店 else if ××町 だったら 02支店 というふうに、ひたすら書いていくしかないのでしょうか? 対象住所は一つの市の数あるので、膨大です。 郵便番号で範囲をきめて、ふりわけていくのが一番かと思っているのですが・・・。

画像ファイルを配列に格納する方法

$
0
0
http://oshiete.goo.ne.jp/qa/8852322.html このページで、 配列から直接圧縮画像ファイルを出力する方法を教えていただきました。 次は圧縮画像ファイルから配列を読み取るプログラムを作りたいと考えています。 http://tanlab.blog.fc2.com/blog-entry-31.html このページで画像ファイルをメモリに読み込む方法は書かれていて、 GdipCreateBitmapFromFile(ByVal StrPtr(file1), image) で変数imageに読み込むことができます。 このimageを上記のページの変数pDstBitmapに回すことで、 読み込んだ画像を別の画像として出力できることがわかりました。 いまやりたいことは 変数imageあるいは変数pDstBitmapを配列に書き出すことなのですが どうやれば良いでしょうか? これらの変数はLongとして定義されていて、 型が配列ではないのですが どのようにして扱えば良いのでしょうか? 一応、検索などして調べてみましたが 分かりませんでしたので教えてください。

VBAのエラー発生場所をメッセージBOXに表示

$
0
0
VBAのOn Errorステートメントでエラー処理を行うときに、VBAソースの何行目で エラーが発生したかをメッセージBOXに表示したいのですが。 また、上記に近い類似の方法がありますか。 ご指導願います。

8bitインデックス画像の入出力方法

$
0
0
http://oshiete.goo.ne.jp/qa/8852322.html http://oshiete.goo.ne.jp/qa/8856128.html このページで画像の配列への入出力の仕方を教えていただきました。 配列の読み書きの方法が分かればできるかと思ったのですが やり方がわかりませんでしたので質問いたします。 24あるいは32bitの場合には教えていただいた方法で問題ないのですが 8bitの画像(インデックスカラー画像)の場合にはどうしたら良いでしょうか? 8bit画像を GdipCreateBitmapFromFile(ByVal StrPtr(strInName), pSrcBitmap) で取得し、そのまま GdipSaveImageToFile pSrcBitmap, StrPtr(strOutName), encTIFF, VarPtr(udtEncParam) を使って、別の画像形式に再圧縮して出力しても 8bit画像として出力されるので、 pSrcBitmapにはインデックスカラーに関する情報と 256階調(8bit)での画像情報も含まれているようです。 しかしながら、 GdipBitmapGetPixel pSrcBitmap, x, y, myARGB で画像情報を抽出すると 8bit画像を読み込んだとしても 32bitカラー情報として抽出されてしまいます。 http://www.vbforums.com/showthread.php?718163-GDI-GdipGetImagePixelFormat-(untrusted) このサイトにPixelFormatの設定の仕方が書かれてあって、 PixelFormat24bppRGB = &H21808 を用いると24bit画像として出力できることが分かりました。 PixelFormat8bppIndexed = &H30803 を指定してみたのですが、 一応、8bit画像として出力することは確認できたのですが 出力にものすごく時間がかかってしまうのですが。 恐らくインデックスを生成するのに時間がかかっているのだと思うのですが 既にインデックスがでている場合にどのように指定すれば良いか、 8bit画像からインデックスを抽出するのかが分からないのですが。 どのようにすれば インデックスカラーと256階調(8bit)での画像情報を 配列に読み込み、および配列から画像への書き出しを行えますでしょうか?

EXIF情報を出力するマクロ

$
0
0
JPEG画像のEXIF情報を読み取って、撮影日時を出力するプログラムを作りたいのですが http://www.btinc.jp/vba_labo/study1.html このページに書かれたものを実行しようとすると Set objJpeg = New JpegExif のところで、 ユーザー定義型は定義されていません と言われて実行することができません。 http://blog.livedoor.jp/hamu1962/archives/51375817.html このページに書かれたものを実行しようとすると Set objFolItem = objFol.ParseName(tarFile) のところで、 オブジェクト変数またはWithブロック変数が設定されていません。 と言われて実行することができません。 どうすればうまくいきますでしょうか? それと、上記二つの方法はどちらの方がお勧めでしょうか?

文字列をソートする方法

$
0
0
数値をソートする方法にはバブルソートやクイックソートなどがあり アルゴリズムは分かるのですが 文字列を五十音順にソートしたい場合にはどのようにしたら良いですか? 検索をかけてみたのですが、大抵プログラミング言語に備わったsortの方法が紹介されており 自分で処理を行う方法については書かれていません。 ExcelのSort機能を使わない方法で教えてください。

Excelマクロで不要な行を繰り返し処理で削除する

$
0
0
下記の図表【事前】のA列に時間(シリアル値)が入力されていますが、 これをマクロを使って不要な時間帯のデータを行ごと削除したいです。 それを実行するためのマクロをご教示頂けますでしょうか? 削除対象の条件 ・9:00:00~18:00:00以外の夜間や早朝の時間帯は削除する。 その他 ・データが入力されている行数分繰り返し処理 ・秒数、分数は全て0 ・列は3列(B、C列は任意) ・Excelのバージョンは2007 【事前】   A                       B      C 1 yyyy/mm/dd 01:00:00 ※削除対象 2 yyyy/mm/dd 23:00:00 ※削除対象 3 yyyy/mm/dd 09:00:00 4 yyyy/mm/dd 15:00:00 5 yyyy/mm/dd 17:00:00 6 yyyy/mm/dd 19:00:00 ※削除対象 7 yyyy/mm/dd 04:00:00 ※削除対象 【事後】   A                       B      C 1 yyyy/mm/dd 09:00:00 2 yyyy/mm/dd 15:00:00 3 yyyy/mm/dd 17:00:00

VB.NET 2005→2013 警告について

$
0
0
VB.NETを初めて1ヶ月未満の初心者のジィジィ(50歳)です。 VB2005からVB2013に移行しています。 エラー、警告をなんとか対処していましたが、以下の警告の意味がわかりません。 警告(1) COM 参照 "WMPLib" をパス "C:\Windows\system32\wmp.dll" から処理しています。プロパティ get アクセス操作子 'sessionPlaylistCount' (有効な戻り値の型のない型 'WMPLib.IWMPNowPlayingHelperDispatch' 上) がタイプ ライブラリ インポーターで見つかりました。 インポーターはこのプロパティをメソッドとしてインポートすることを試行します。 警告(2) COM 参照 "WMPLib" をパス "C:\Windows\system32\wmp.dll" から処理しています。'IWMPGraphEventHandler.NotifyAcquireCredentials' の引数のうち少なくとも 1 つをランタイム マーシャラーでマーシャリングできません。 したがってこのような引数はポインターとして渡され、アンセーフ コードの使用が必要になります。 Formの画面では、WindowsMediaPlayerを使用しています。 参照には、参照名で「WindowsMediaPlayer」が2つ存在しています。 パスは、 「C:\(開発場所)\obj\Release\AxInterop.WMPLib.dll」と 「C:\(開発場所)\obj\Release\Interop.WMPLib.dll」です。 なんとなく、このあたりだとは思っていますが、どうしていいのかわかりません。 「ここは確認したの」的な事でも結構です。 わかる方、宜しくお願い致します。

コンボボックス 連動 VBA

$
0
0
VBA初心者です。 ご教授ください。 入力フォームにコンボボックスを4っつ リストボックスを一つ作成し 一つ目のコンボでシートを選択後 二つ目以降のコンボボックスでセル範囲を選択し絞り込み、最終のリストボックスに 絞り込み表示を行い、コマンドボタンにて フィルター操作を行いたいのですが 重複表示させずに、絞り込んでいく方法がうまくいきません。下記コードにコンボボックス3以降も記述したのですが、絞り込みができません。よろしくお願いします。 Private Sub UserForm_Initialize() For i = 2 To Worksheets.Count 'シートの数だけ繰り返す ComboBox1.AddItem Worksheets(i).Name '取得したシート名をリストボックスへ Next End Sub Private Sub ComboBox1_Change() Dim Index As Integer Dim strBuf As String Index = ComboBox1.ListIndex 'ワークシートリストの選択された位置 strBuf = ComboBox1.List(Index) 'ワークシート名を取得 Worksheets(strBuf).Activate ' セルA1を左上端にする Application.Goto Reference:=Range("A1"), Scroll:=True ComboBox2.Clear Dim リスト As New Collection Dim 列 As String, 上端セル As String, 最下端セル As String Dim セル範囲 As Range, 各セル As Range 列 = "b" '※3 上端セル = 列 & "4" '※4 最下端セル = 列 & "65536" With Worksheets(strBuf) '※5 Set セル範囲 = .Range(.Range(上端セル), .Range(最下端セル).End(xlUp)) End With For Each 各セル In セル範囲 'セル範囲の各セルについて繰り返し処理 On Error Resume Next '次行が実行時エラーならその次行から継続 リスト.Add 各セル.Value, CStr(各セル.Value) 'Collectionオブジェクトにメンバを追加 If Err.Number = 0 Then '実行時エラーが発生していなければ Me.ComboBox2.AddItem 各セル.Value 'コンボボックスのリストに項目を追加 End If On Error GoTo 0 Next End Sub

旧VBAがExcel2013で突然実行エラー

$
0
0
Excel2003で作ったVBAマクロを互換モードで保存し、ずっとExcel2013で実行できていましたが、2014.12.13に実行しようとしましたら、 Sheets("当番表サンプル").Select で実行エラー(インデックスエラー)になってしまいました。 Excel2010で実行したら、通りました。 どういう理由でしょうか?

Formatでmmが月と分を意味する理由

$
0
0
日時をFormat関数を使って所望の書式に変更したいのですが http://excelvba.pc-users.net/func/func3.html このページにあるようになぜかmmには 月と分という二つの異なるものが割り当てられています。 yyyymmdd のようにyyyyやddと一緒に書くと月となり、 mmのように単体で書いても月になり、 hh:mm:ss のようにhhやssと一緒に書くと分として扱われます。 では、 分だけを単体で取り出したい場合にはどうしたら良いのでしょうか? yyyymmss とかに年と時間を混ぜたらどうなるのでしょうか? 月と分をちゃんと使い分ける方法があれば教えてください。

作ったマクロに不備があるかどうか分かりません

$
0
0
様々なサイトを参考にして、自分でマクロを作り、うまく動作したまではいいのですが、不勉強で不備があるかどうか自分では判断できません…。 どなたか不備を指摘してはいただけないでしょうか。 内容:指定したフォルダ内のフォルダ名を、一行ずつ間を空けて書き出す。 Public Sub make_FolderList_02() ' FileSystemObjectを作成する。 Dim Obj As Object Set Obj = CreateObject("Scripting.FileSystemObject") ' フォルダ名をシート上に出力する為のカウンタ Dim cnt As Long cnt = 0 ' 「C:\Sample」フォルダ配下に存在するフォルダを一つずつ参照する。 Dim f As Object For Each f In Obj.GetFolder("C:\Users\test\Desktop\test").SubFolders ' フォルダ名をシート上に出力する。 Range("A1").Offset(cnt, 0).Value = Obj.GetFolder(f).Name cnt = cnt + 1 ' 空白セルを出力する。 Range("A1").Offset(cnt, 0).Value = Null cnt = cnt + 1 Next f Set f = Nothing ' 別のフォルダを書き出す Dim a As Object For Each a In Obj.GetFolder("C:\Users\test\Desktop\nyannko").SubFolders ' フォルダ名をシート上に出力する。 Range("A1").Offset(cnt, 0).Value = Obj.GetFolder(a).Name cnt = cnt + 1 Range("A1").Offset(cnt, 0).Value = Null cnt = cnt + 1 Next a Set a = Nothing ' オブジェクトを破棄する。 Set Obj = Nothing End Sub ここでは、2つのディレクトリを書き出していますが、実際には、6~7つ書き出す予定です。 また、参照先を共有フォルダにした場合、過剰な負荷が掛からないかどうかも、教えていただけると嬉しいです。 大変無駄の多い内容だとは思いますが、ご指導のほどよろしくお願いいたします。

WinXP,7のIE8にて新規セッションで起動

$
0
0
VBAを使用してWebサイトにログインを行いたいのですが、ログインをする際に必ず新規セッションでウィンドウを起動してログインするようにするにはどのようなコードを組めばいいのでしょうか? 下記のようなコードで現在は動かしているのですが、explore.exe -noframemergingで起動すれば新規セッションでIEを開けるとのことだったのですが、上手く組み込むことができません・・・。 どのようにすれば上手く動くのでしょうか・・・。 申し訳ありませんがどなたかご教授願います。 '========================================= sub ろぐいん() '変数 Dim IE As Object Dim UserID As String Dim UserPass As String 'ID,PASS設定 UserID = "ID" UserPass = "PASS" 'IE起動 Set IE = CreateObject("InternetExproler.Application") IE.Visible = True '接続 IE.navigate "http://" '文字入力 IE.document.gatelementbyid("ID").Value = UserID IE.document.gatelementbyid("PASS").Value = UserPass '送信 Call IEButtonClick(IE, " 送信 ") Set IE = Nothing End Sub 'クリック Public Function IEButtonClick (ByRef IE As Object, ButtonValue As String) Dim ObjInput As Object For Each ObjInput In IE,document,getelementsbytagname("INPUT") If ObjInput,Value = ButtonValue Then ObjInput,Click Exit For End If Next End Function '=========================================

VB 線を描く

$
0
0
VBを活用していきたく、勉強を始めました。 (N88-BASICはずっと前に使っていました。) 下記URLを参考に、線を描くことに挑戦したのですがうまくいきません。 状況は以下の通りで、原因がわからず困っているのですが、誰かしっている人いたらお願いします。 ・Visual Basic 2010 Expressを使用 ・下記URLを参考に  e.Graphics.DrawLine(Pens.Red, 50, 60, 100, 150)  をForm1.vbに記述してF5キーで実行したらエラー一覧に 「'Graphics'は'System.EventArgs'のメンバーではありません。」 との表示が出てきてしまします。 参考URL http://homepage1.nifty.com/rucio/VBStandard/vbstandard2.htm

VB.NETでDataTableにデータ追加したい

$
0
0
VisualStugio.Net2003でソースコードを記述しており、コード内でSQLのSELECT文を実行して、実行結果をDataTableに格納する処理をしています。 今回、とあるテーブルに対し2パターンのSQLを実行し、それぞれの実行結果を1つのDataTableに格納したいのですが、どのようにすれば良いでしょうか? 自分で調べたところ、先に実行したSQL結果に、後から実行したSQL結果を1行ずつ追加するといった方法は見つかりましたが、1行ずつではなく、一括で追加する方法が知りたいです。 前提として、2回のSQL実行では、同じテーブルの同じ項目をSELECTしております。 下記に簡単ですがコード記述の概要を補足しておきます。 ・コード記述概要 【変数宣言】 Dim DB1 As DataTable Dim DB2 As DataTable 【SQL文1】 SELECT A,B,C FROM テーブル1 WHERE 条件文1 DB1 = SQL文1の実行結果 【SQL文2】 SELECT A,B,C FROM テーブル1 WHERE 条件文2 DB2 = SQL文2の実行結果 【DB1にDB2のデータを追加】←ここのやり方を知りたいです DB1 = DB1 + DB2 よろしくお願いいたします。

Excel2013のVBでFT245を制御したい

$
0
0
Excel2013のVBでFT245を制御したいのですが、DLLの呼び出し方やその後の使い方などがわからず困っています。 制御したいのは秋月電子の「FT245RL USBパラレル変換モジュール」です。 サンプルプログラムをダウンロードしたりしましたがエラーで使えなかったり、VB6で作られたものはそのままExcelで動作しなかったりです。 パソコンはWindows8.1(64bit)で、Excelの指定のセル上に書き込んだ1バイトデータを、USBを通してパソコンから出力し、パラレル8ビットで扱いたいのです。 今実験的に変換モジュールの出力ピンにLEDを付けて、LEDを点灯させる回路を作ったのですが、パソコンからの操作方法がわからず止まっています。 どなたかお分かりになるかたいらっしゃいませんでしょうか。

OUTLOOKオプション付属メール送信方法

$
0
0
VS2010を使用 メールサーバーはExchangeを利用 参照設定でImports Microsoft.Office.Interop.Outlookを追加済 単にOutlookの投票ボタンのオプション(承認、却下)を入れてメール送信したいのです。 ググりまくりましたが的を得た頁が見つからず悩んでおります・・

VBA 配列について

$
0
0
配列の使い方について教えてください 1つの配列をどんどん追加したりしたいので1つの mybox で追加していきたいと思っています。 (下記コードが実現できればと思います。) (1)配列を広げ追加したい (2)繰返しを使わず一気に書き込みたい (3)一部をクリアしたりしたい のですがよろしくお願いします。 Sub Macro1() Range("A1").Value = "A" Range("A2").Value = "B" Range("A3").Value = "A" o = Range("A1").End(xlDown).Row mybox = Range(Cells(1, 1), Cells(o, 1)).Value 'myBox(1,1)=A 'myBox(2,1)=B 'myBox(3,1)=A ←このような表示になります。 '------------------------------------------------- '(1)配列を広げ追加したい ReDim Preserve mybox(o, 2) For i = 1 To UBound(mybox) If mybox(i, 1) = A Then mybox(i, 2) = 0 Else mybox(i, 2) = 1 End If Next i '------------------------------------------------- '(2)(1)をC列に「myBox(?,2)を「繰返しを使わず一気に」書き込みたい 'Transposeは限界(65536個)を超えるので使えません。 Range(Cells(1, 3), Cells(UBound(mybox), 3)) = mybox '(3)配列myBox(?,1)は残したままmyBox(?,2)はクリアにしたい End Sub
Viewing all 6510 articles
Browse latest View live


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>