VBAなんでも質問スレ Part2 [転載禁止]©2ch.net
レス数が950を超えています。1000を超えると書き込みができなくなります。
VBAを使った質問ならなんでもござれ
本来の対象であるオフィスアプリを操作する以外の話もOK
ゲーム作り、Webアクセス、外部アプリの操作
COM(ActiveX)、Win32API、.NET Framework、DirectXなどなど
VBAで実行するものであればなんでも質問してください
VBAを開発環境としていろいろ作っちゃいましょう
前スレ
VBAなんでも質問スレ
http://peace.2ch.net/test/read.cgi/tech/1342087380/
関連スレ
Excel VBA 質問スレ Part36 [転載禁止]©2ch.net
http://peace.2ch.net/test/read.cgi/tech/1419718732/
Access VBA 質問スレ Part1
http://peace.2ch.net/test/read.cgi/tech/1328536426/
VBプログラマ質問スレ(Ver.6.0 まで) part64
http://peace.2ch.net/test/read.cgi/tech/1393069842/
Excel総合相談所 118 [転載禁止]©2ch.net
http://peace.2ch.net/test/read.cgi/bsoft/1430352555/ >>870
いろんなソースで、色つけたり太字にしたり、用紙指定や段組みして印刷させる
。
炎上プロジェクトに突撃するのに必須 >>864
'選択範囲内にあるテーブルの一行目以外をクリアします。
Sub clearSelectedTableData()
If Word.Application.Selection.Tables.Count = 0 Then
'MsgBox "Select Any Table!"
Exit Sub
End If
Dim t As Word.Table
For Each t In Word.Application.Selection.Tables
Dim r As Long, c As Long
For r = 2 To t.Rows.Count
For c = 1 To t.Columns.Count
t.Cell(r, c).Range.Text = ""
Next c
Next r
Next t
End Sub こっちのがスマートだった
'選択範囲内にあるテーブルの一行目以外をクリアします。
Sub clearSelectedTableData()
If Word.Application.Selection.Tables.Count = 0 Then
'MsgBox "Select Any Table!"
Exit Sub
End If
Dim t As Word.Table
For Each t In Word.Application.Selection.Tables
If t.Rows.Count > 2 Then
Dim r As Long
For r = 2 To t.Rows.Count
t.Rows(r).Range.Delete
Next r
End If
Next t
End Sub もし文字編集でcell()下位の.Rangeが省略されてるのを知らないと
cell.Range.Deleteの文字削除とcell.Deleteのセル削除が
使い分けができないので注意 >>871
そうだろうけど、
他のOfficeでも出来るんじゃないの?
拡張って参照設定の事でしょ?
>>874
マジかよWord Tableって・・。
ExcelでSQLが使えたり、Officeは割と何でもありだとは思っていたが・・。 >>876
リボンやクイックアクセスツールバーとかで増やすほうね>機能拡張 NothingとNullとEmptyの違いがわからない
MSはナンセンス、はっきりわかんだね EmptyはVariant型の初期状態(何も入ってない)
セルの初期状態でもある
確認方法
新規ワークシートに対して、イミディエイトウィンドウで
Print TypeName(Cells(1,1).Value)
とすると
Empty
と表示される
Nothingはオブジェクト型変数にオブジェクトが代入されていない(結びつけられていない)状態
NullはExcelだと出番がないと思っていい
主にAccessでデータを扱う時にNullが必要な場面が出てくる 複数セルのRangeからプロパティとってくるとき不一致だとNullになるくらいやな ユーザーフォームの、複数のテキストボックス、
例えばオブジェクト名をtb1、tb2とかにしてループ文に組み込むということはできますか?
オブジェクト変数というのが関係しそうな気がするんですが、
テキストを読んでも理解できない… >>881
すべてのテキストボックスでループ。
目的のテキストボックス群で名前を元に絞り込みすりゃ良いんじゃね。 普通はテキストボックスのTagプロバティに区別できるキーワード入れといて
For eachでUserform.controlsやると思う >>881
オブジェクトの配列作って、という事だと思うけど
使うとしたらオブジェクト参照を保持したまま色々したい時ぐらいかも
値の参照とセットだけなら皆さん挙げられているcontrolsでやりますね vba スタンダード 、accessのおすすめの問題集ってやっぱり公式テキストでしょうか。 エクセル Cells(1,1)
ワード Cell(1,1)
↑
は? 何でワードにはsが無い? >>887
Word.Selection.CellsとかRow.Cellsとかあるで
Tableには.Cell(1,1)しかないがな
ちなCellsはxy指定できんがCellはxy指定必須や
エクセルのプロパティのほうが異常なんやで vba エキスパート は、excel ベーシック以外は公式テキストまだだから受験は待ったほうがいいですよね。 以前word VBAの質問をした者ですが、その節はありがとうございました。
お陰様で処女作のユーザーフォームが完成しかかっているのですが、最終問題に難儀しています。
やりたい事:「保存」ボタンを押す→ActiveDocumentと同じ場所に「記録表」というフォルダを作成し、
その中に「"氏名”」というファイルを生成する。既に「記録表」のフォルダがあればフォルダは作成せず、
そちらにファイルを生成する。
なお、不特定多数のユーザーが使う前提です(保存場所を手打ちしたらユーザー名で詰む)
四苦八苦しましたが、ひとまず確認用にdesktopに生成しようとしてなんかユーザーフォルダの滅っ茶根深い場所に生成されたり、
推測で打ってみたメソッドが全く機能しなかったり(フォルダの有無を確認するようなのって何だろう)
なんというか、Excelのfxボタンみたいにメソッドの内容を教えてくれるやつ、ないんですかね…
ちなみに職場のPCはスタンドアロンでヘルプに繋がらず、自宅PCにはOfficeが入ってないです。 >>893
オフラインヘルプインストールできなかったっけ… 見てみて
F2キーでオブジェクトブラウザが表示される
これ無しで開発なんてやってられない 今オフラインのヘルプって提供されてないんじゃないのか? >>893
デスクトップはエクスプローラーの左のとこにカタカナで出てるとこと同じやで
深いとこにできても、そちらから近道すればよろし >>893
〉フォルダの有無確認
昔は Dir()だったけど、今は filesystemobjectかな。
参照設定も必要なので使い方も含めてggッテください
folderexists() 公式オフラインヘルプがあったのは2013だな
2016もオフライン版があるけど英語
https://github.com/OfficeDev/VBA-content/
基本的な機能は2013からあんまり変わってないから、2013用のヘルプを入れてしまうという手もある
使い勝手は悪いけど、いつでも参照できるという利点はあるから Activedocument.Pathで所在フォルダのパスが出せる
これとフォルダ名とファイル名繋げた文字列つくればSaveAs2の引数にできる 質問です。excel2016の並び替え機能で
漢字、かな(あ〜ん)、アルファベット(a〜z)で並べ替えて漢字の中でも「本店」を最上位とできませんかね?
降順だと上記並びなのですが、かな(ん→あ)、アルファベット(z→a)になります。
Custumorder に「本店」を入力すると漢字中で1番下になります。
よろしくお願いします >>901
ありがとうございます。
やってみます。 Wordの表で、
ActiveDocument.Tables(2).Select
みたいに選択したいのですが、どれだけ表を分割しても、
全ての表が Tables(1) という扱いなようでエラーになります。
ひとつ前に似たようなものを組んだ時には問題なくTables(2)になりましたが、
それと構文上は全く違いはありません。
どうしたら Tables(2)という扱いになるのでしょうか。 ユーザーフォーム内のコンボボックスにUSBの中にある画像一覧というフォルダ内の全ての画像名を表示したいのですがうまくいきません。
どのように変更すればよいか教えていただけませんか?
Private Sub UserForm1_load()
Dim myList As String
Dim myPath As String
Dim iName As String
myPath = "D:/画像一覧/*jpeg"
fName = Dir(myPath & "*.jpeg")
Do While iName <> ""
If myList <> "" Then
myList = myList & " " & iName
Else
myList = iName
End If
iName = Dir
Loop
If myList = "" Then Exit Sub
myList = Split(myList)
ComboBox1.List = myList
End Sub 取得するのが D:/画像一覧/*jpeg*.jpeg になってるとか
fName は iName の間違いじゃないのかとか
myList は String なのにSplitした後のものを代入してるとか >>905
返信遅れて大変申し訳ありません
3つのご指摘直して反映できました。
ありがとうございました。 ExcelVBAのユーザーフォーム上で、PDFを表示、操作をしたいです。
ですが、ユーザーフォームにコントロールを追加しようとすると、
「要素が見つかりません」とダイアログが表示され出来ません。
どなたか解決策をご存じの方がいましたら、教えていただけますでしょうか。。
Acrobat pro DCはインストールしてあり、ExcelはOffice365を最新の状態で使用してます。 >>907
EXCELは専用スレがあるので、そちらへどうぞ >>908
ありがとうございます。
そちらに書いてみます。 ここで質問していいかわからないんですが、違ったら誘導していただけると助かります。
メッセージボックスを最前面にするために以下のコードを利用したいのですが、呼び出し元の下から3行目のvbOKOnly を vbYesNo に替えた後、選択ボタンを取得する方法がわかりません。
どのようなコードを足したらいいかご教示いただけないでしょうか。
【呼び出し元】
Option Explicit
Dim WSHObj
Dim Args
Set WSHobj = WScript.CreateObject("WScript.Shell")
Args = "cscript ""C:\Program Files\PPX\script\WSHPopUP.vbs""" _
& " ""出力メッセージ""" _
& " 0" _
& " ""VBS名称""" _
& " " & vbOKOnly ←vbYesNoに替える
WSHObj.Run Args,0,true
Set WSHobj = Nothing
【WSHPopUP.vbs】
Option Explicit
Dim Arg
Dim WSHObj
Set WSHobj = WScript.CreateObject("WScript.Shell")
Set Arg = WScript.Arguments
WSHObj.Popup Arg(0),Arg(1),Arg(2),Arg(3)
Set WSHobj = Nothing
よろしくお願いします。 【呼び出し元】
Option Explicit
Dim WSHObj
Dim Args
Set WSHobj = WScript.CreateObject("WScript.Shell")
Args = "cscript ""C:\Program Files\PPX\script\WSHPopUP.vbs""" _
& " ""出力メッセージ""" _
& " 0" _
& " ""VBS名称""" _
& " " & vbYesNo
Dim hoge '受け取り用に追加
hoge = WSHObj.Run(Args,0,true) 'この変数hogeにvbYes=6かvbNo=7が入る。
'何か処理を書く
Set WSHobj = Nothing
【WSHPopUP.vbs】
Option Explicit
Dim Arg
Dim WSHObj
Set WSHobj = WScript.CreateObject("WScript.Shell")
Set Arg = WScript.Arguments
Dim fuga '戻り値用に追加
fuga = WSHObj.Popup Arg(0),Arg(1),Arg(2),Arg(3) 'popupの戻り値を取得
WSHObj.Quit fuga '呼び出し元に終了コードとして返す
Set WSHobj = Nothing vbDefaultButton1 とか、そういうのじゃなくて? >>911
ありがとうございます!
試してみます!
>>913
すみません、vbDefaultButton1 がわかりません >>911
>910,>914です。
教えていただいたコードを試してみたのですが、
‘何か処理を書く
のところに
MsgBox hoge
と入れたのですが、「はい」「いいえ」どちらの場合も 0 が返されます。
どうしたらいいでしょうか ???
VBAなの?
VBSなの?
MsgBox使えるのに、何でWscript使ってんの? 朗報
【アプデ/10】 2019年8月14日のWindowsUpdate後、VB関連が死亡。Windows10全バージョンにて
https://asahi.5ch.net/test/read.cgi/newsplus/1565930238/ >>915
【WSHPopUP.vbs】 のWSHObj.Quit fuga は間違い。エラー出してる。
Wscript.Quit fuga が正しい >>918
返信遅くなってすみません。
レスの通りに修正し、
さらに
fuga = WSHObj.Popup Arg(0),Arg(1),Arg(2),Arg(3) 'popupの戻り値を取得
↓
fuga = WSHObj.Popup(Arg(0),Arg(1),Arg(2),Arg(3)) 'popupの戻り値を取得
に変更し、成功しました。
たいへん助かりました。
ありがとうございました。 WordのアクティブXコントロールのテキストボックスなのですが
BackStyleを0設定すると背景色は消えるのですが
デザインモードを解除すると背景色が出てしまいます
これはバグでしょうか Exchange / Outtlook VBAの質問です
初歩的な質問で申し訳ありませんが、お知恵を拝借できないでしょうか
任意の名前を持つ配布リストや連絡先グループに属するExchangeユーザーのSMTPアドレスの一覧を取得するにはどうしたら良いのでしょうか
配布リストや連絡先グループをExchange ユーザーとして取得するところまでは出来ているのですが、そこから先がうまくいきません
なお配布リスト、連絡先グループいずれも個人ユーザーのみが登録されている前提なので、再帰によるメンバー取得は不要な状況です エスパー的にはexchangeユーザーのユーザー一覧と配布リストのユーザーの
名前を比較すればいいんじゃね >>925
これについて何か解決方法ありましたか?私も配布グループ取得で難儀しております。 VBAの質問スレで質問するのはなぜ馬鹿ばっかりなのですか? >>933
このスレのレベルを知ってる普通以上の人はここを頼ったりはしないから 頼むからVBAでWin32 APIを呼び出すのはやめてくれ
そこまで要求するなら包括的な自作DLLを作ればよいと ものぐさが使うのがVBAなのに
いちいちDLL化なんてめんどくせえ >>936
Declare文が多すぎてコードが見づらい Win32API使える奴がDeclare文読むの?
そりゃ、間違ってるとかおかしなのも中にゃあるけど、普通そんなとこ見ないだろ。 質問スレにも書き込んだのですが二つのieを起動して2つ目のieでpdfを開いて名前をつけて保存したいのですがexecwbを行うと一つ目のieのhtmlが選択されてしまいます。どうかやり方を教えてください。よろしくお願いします。getIEはシェル取得ファンクションです。
Set ie = CreateObject("InternetExplorer.Application")
ie.Visible = True
ie.navigate "http://yahoo.jp”
Dim ie2 As InternetExplorer
Set ie2 = CreateObject("InternetExplorer.Application")
ie2.Visible = True
ie2.Navigate2 "C:\\Desktop\test.pdf", 1
Set ie2 = getIE("test")
Dim test As String
test = "c:\test\test.pdf"
ie2.ExecWB OLECMDID_SAVEAS, OLECMDEXECOPT_DONTPROMPTUSER, test
End Sub 初心者です。どうかお力添えをよろしくお願いします。 すいません 自己解決しました。単純なスペルミスでした 製品番号のフォルダ検索して中のPDFファイルを開くようなマクロ書いてるんだけど
先日Officeのアップデートしたら、件のマクロがしばらく応答なしになって
悪意のあるマクロ云々とか言われてExcel強制終了になった
それ以後そのマクロは激遅に
ブックのファイル名変えたりマクロの関数名変えたりするとしばらくは元の速度に戻るが
1日位経つとまた遅くなる
調べてみたら、VBScript.RegExpのExecuteメソッドが10秒位かかるようになってる
通常は30msで終わるような代物がだ
どうもShellやRunで一度に多数のPDFファイルを開いているのがお気に召さなかったらしく
ファイル名や関数名でアンチウィルスのブラックリストに載る?
そのあとはそれっぽい名前のメソッドが標的になり遅くなるような感じ
こういうの経験した人いる? 会社のPCじゃなければそれもありだが…
paloalto trapsとかいう奴
毎回反応する訳じゃないのが嫌だし
編集中のデータも問答無用でごっそり強制終了しやがるふざけんな >VBScript.RegExpのExecuteが10秒
と
>ShellやRunで一度に多数のPDFファイルを開いている
の関連がわからんね
この二つは分けて原因を探るべきじゃ? マクロ付ファイルでPDF開かせるてのは相当に怪しいと捉えられる可能性は高いね
セキュリティ変更や除外設定なんてのは出来ればしたくないだろうし引っかからないような対策があればいいがな
ShellやRunでPDF開くんじゃなくExcelもしくはWordに取り込ませるようにすると引っ掛からないかもという気がしなくもない VBAから直接PDFを開くんではなく
バッチファイルを書き出し実行することで反応の確率は減ったが
アンチウイルスが反応しやすい型番とかあってよくわからん
正規表現のexecuteメソッドは「それっぽい」名前のメソッドだろ?
これがアンチウイルスが反応したときに動作してた関数から呼ばれた時だけ遅くなるんだよ
同じブック中の他の関数から呼ばれた時は高速のままだ
dir関数でフォルダ内部のファイル名取得して正規表現検索してる時だけアホみたいに遅くなる時がある VBA開発を頼まれた いくら位金額を提示したら良いか誰か教えてほしい
内容は不動在庫を15店舗くらいあグループ店の売り上げデータから引取先の候補を検索するシステム
商品のバーコードから行き先候補を検索する予定。
この内容ってアウトソーシングするといくら位? >>951
マジレスするとVBAは安いので1人月50ぐらいかな。
内容の詳細が分からないが、大して難しいとは思えないので。
どんなに簡単でも50以下は有り得ない。 >>951
人によるだろうな
安く提示すると未経験者とかがくるぞ >>944
遅レスだけど
速度が遅い件は経験ありますよ
うちの環境で調べたらSYMANTECのエンドポイントは大丈夫で、MSのディフェンダーだと遅かった
Win10のバージョンも影響したかもしれないけど、現行サポート対象バージョンは、ディフェンダーだとすべて遅い
会社のPCなんでActiveDirectory、SYMANTEC、SKYSEAがスタンダードなんだけど、更新時の不具合があったんで一部のPCでディフェンダーを使ってて発覚した
VBSの内容は、多少分岐やループはあるけど正規表現を使って置換するだけの簡単なものだった ミッションクリティカルな仕事をVBAでやってるのに、
少し前から動かなくなって修正したくても前任者がこの世に不在+仕様書やマニュアル無し+社内プログラム分かる人いない
って状況割とよく聞くけど、まあ自分が担当することになったんだけど、これどーすりゃいいの?
何社かソフトウェア開発系の会社に話聞きにいったら、vbaはちょっと・・・とか、プログラムみてこれはちょっと・・・って反応だし
1千万超える金積むとなると役員に説明しなくちゃならないんだけど、なんでおまえがやらないの?みたいな反応だし
まあ、控えめに言ってこのまま止まり続けると会社潰れるから言い値で出すしか無いんだろうけど
こういう状況、ここに巣喰う人達はどうやって乗り越えたのかアドバイスやヒントください
転職、以外で ミッションクリティカルなのに止まっても平気なのか
不思議な世界観 >>958
素人が作っためちゃくちゃなコードのデバッグや修正は仕事でもやってるからあんまり困ったことない
言語も問わず引き受けてる >>960
すげえ
社内システム作ってるところとかつてで色んなところに聞きいったけど数百万じゃ難しいって言われたんだ
分かる人には難しさっていうか、見積もりがわかるもんなんだな
参考までにどういうところを見て判断するもんなの?
偉い人に説明するときの参考にしたい >>961
変数名、インデント、コメントの入り方なんかを見れば、制作者のレベルがだいたいわかる
その上でソースの行数、モジュール数がどれぐらいか マクロの記録をベースにしてるのは危険な感じがする
あとループの中にgotoが入ってるやつ見たときはちょっと感動した vba捨ててまともなところに新しくシステム作ってもらった方が安いし早そう それだと社内で仕事が無くなるおっさんたちが文句言い出す 住宅で喩えるなら 地場でイチから設計・施工をする在来工法のパワービルダーや
社内で設計した通り加工し現地で組み立てるだけのハウスメーカー 又は方式は
一緒だけどコスト削減に特化して現地の安い下請け使って費用を抑えるローコスト系
システムを売りにしてる企業は上で言うHMに近く、依頼すればひと声一千万は相場
PBはどんどん規模が縮小してるから探すのも大変 LCHMなら見付かるかも知らんが
要求に応じかねるレベルだと思われる
当時の社内の人間が内製したレベルならその条件、例えばExcelVBAと絞って
改修・修繕の可不可(得意かどうか)を先ず相手に問えば話が早いかも知れない
業務内容を伝えるだけだとうまく伝わらずに高額商品を売る方向に話が進み兼ねない >>962
はえ〜・・・なるほどなぁ
変数名は一応業界の人なら意味が分かる程度
インデントはルールから逸脱してるのはほぼない、とおもう
コメントはあることはあるけど助けられたコメントはほぼないな
'ここで●×処理をする Sub ●×処理(・・・・・・・) みたいなw
行数はただの改行も含めると3万行くらいで
モジュールが4、functionが500、subが1500くらい
この辺が大量にあるから難しいって説明しようとしてたんだけど
数行(ステップ?)なら別にF8ポチポチしながら追えるんだよね
じゃあ足りないのは根気だろ、みたいに言われて循環複雑なんちゃらみたいなの調べてたけど
結局こんな数字だしても理解されないだろうしなぁってのと、単に俺が素人だからってのもあって今に至る
>>964
マジそれなんだけど、何をしてるのか誰もわかんないから何を作ってもらえば良いのかも説明出来ないっていうねw
世間で言われてる炎上案件よりよっぽどかわいいレベルなのかも知れないけど
マジであと数ヶ月放置して会社潰れればいいんじゃねーかとも思ってる >>966
おっと、同じ人かもしれんけどありがとなあ >>967
他人の作ったプロシージャを2千個3万行解析してドキュメントを作成しながらデバッグなら1千万はまあまあ妥当かと
設備投資でたった1千万が出せない会社は遠からず潰れると思うよ
ほかの資産や設備だって千万単位の修理はいつ発生してもおかしくないし レス数が950を超えています。1000を超えると書き込みができなくなります。