ラベル ASP/VBScript/VBA の投稿を表示しています。 すべての投稿を表示
ラベル ASP/VBScript/VBA の投稿を表示しています。 すべての投稿を表示

2011/07/12

[JavaScript][VBScript]JSからVB起動

タイトル通りなのですが、JavaScriptからVBScriptの関数を呼ぶことができるみたいだ。

JavaScriptからVBScriptの命令を実行するを参考にして、ソースを組んでみる。

<html>
<head>
<title></title>
<script language="JavaScript">
function vb(){
window.execScript("MsgBox('Hello VBscript!')",'VBScript');
}
</script>
</head>
<body>
<input type="button" value="Run" onclick="vb();">
</body>
</html>

window.execScript("実行したい内容",'VBScript');
で実行できるようだ。JavaScriptのeval関数に近いものがありますね。

2011/01/24

[VBA]行全体を選択する

行全体を選択したくなる時があります。
で、その方法を調べました。
3.行の指定を読むと、RangeオブジェクトのEntireRowプロパティを使えばオッケーとのことなのですが、ちょっと気になるのは、Rangeオブジェクトを使うに当たって、引数を2つセットしなければいけないということ。

行全体を指定することは自明なのだから、別にどこかのセル一つだけでもいいと思うのだが、いかがだろうか?

2011/01/23

[VBA]関数の戻り値が配列の場合

関数の戻り値に配列を返したくなったので、ぐぐってみたところ、
「Functionの戻り値を配列にしたいのですが」があって、ちょうど同じ悩みの相談がありました。

回答を読んでみると、

function hoge() As Integer()

End Function

というように、型名に()をつければいけるようです。

実際に試したところ、確かに、実行できました。

2011/01/22

[vba]配列の大きさを変更する

配列の大きさを動的に変更したい場合があります。
Excel(エクセル) VBA入門:配列の利用を読むと、こんな感じに動的に変更することができるようになります。

Dim hoge() As Integer
ReDim hoge(4)

ReDimを使う事で何回も、変更することができます。
覚えておくと便利かもしれません。

2011/01/19

[VBA]¥について

基本的にプログラムのほとんどは、割り算を「/」で表現し、vbaも当然この記法が認められているわけだが、参考4-7:演算子の種類と優先順位を読むと、どうやら、「¥」を使って、割り算を行なうとあまりをカットしてくれるようだ。

整数解が欲しい場合には、便利だと思った。

2011/01/15

[VBA]For文を脱出する方法は、

ループ抜けるを参考にすると、「Exit For」をみたいです。

2011/01/14

[VBA]文字列を数値型に変更する

ワークシートの名前に数字を入れたかったので、数値型から文字列型に変更する方法を調べました。

教えて!gooによると、CStr関数を使えば変更できるようです。

試してみたところ確かに文字列型に変更することができました。

2011/01/13

[VBA]ワークシートの名前を変更する

ワークシートの名前を変更するよるとNameプロパティーを使えば変更することができるようです。

サンプルコードとして、

Worksheets("hoge").Name = foo

とすれば変更することができます。

2011/01/11

[VBA]コンストラクタ発生時の衝撃的なこと

なんと、なんと、mo.ro.雑記さんのExcel:VBA:Classのコンストラクタとデストラクタを読んでびっくりしたのですが、コンストラクタ発生時に引数を渡すことができないようです。

こりゃーびっくりだわー。

2011/01/10

[VBA]配列の大きさを取得する

配列を使う局面があってその際に長さ(大きさ)を必要としたので、その方法について調査。
VB 配列操作・データ分解編を読むと、UBound関数を使うと配列の最大値連番数を取得するということなので、連番が0からスタートであることを考えると

Dim hoge(5) as Integer
Dim foo
foo = UBound(hoge) + 1

という形で取得できそうです。

重要なポイントはUBound関数で取得した値に1を加えるということ。
上記の場合、fooに、6がセットされます。

2011/01/09

[VBA]型宣言について

去年、VBAのお仕事を個人で頂いたので、その時に学んだことについて書いていきたいと思います。

Excel VBA(エクセル マクロ) 関数集 変数定義の各型宣言について読んでいてとても興味深かったのは、エクセルのワークブックやワークシートを型として宣言できるところ。

Set foo = Workbooks("ワークブック名(日本語でもおk、拡張子付き)")
Set hoge = Worksheets("ワークシート名(日本語でもおk)")

これって便利じゃねー??

2010/01/10

[ASP][VBScript]ByValとByRefの違い

長年悩んでいた悩みがついに解決

ASPでよく使われるByValとByRefの違いがどうしてもわかりませんでした。

そこで、下記のプログラムを作って検証してみることに

Sub Test1(ByVal arg1)
arg1 = "Test1により値が変わりました"
End Sub

Sub Test2(ByRef arg2)
arg2 = "Test2により値が変わりました"
End Sub

hoge = "Test"

Response.Write(hoge)
Response.Write("<br>")

Call Test1(hoge)
Response.Write(hoge)
Response.Write("<br>")

Call Test2(hoge)
Response.Write(hoge)

