Excel VBA 質問スレ Part48 [無断転載禁止]©2ch.net

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん 転載ダメ©2ch.net (ワッチョイ 6f8e-Fc1g)
垢版 |
2017/05/16(火) 08:24:45.78ID:iIGA/64l0
!extend:checked:vvvvv:1000:512

スレ立ての際は一行目に
!extend:checked:vvvvv:1000:512
と入れてスレ立てして下さい

ExcelのVBAに関する質問スレです
コード書き込みや作成依頼もOK

※前スレ
Excel VBA 質問スレ Part47 [無断転載禁止]©2ch.net
http://echo.2ch.net/test/read.cgi/tech/1489557874/

※関連スレ
VBAなんでも質問スレ Part2
http://echo.2ch.net/test/read.cgi/tech/1432173164/
Access VBA 質問スレ Part1
http://echo.2ch.net/test/read.cgi/tech/1328536426/
Excel総合相談所 125
http://echo.2ch.net/test/read.cgi/bsoft/1481369538/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured
2017/05/16(火) 21:05:07.95ID:ORpNRMoi0
スコーン.Name = "スコーン" とか書きたんくないですんけど。
2017/05/16(火) 21:12:00.81ID:qp8pXuJpx
>>22
出来るよ。
そうしたい目的はなに?
2017/05/16(火) 21:38:51.33ID:ORpNRMoi0
>>24
>>23だと、スコーンの名前はスコーンとか言ってるようなものじゃないですか。
何か変なので、どうにかしたほうがいいなと。
2017/05/16(火) 21:44:47.11ID:FLRqiZ6lx
>>25
引数にしたいことと
nameに代入することの関係性が分からない。
まぁ宣言をお菓子にしとけばいいんでない。
2017/05/16(火) 21:48:13.03ID:iIGA/64l0
PHPならget_class()なんてそのまんまなものがあるんだけどね
vbaには無いっぽいな
28デフォルトの名無しさん (ワッチョイ 53c7-00IQ)
垢版 |
2017/05/16(火) 21:54:30.99ID:YL1OfOAE0
>>25
あーあ、やっちゃったね
質問するにもマナーってものがあるんだよ
スレを荒ららない為にもこの際覚えておけ

「目的を聞くやつにレスを返してはいけない」
2017/05/16(火) 21:59:56.08ID:wnIq1TKW0
そんな法則は聞かないな
2017/05/16(火) 22:19:15.46ID:FLRqiZ6lx
>>28
いつかそのマナー広まるといいね!
影でこっそり応援してぬわ。
2017/05/16(火) 22:30:24.74ID:H5+sVhHM0
なんで目的を聞くやつにレスを返してはいけないの?
質問の意図を汲もうとしているかもよ?
2017/05/16(火) 22:33:38.25ID:FLRqiZ6lx
>>31
その聞き方だと件の>>28は返事出来ないよ。
理由は察してあげて
2017/05/16(火) 22:35:06.66ID:iIGA/64l0
>>26
クラス名で分岐させたいパターンがある
ゲームプログラムだとclass名で敵か味方か判別する、というのは見たことがあるな
せめて継承でもできればその辺共通化できるんだけど、そこはvba。めんどくさい

しかしエクセルだとどういう状況か思い浮かばない

>>30
してなくて草
34デフォルトの名無しさん (ワッチョイ 53c7-00IQ)
垢版 |
2017/05/16(火) 22:44:02.80ID:YL1OfOAE0
>>31
質問の意図が分からん奴は質問に答えられない
目的を聞いても質問者の意図を引きだす事はできない
簡単な事だ
2017/05/16(火) 22:49:11.64ID:FLRqiZ6lx
>>34
なるほど。
素晴らしいね。
がんばれー
2017/05/17(水) 00:01:38.90ID:qRwApybV0
>>33
制御の向きが逆だよなあ
2017/05/17(水) 00:23:20.25ID:sfPoWe8nx
TypeName関数で自作クラス名って取り出せないんだっけ?
2017/05/17(水) 00:32:22.34ID:9uxtifvV0
>>37
それはできるけど、Meがない
Meがあればなんとでもできる