結果は

Test

Test


Test2により値が変わりました

となりました。

このことから、ByValは引数の値を変更せず、一方、ByRefは引数の値を変更してしまうことがわかりました。

これは、PL/SQLと対応させるとわかりやすいかもしれません。

ASP   |  PL/SQL
----------------

ByRef | in out

ByVal | in

とすれば、いざ、実装するにあたり、どちらがどっちとイチイチ悩む必要はなくなります。

ByVal と ByRefを読むと、ByRefは、「参照渡し」でByValは「値渡し」と書かれていますが、そこまで意識する必要なく上の対応表で考えればすむのかなと。

2009/05/11

[vbscript]小画面からpdfファイル表示時のエラー

vbscriptから小画面を起動し、その小画面にpdfファイルを表示しようとするとエラーが発生するみたいです。
IE6だと発生しなくて、なぜかIE7で発生しました。

サンプルソースをのせます。

<script type="text/vbscript">
swin = window.open("./AppProgrammingGuide.pdf","_blank")
</script>

ちなみに、"_blank"の部分を"hoge"のようにターゲットの名前をつけても発生しました。

これを解消するにはやはりJavaScriptでしょう!!

<script type="text/javascript">
window.open("./AppProgrammingGuide.pdf","_blank");
</script>

動作確認すると確かに解消されました。

この場合においても、IE6では正常に稼動するので、JavaScriptを使ったほうがいいんじゃーないのかなーっと思います。

というか、VBscriptってfirefoxとかで使えるのかな?

基本的に、マルチブラウザを意識した作りはなーっと思ってしまうのだが。。。

2008/12/09

[asp]exit Functionでファンクションを抜ける

ものすごくやってしまいました。
aspのファンクション内部で、exit Functionを書かない限り処理が続行するんですね。
関数名に値を書いた瞬間に処理が終了するかと思っていたのですが。。。
どーやら違うみたい。

jsやphp、cfはreturnやcfreturnを使って明示的に処理を終了させるという認識があるのですが、aspでも同じような認識を持たないとダメですね。
というか、一般的な言語は、明示的に終了させると認識しないと。。。トホホ。

2008/11/06

[asp]サーバーサイドで処理をとめる

突然、先輩社員から質問されてびっくりしたのですが、aspでサーバーサイドで処理をとめたいと時に使うのは、Response.end()でとめます。

2008/08/08

[asp][VBscript]入門:Function

Functionの構文は、下のようになっていようです。

Function hoge(args)
hoge = Return Value
End Function

ファンクション名に返したい値をセットするところがポイントです。

普段、JavaScriptやColdFusionでしか関数を使わないので、注意したいところ。

[asp][VBscript]入門:IF文

単純にIf文といえども、言語によって、書き方が、多少違うので、一応書こうかなと。

If 条件1 Then
・・・処理1・・・
ElseIf 条件2 Then
・・・処理2・・・
Else
・・・処理3・・・
End If

こうしてまとめておけば、IF文も怖くないぞと。

[asp][VBscript]入門:「""」の判定

前回に続いて、「""」の判定方法について。
一番、簡単なのは、Ifで判定するのがいいと思いました。

<%
Dim aTest
Dim aFlg

aTest = ""

If aTest = "" Then
aFlg = True
Else
aFlg = False
End IF

%>

<%= aFlg %>


確かにtrueを返します。
ある文字列が、「""」かどうか判定するのに便利かなと。

[asp][VBscript]入門:IsNull()

変数がnullかどうかを確認するIsNull()ですが、これもちょっと注意。
下のソースでは、falseを返します。

<%
Dim aTest
%>

<%= IsNull(aTest) %>

では、次は、どうでしょう??

<%
Dim aTest
aTest = ""
%>

<%= IsNull(aTest) %>

実は、これ、falseを返します。

VbScriptでは、「""」をnullとは違うものとわけているようで、どーすれば、trueを返すかというと、

<%
Dim aTest
aTest = Null
%>

<%= IsNull(aTest) %>

とブール値をセットすることで、trueを返します。

ってことは、「""」の場合の判定方法は??

それについては、次の日記に書きたいと思います。

2008/08/07

[asp][VBscript]入門:IsEmpty()

VBScript の変数の扱いを参考にすると、Dimで変数宣言を行っただけで、まだ値をセットしていない場合、変数の値は「Empty」という特殊な値になるようです。

で、Emptyかどうか確認するためには、IsEmpty(変数名)でtrueを返せば、まだ値がセットされていなくて、falseの場合は、セットされたことになります。

以上から

<%
Dim aTest
%>

<%= IsEmpty(aTest) %>

は、trueを表示します。

では、次は??

<%
Dim aTest
aTest = ""
%>

<%= IsEmpty(aTest) %>

一見、trueを返しそうですが、実は、falseを返します。

変数宣言した後に、""をセットしているので、変数には、空がセットされているとファンクションが認識するようです。

IsEmpty関数を使う時に注意です。

また、再度、Empty値に戻したい場合は、

aTest = Empty

でいけるみたいです。