標準モジュール
Sub foo()
Set c = New Class1
'これはできる
Debug.Print TypeName(c)
End Sub

'クラスモジュール
Private Sub Class_Initialize()
'これができない
Debug.Print Me.TypeName
End Sub
2017/05/17(水) 00:39:06.93ID:dws00LGS0
クラス内部で つかうんなら
これじゃいかんのか?
Debug.Print TypeName(Me)
2017/05/17(水) 00:45:43.01ID:9uxtifvV0
>>39
すまん、いけた

解決!

標準モジュール
Sub foo()
Set bar = New Class1
Debug.Print bar.get_name()
End Sub

'クラスモジュール
Public name
Private Sub Class_Initialize()
name = TypeName(Me)
End Sub
Function get_name()
Debug.Print Me.name
End Function
2017/05/17(水) 00:51:22.92ID:sfPoWe8nx
解決やな
2017/05/17(水) 17:27:48.02ID:mwqvXh9q0
>>39
>>40
ありがとうございます。
それで名前があるものに名前を付けなくて済みます。
2017/05/17(水) 17:53:56.84ID:GJ9WSlKVH
>>40
そのコード、
Sub foo()
  Set bar = New Class1
  Debug.Print TypeName(bar)
End Sub
と同じじゃないの?

>>33
> せめて継承でもできればその辺共通化できるんだけど、そこはvba。めんどくさい
VBEのオブジェクトコンボボックスとプロシージャコンボボックスを選択すれば、
コードを自動生成してくれるから、全然めんどくさくないよ。
44デフォルトの名無しさん (ワッチョイ 53c7-00IQ)
垢版 |
2017/05/17(水) 20:29:29.04ID:G7cUCqPy0
俺は今重要な判断を下した
お前らは事務のねーちゃんよりスキルが低い
少なくともうちの事務のねーちゃんより低い事は確実だ
2017/05/17(水) 21:05:07.82ID:9uxtifvV0
>>44
お前、レスもらうのめっちゃうまいなw
思わず反論しそうになった
2chでレスをもらう能力、俺は敬意を表するよ

もしよければ、年齢と性別、職業を教えてほしい。どんな人か本気で気になる
2017/05/18(木) 06:43:55.44ID:PgOUGGac0
24歳

マイクロソフトジャパン勤務
2017/05/18(木) 08:36:51.83ID:7Fv0UmYNx
>>46
悪くないよ。
なんつーかコウウン
48デフォルトの名無しさん (ワッチョイ eef3-8cHL)
垢版 |
2017/05/18(木) 14:52:51.70ID:5nCvEgDF0
Private Sub Worksheet_Change(ByVal Target As Range)

Select Case Target.Address

Case "$A$1"

If Not IsNumeric(Target.Value) Or Target.Value = "" Then

Exit Sub

Range("B1:B9").Copy Range("B2")

Range("B1").Value = Range("A1").Value

Target.Select

End Select

End Sub

このコードの意味教えてくださいー
2017/05/18(木) 15:34:33.70ID:ZtOQ2Qac0
まずは実行してみたらどうだ
2017/05/18(木) 17:11:10.34ID:d+oDyp660
Private Sub Worksheet_Change(ByVal Target As Range)
ここに、Subの処理を定義する
End Sub

Select Case Target.Address
ここに、Caseの処理を定義する
End Select

Select Case Target.Address
// Target.Address が、"$A$1"なら
Case "$A$1"

// Target.Value が数値ではない、または、空文字列なら、Subを抜ける
If Not IsNumeric(Target.Value) Or Target.Value = "" Then

Exit Sub

// copy
Range("B1:B9").Copy Range("B2")

// 代入
Range("B1").Value = Range("A1").Value

// 選択?
Target.Select

End Select
2017/05/18(木) 19:06:48.56ID:hKe3x/Mw0
>>48
ugokanai kedo

A1セルの中身が数字に変わった場合、
B1:B9をB2:B10にコピーペースト
B1をA1の内容にする
2017/05/18(木) 19:21:07.71ID:f5T5khCgr
>>51
A1を選択
が抜けてる
2017/05/18(木) 22:27:14.87ID:EwzTzSyyM
マウスポインターの移動量かマウスのスクロール量を検知って出来ますか?
2017/05/18(木) 23:31:41.56ID:fbyfCIXE0
form上の話ならMouseMoveイベント使えばなんとかなるんじゃね?
form以外でならwin32api(GetCursorPosとか)を駆使すれば
2017/05/19(金) 12:10:12.11ID:Hh88K1uA0
最新版のExcelで、ファイルを開いた直後にだけコンパイルエラーが出るようになったから絶対更新しないほうがいいぞ

エラーが出るのは
Function ProcName(cel As Range) As Double
とか、パラメータにAs Rangeを持つところみたいで
一応As Objectに変えてしまえば通るけど、治すの大変だ・・・
2017/05/19(金) 12:26:18.38ID:Hh88K1uA0
関連してそうな情報を発見
https://blogs.msdn.microsoft.com/office_client_development_support_blog/2017/05/17/
とうとう本気で.xls形式を殺しに来たか
2017/05/19(金) 12:27:06.53ID:OupscBB+0
>>55
なんていうか、まあ頑張れ
2017/05/19(金) 12:49:41.54ID:P+QgsC3b0
俺のInsider slow バージョン 1704(ビルド8067.2115)では
>>55の情報だけを たよりにやって みたけど 問題ない (xls,xlsm 両方)
とだけ言っておく
2017/05/19(金) 13:13:31.21ID:Hh88K1uA0
>>58
すまない。新規ブックでは検証していなかった。

問題無いことを確認
14.0.718.5000
16.0.7927.1024
コンパイルエラーを確認
15.0.4927.1002
16.0.8067.2115
なので、>>58の環境でも発生すると思う。

新規ブックで、
Module1に
Function ProcName(cel As Range) As Double
ProcName = cel.Value
End Function

Sub btn_Click()
MsgBox "click"
End Sub
を書いて、ブック上のシェイプのマクロにbtn_Click()を割り当てるとファイルを開いた瞬間にだけコンパイルエラーが起こるよ

上記URLによれば、モジュール範囲の定義なら起こるらしいので
Private 変数 As Workbook
Sub btn_Click()
MsgBox "click"
End Sub
でもダメぽ

解決策はAs Objectとするか、モジュールを切り分けるしかない。
2017/05/19(金) 13:33:37.37ID:P+QgsC3b0
>>59
なるほどね
少なくとも 俺の環境下では >>59の条件で xls のみだな その現象が発生するのは
xlsmは 問題ない

つかもう excel2003までのexcel形式(xls)使うのやめたら? と思うのだけど?
2017/05/19(金) 13:52:53.66ID:Hh88K1uA0
>>60
全くもって仰る通り。

以前から.xlsmへの切り替えを勧めているが、なかなか全てを切り替えられなくてね。
各個人に持たせているファイルを差し替えろって言ってもメール無視されるし。

あと単純に.xlsmに変えてしまうと
・他のシステムが対応していないせいでxlsしか使えない。
・表の最大値が大きくなったお陰で、既存のマクロだと末端の列列まで処理するループが混ざっていて永久に処理が終わらない。
  (そのくらいマクロ直せよ・・)
・ブックのリンクが貼ってあるせいで過去のエクセルファイル全てのリンクを修復しないといけない。
  (作ったやつ誰だよ・・)
・データサイズの大きい「共有ブック」をxlsmに変えるととてつもなく重くなる。
  (データとマクロ分離しろよ・・)
とか様々な理由があって切り替えが終わってない。

ツッコミどころ満載やで。
2017/05/19(金) 13:56:26.64ID:P+QgsC3b0
いい 切り替えの機会じゃん
xlsは もうまともに 使えません(キリッ


・・・・と言えたらいいねw
2017/05/19(金) 22:44:50.72ID:ELP3hVnQ0
変数宣言を一番上に書くと、
確認する時、スクロールで戻るのが面倒なんですが、
Excelなのに、上の方の画面を固定出来るという発想は無かったのでしょうか。
Excelなのに。
2017/05/19(金) 23:07:15.86ID:HsQ+il8a0
そんなことより行番号表示かと。
2017/05/19(金) 23:10:43.79ID:1s7BLiGf0
グローバルで別のモジュールに書いてウィンドウを並べるとか
2017/05/19(金) 23:27:00.50ID:vYjNISl1x
Excel VBAしかやったことない人が何だか勘違いしてるようだがそもそもVBEはExcelの機能ではないぞ
2017/05/19(金) 23:34:30.47ID:vnM/uOfn0
>>63
> 変数宣言を一番上に書くと、
必要な所に書けばいいやん
って言うかスクロールが面倒なほどでかい関数とか書くなよ
2017/05/19(金) 23:42:30.09ID:FnbaGtrQ0
>>63
確認する時って
変数の何を確認するの?
2017/05/19(金) 23:49:13.07ID:ELP3hVnQ0
>>68
poって何の変数だっけ?
みたいな。
2017/05/19(金) 23:52:43.48ID:FnbaGtrQ0
>>69
何の変数ってのがよく分からんのだけど、
Dim Example As Long: Example = 1
みたいに宣言と代入を上の方でしてるって話?
ローカルウインドウとかその他機能でなんとかならんの?
2017/05/19(金) 23:54:11.19ID:1s7BLiGf0
中身のわからない変数名を付けるからそんなアホな事をせにゃならんようになるんだ
似たような変数名が多すぎてややこしいならfunctionに分ける等、予め余計な手間が発生しないようにするんだ
2017/05/19(金) 23:59:18.39ID:dZkjjWfrx
>>63
書かなきゃよい
2017/05/20(土) 00:21:30.52ID:foz/Iffu0
ネタだよな
コードウィンドウ分割するだけじゃねえのって思っちゃったけど
http://i.imgur.com/jnQLIFk.png
2017/05/20(土) 08:57:37.77ID:k9L+DwNA0
>>63は赤の他人が書いたクソ長いコードを解析させられている気の毒な人だ
と好意的に解釈しておこう
2017/05/20(土) 09:20:18.91ID:5sPtJFYn0
hoge param1:=xxx, param2:=yyy みたいな書き方に慣れないんですが
dummy = hoge(xxx, yyy) とかではダメな理由ってあるんでしょうか?
2017/05/20(土) 09:33:47.65ID:TX7Bd0Me0
>>75
別にどっちでもいい。好み

ファイルの保存なんかもこの方が見やすいと思う
例えば保存時で比べる
ファイル形式を定数で打つと分かり辛い
Thisworkbook.SaveAs("C:\foo",43)
こう書けばフォーマットなんだな、ということが見てすぐにわかると思う
Thisworkbook.SaveAs Filename:="C:\foo",FileFormat:="43"
本当はこの方が良いけどね
Thisworkbook.SaveAs Filename:="C:\foo",FileFormat:="xlExcel9795"

他にも引数が大量にあるときやパラメータが複雑な時にわかりやすい。以下は見辛い
dummy = hoge(xxx, , , yyy, , ,zzz)

逆にsum()を
sum arg1:=xxx, arg2:=yyy
なんてすると読みづらいだけになる

と言ってる俺も保存の時ぐらいにしか使わないけどね
2017/05/20(土) 09:53:58.83ID:5sPtJFYn0
ありがとうございます
事務仕事でExcelVBAをいじる必要があったんだけど
大昔の非構造化BASICやFORTRAN、Cなどの印象しかないので最近の言語は抽象的すぎて分かりにくい
2017/05/20(土) 10:13:55.47ID:I6OViHCS0
>>75
その名前じゃあまりメリットないけど引数の名前をちゃんとつけてたら分かりやすい
あと引数がたくさんある場合に後ろの方の引数を指定したい時とか
Workbook.Open FileName:="test.xlsx", AddToMru:=True
2017/05/20(土) 10:29:20.36ID:0mLljkpvd
>>77
大昔のCって関数と最初の { の間に変数宣言するようなやつ?
2017/05/20(土) 10:44:25.75ID:5sPtJFYn0
>>79
そんなやつ、カーニハンとリッチーの第1版、白いカバーの表紙のやつ
2017/05/20(土) 10:50:27.63ID:5sPtJFYn0
変数を宣言しただけでは領域が確保されず
値を代入しただけでプログラムが暴走するんだけど原因に思い当たらず3日間悩んだ挙句に挫折した
2017/05/20(土) 10:54:07.27ID:TX7Bd0Me0
>>81
上で見たけど、vbaは内部的にかなり変な挙動をしている
newの時点ではメモリ領域は確保されず、初めてプロパティやメソッドにアクセスした段階でメモリ領域が確保される

また、
set foo = thisworkbook
set bar = thisworkbook
は、foo == barに「ならない」
fooとbarは常に違う参照が生成されるので、別扱いとなる

そのコードを教えてくれれば問題解決できると思う
というか後学のためにも見てみたい
2017/05/20(土) 10:54:21.25ID:TX7Bd0Me0
newじゃないや、setか
2017/05/20(土) 11:19:48.33ID:nyexelOB0
日本語も変数として使えるからわかりやすい名前つければいい
2017/05/20(土) 11:57:41.20ID:w41RCx9Yp
日本語は好き嫌い分かれるからなあ
俺は日本語が見易いけどさ
2017/05/20(土) 11:59:34.10ID:TX7Bd0Me0
google翻訳しながら英語変数使うぐらいなら、日本語使ったほうが絶対に良い
2017/05/20(土) 13:11:22.41ID:DWQm6waj0
Visual Basic Edtor って、単体じゃ入手できないよな?
しかもExcelのバージョン違えば使い物にならんヶ所出てくるし
ThisWorkbook だって、どの?に成るだろうし
Microsoft Script Editer じゃあるまいし、どう考えてもExcelの付属品っつー立ち位置だろ
Excelの「おまけ」機能に決定

Word とか Outlook とかバリエーションは在るにしても
2017/05/20(土) 13:21:20.46ID:9VI8goCbM
根本的に勘違いしててワロタw
2017/05/20(土) 15:37:38.60ID:VKPh1Lah0
>>73
>>63じゃないけど、これ知らんかったわ
2017/05/20(土) 18:04:39.38ID:yKxdvQKVr
無知って凄いね
感心した
2017/05/20(土) 18:24:24.01ID:KHEwJCpd0
>>63
C#とかVB.netでアドイン作ればOK。
VBAでもセキュリティに問題出るけど作ることは可能。
2017/05/20(土) 18:58:10.02ID:E4Y2PkRr0
Excel VBA で Access と連携する業務システムって、ここの人達的にざっくりどう思いますか。社内システムの改良にアサインされてしまった。
2017/05/20(土) 19:08:49.87ID:KHEwJCpd0
>>92
どう思うって、どういう意味?
別に何とも思わんが。
2017/05/20(土) 19:16:24.30ID:E4Y2PkRr0
>>93
前スレ478さんが、VBAでSQLは鬼門って書き込みしてるのを覚えてたもんで、苦労するシステム構成なのかなぁと

Excel VBAの質問じゃないからスレチでしたかね、すんません
2017/05/20(土) 19:18:51.52ID:bcgPDffLp
>>92
良いんじゃね
2017/05/20(土) 19:51:15.58ID:nuBqrdCz0
苦労するかどうか、VBA以外にもSQL知っておかないといけないような気もするけど…
2017/05/20(土) 20:11:15.06ID:SOOWfvsE0
なんでVBAでSQLが鬼門なのか、理由とかあるの?
2017/05/20(土) 21:48:00.24ID:ZQ24XbJz0
Accessと連携なら、問題ないんじゃ…。
単体だと、更新処理系が面倒。
参照だけなら大差ないと思う。
2017/05/20(土) 22:03:15.15ID:SOOWfvsE0
ExcelVBAとAccessVBAでSQLの構文に違いがあると言いたいの??
2017/05/20(土) 22:25:58.77ID:TX7Bd0Me0
>>97
やったらわかる
phpでsqlは黄金パターンでうまくいく。db設計もいつも通り。文字コードはutf8
エラー処理も死ぬほどある

C#やVBはかなりめんどくさい、というよりもそもそも使う必要がかったので、前任者の引き継ぎが非常にだるい
つまずく場面としては、具体的には文字コード。shift-jisだと最悪。また、db設計が適当
db接続も何かうまくいかない
2017/05/20(土) 23:25:01.03ID:SOOWfvsE0
>>100
要するにお前のスキルが低すぎてVBA程度もロクに使いこなせない、としか理解できない内容だな
2017/05/20(土) 23:32:49.13ID:RVvLdbs7x
>>100
その差が大きいとは思えないけど。
vbaでもutf8扱えるよ。
接続はodbcで繋がる。
2017/05/20(土) 23:35:59.38ID:S4VyllBW0
ODBC=おでぶちゃん
2017/05/21(日) 00:10:42.76ID:iEpK3Njn0
>>99
SQLのUpdate、Delete、Replaceが駄目。

Excel側のRows().Deleteとか、Replace使えばいいだろって?
遅くないですか、それ。
2017/05/21(日) 00:16:44.29ID:o4hB34de0
それはVBAじゃなくてオラクルの問題なんじゃないのか?
2017/05/21(日) 00:22:22.71ID:o4hB34de0
>>105
どこからオラクルが出てきた!?
2017/05/21(日) 03:17:25.81ID:GlMb9Muz0
>>100
君なあ、能力の問題なのか性格の問題なのか分からんが説明が足らんのだよ。
ExcelからDAOを使うかADOを使うかによって変わるのは当然のことだし、ExcelとAccessでどうとか言われてもどういう観点の話か分からんだろ。
2017/05/21(日) 03:20:01.97ID:GlMb9Muz0
というか、文字コードの話が出てくるってことはODBCとかドライバの話まで出てくるじゃねーか。
それじゃあ違って当然だ。
109デフォルトの名無しさん (ワッチョイ 6792-qKRX)
垢版 |
2017/05/21(日) 07:08:05.80ID:S79+g3VB0
質問させてください。
excelからoutlook起動させてメールを作成するマクロ作ってます。
数パターン用意したテンプレートに任意の文言を置換・挿入してoutlookに渡す?感じです。
動作自体はうまくいってるんですが、なぜかoutlookに渡した本文の文字サイズが12ptになってしまいます。
outlookのデフォルトの文字サイズは10ptだし、12ptになる理由が全く想像つきません...
漠然とした質問で申し訳ないですが、outlook側で設定したデフォルトの文字サイズでメールを作成するようにできないでしょうか?

初心者なので、的はずれなこと言ってたらごめんなさい。
2017/05/21(日) 07:40:39.09ID:DM2pkhyK0
>>109
とりあえずぱっと思いつく原因は、エクセル側が12ptなのでそれがoutlook側に渡っている気がする
テキストだけ渡すようにするか、エクセル側を一時的に10ptにしてメール作成後に12ptに戻すとかで対処できるかもしれない
全然違うかもしれない。コードを見せてもらえたら試してみるよ
2017/05/21(日) 08:14:42.08ID:1Ubd4ETn0
>>97
>>104 とかの話でシートを SQL で操作する話を言ってるんだろ
あと >>100 は単にディスりたいだけ
PHP だといつも通りの DB 設計が VB/C# だと DB の設計が適当とか C# に挫折した底辺 PHPer の煽りだろ
2017/05/21(日) 09:34:47.94ID:bvqoufgo0
しかしなんで今どきAccessなんか使うんだろ。
SQL Server簡単だよ。Management Studio使いやすいし。
2017/05/21(日) 09:46:01.40ID:76EOq35R0
事務的な作業ならAccessで十分だからだろうな。
というかローカルで使えるDBソフトってAccess以外にあんのかな。
2017/05/21(日) 10:23:28.85ID:1Ubd4ETn0
>>112
DBMS だけじゃなくてレポート機能とかが欲しいんだろ

>>113
localhost で使えばどんなデータベースもローカルで使えるけど?
サーバーを立てたくないと言うなら sqlite とか
SQL-Server Compact Edition が見捨てられつつあるのが残念
2017/05/21(日) 11:05:17.83ID:DM2pkhyK0
使える人が多いってのは会社では非常に大きなメリット
桐ってソフトを使ってたけど、使える人が少なすぎてaccessに変えることになった

そしてword、てめーはダメだ
2017/05/21(日) 11:48:21.26ID:S79+g3VB0
>>110
レスありがとうございます。
excel側の文字サイズは10ptなので、ご指摘の原因ではなさそうです。
恥ずかしいですが、ファイルをアップロードしました。
ダウンロードキーは「excel」です。
https://www.axfc.net/u/3807959
実行ボタンを押すと、outlookが起動されてメールが作成されます。
ご確認お願いします。
2017/05/21(日) 14:13:30.87ID:/uUqSVmCx
>>113
発想が貧困過ぎて草
118デフォルトの名無しさん (ワッチョイ 068e-rE0G)
垢版 |
2017/05/21(日) 14:33:37.38ID:DM2pkhyK0
>>116
さっぱり分からん。なんか挙動がバグくさい
エクセルvbaからメールを作るとフォルトで12pxになるようだ。これは仕様と捉えていいと思う
で、解決方法としてはこう
<body>タグにインラインcssを設定する

Sub msg2olapp()
'''Outlookでメール作成
Set mail_item = olapp.CreateItem(0)
mail_item.To = toadd 'To
mail_item.Cc = ccadd 'Cc
mail_item.subject = mailsub '件名
mail_item.body = mailbody '本文
mail_item.htmlbody = Replace(mail_item.htmlbody, "<BODY>", "<body style=""font-size:13px"">")
mail_item.Display '表示
End Sub

インラインcssで設定したフォントサイズは何故か3/4になる。理由も意味もわからんが、ゲイツの趣味かなんかだろう
深く考えずに10pxの4/3、つまり13pxでインラインcssを指定する。こうすれば10pxのフォントサイズになる
119デフォルトの名無しさん (ワッチョイ 6792-qKRX)
垢版 |
2017/05/21(日) 17:02:34.86ID:S79+g3VB0
>>118
ありがとうございます。
望み通りの動作しました。

ちなみに、自分の環境では13pxだと6.5ptになってしまいました。(1/2になる?)
あと、>>116で作成したメールのタグを見てみたんですが、「p.MsoNormal...」ってとこのfont-sizeが12ptになっていて、そこを10ptに変更するとうまく表示されるようになるようです。
120デフォルトの名無しさん (ワッチョイ 0fc7-X+GT)
垢版 |
2017/05/21(日) 18:41:32.83ID:Ox0ZLs5T0
いまだにptとpx違いがわからない人っているんだね勉強になる
2017/05/21(日) 18:46:19.26ID:DM2pkhyK0
>>120
ありがとう本当に気づかなかった
web触ってるとptって単位は記憶から抹消されるわ
2017/05/21(日) 23:02:22.04ID:+shsKnP00
データベースとの接続処理で一つ教えてください

Sub test()
Dim wkR As New ADODB.Recordset


S_RecordsetClose (wkR)
End Sub

レコードセットのcloseとnothingの処理を一つにまとめようとしたんですが、
型が一致しません   と S_RecordsetClose (wkR) のところでエラーになります

Debug.Print TypeName(wkR) で見たら当然(だと思うんですが)Recordsetに
なってるんで、なんでこれで型の不一致になるんです?

ちなみに S_RecordsetClose に書いた処理は↓です

Sub S_RecordsetClose(ByVal rec As Recordset)
rec.Close
Set rec = Nothing
End Sub
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況